2016-10-25 5 views
0

Hornerのルールを使用して関数を評価しようとしています。しかし、問題になった。 "TypeError: 'int'オブジェクトは反復可能ではありません。誰もがすぐに私はこの問題の解決策を見つけるのを助けることができますか?タイプエラー評価多項式

def evaluatePoly(poly, x_): 
    polyTotal = 0 
    for nn in len(poly): 
     polyTotal *= x_ + poly[nn] 
    return float(polyTotal) 

ポリがリストとしての機能に来ている: はここに私のコードです。私はそれが私の問題だと思っていますが、それに対応するために私のコードを修正する方法をidkに教えてください。

+1

'len(poly)'は整数( 'poly'リストの項目数)です。整数に対して反復処理を行うことはできません。しかし、あなたは 'range'が何をしているのか見てみたいかもしれません。http://pythoncentral.io/pythons-range-function-explained/ – BorrajaX

+1

実際にインデックスを作成する必要は全くありません。ただポリのpoly_nnのためにする – sedavidw

答えて

3

問題はpolyとは関係ありません。 range(len(poly))の代わりにlen(poly)を超えてnnを反復しようとしています。しかし、あなたはまた、何が0ある10なぜなら回に初期化されなければならない。この

def evaluatePoly(poly, x_): 
    polyTotal = 1 
    for i in poly: 
    polyTotal *= x_ + i 
    return float(polyTotal) 

polyTotalのように見えるあなたのコードを作ることになるとにかくforeachループを使用して方がいいでしょう。

+0

0 * NaNは0ではありません。<::^) –

+0

@MateenUlhaq、私は本当に誰も 'NaN * 0'に行くとは思わない。 0 *無限大も0ではありません。 –

1

問題は、ポリそのものではなく、ポリゴンの長さを反復しようとしていることです。あなたが本当にインデックスで行きたい場合は、あなたが行うことができ、

また
def evaluatePoly(poly, x_): 
    polyTotal = 1 
    for nn in poly: 
     polyTotal *= x_ + nn 
    return float(polyTotal) 

:あなたのコードは、に変更し

def evaluatePoly(poly, x_): 
    polyTotal = 1 
    for nn in range(len(poly)): 
     polyTotal *= x_ + poly[nn] 
    return float(polyTotal) 

あなたはまたpolyTotalはおそらく1、0以外に初期化したいです、それ以外の場合は毎回0を返します