7
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))

それが私のコードであり、インデックスのトレースバックが発生する理由を理解しようとしています。

4

3 に答える 3

14

リストを反復すると、アイテムのインデックスではなく、リスト内のアイテムが返されます。あなたが書いた正しいコードは次のようになります。

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
于 2013-01-12T01:22:13.940 に答える
13

grade[i]リスト内の要素を既に参照しているため、これを行う必要はありません。それを行う必要があるのは、それを単純な古いものに置き換えるだけです。i

ただし、これにはすでに組み込み関数があります-sum

print(sum(grades))
于 2013-01-12T01:22:10.480 に答える
6

for i in grades:の要素を反復処理しgradesます。インデックスを反復処理しません。

コードを修正するには、i代わりにgrades[i].

printステートメントの使用を恐れないでください。コードのデバッグに最適です。

于 2013-01-12T01:22:25.167 に答える