2017-11-07 23 views
-1

forループをPythonで使用しようとしたときに発生したエラーの理解に問題があります。ここでは、問題を引き起こしたループがある:Forループでエラーが発生しましたが、ループ中にエラーが発生しました

list = ["1", "2", "3"] 
numList = [int(i) for i in list] 
product = 1 
for i in numList: 
    product = product * numList[i] 

エラー:IndexError: list index out of range

私は、次のwhileループを使用して問題を解決することができました:

と間違っている何
list = ["1", "2", "3"] 
numList = [int(i) for i in list] 
product = 1 
i = 0 
while i < len(numList): 
    product = product * numList[i] 
    i += 1 

エラーを引き起こすループfor

+2

。 '3 'は有効なインデックスではありません。 –

+0

それぞれの場合に 'i'の値を印字してみてください。 – JJJ

+2

'product = product * i'は' i'がリスト内の数字であるべきである。より良い名前をつけてください。 –

答えて

3

リストの値をインデックスとして使用しました。インデックスとコンテンツを混同しました。

for i in numList: 
    product = product*numList[i] 

あなたは問題があると思うの値をプリントアウトすることによって、これらの問題をトレースし、将来的には

for i in numList: 
    product = product * i 

または

for i in range(len(numList)): 
    product = product * numList[i] 

であるべき。この場合、エラーメッセージは、インデックスが範囲外だったことを言ったので、あなたは、ループの最初のステートメントとして

print i, type(i) 

のようなものを試してみましたはずです。


また、あなたは少しあなたの計算ラインを簡素化することができますのでご注意:あなたは* *用のループ場合はその内容でリストをインデックスしている

product *= i 
+0

'for'ループのおかげでありがとう。私はnumListのi行目が 'list'インデックスが0から始まるので、0で始まらないことを認識しませんでした。' product * = i'に関して、私はそれを行うことができません。 'list'はインデックスと一致しないので、数値の値を掛けたいと思います。 – prestondoris

+0

あなたの 'for'ループは' i'を全くインデックスとして使用しません。リストから値を引き出します。あなたのリストが '[True、17、" foo "]'だった場合、 'i'は最初の反復で' True'( '1'と解釈されます)範囲外エラーが再び発生します。 3回目の繰り返しを終えると、文字列をリストインデックスとして使用しようとするとタイプエラーが発生します。 – Prune

+0

'product * = i'の変更を試してください。インデックスは使用しない*ことに注意してください。インデックスを考慮することなく、値を使用します。 – Prune

関連する問題