grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]
def grades_sum(grades):
sum = 0
for i in grades:
sum += grades[i]
print(grades_sum(grades))
それが私のコードであり、インデックスのトレースバックが発生する理由を理解しようとしています。
grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5]
def grades_sum(grades):
sum = 0
for i in grades:
sum += grades[i]
print(grades_sum(grades))
それが私のコードであり、インデックスのトレースバックが発生する理由を理解しようとしています。
リストを反復すると、アイテムのインデックスではなく、リスト内のアイテムが返されます。あなたが書いた正しいコードは次のようになります。
def grades_sum(grades):
total = 0
for grade in grades:
total += grade
return total
もちろん、他の人が答えたように、これは を使用してはるかにエレガントに行うことができますsum
。
実際に別のインデックスが必要な場合は、次のように使用できますenumerate
。
def grades_sum(grades):
total = 0
for i, grade in enumerate(grades):
total += grade #or grades[i]
return total
または、アイテムを取得することをまったく気にしない場合
def grades_sum(grades):
total = 0
for i in range(len(grades)):
total += grades[i]
return total
grade[i]
リスト内の要素を既に参照しているため、これを行う必要はありません。それを行う必要があるのは、それを単純な古いものに置き換えるだけです。i
ただし、これにはすでに組み込み関数があります-sum
print(sum(grades))
for i in grades:
の要素を反復処理しgrades
ます。インデックスを反復処理しません。
コードを修正するには、i
代わりにgrades[i]
.
print
ステートメントの使用を恐れないでください。コードのデバッグに最適です。