2016-07-06 20 views
1

私はPythonの初心者です。ここでいくつかの基本的な質問が出るかもしれません。誰かが助けてくれますか?TypeError:文字列インデックスは、strではなく整数でなければならない。

私は各生徒の平均を求め、その平均の平均を計算します。 Get "TypeError:文字列インデックスは、strではなく整数でなければなりません"。それが何を参照し、どのように修正するかを理解できません。ここに私のコードです:

lloyd = { 
    "name": "Lloyd", 
    "homework": [90.0, 97.0, 75.0, 92.0], 
    "quizzes": [88.0, 40.0, 94.0], 
    "tests": [75.0, 90.0] 
} 
alice = { 
    "name": "Alice", 
    "homework": [100.0, 92.0, 98.0, 100.0], 
    "quizzes": [82.0, 83.0, 91.0], 
    "tests": [89.0, 97.0] 
} 
tyler = { 
    "name": "Tyler", 
    "homework": [0.0, 87.0, 75.0, 22.0], 
    "quizzes": [0.0, 75.0, 78.0], 
    "tests": [100.0, 100.0] 
} 


def average(numbers): 
    total = sum(numbers) 
    total = float(total) 
    return total/len(numbers) 


def get_average(student): 
    homework = average(student["homework"]) 
    quizzes = average(student["quizzes"]) 
    tests = average(student["tests"]) 
    return 0.1*homework + 0.3*quizzes + 0.6*tests 


def get_class_average(students): 
    results = [] 
    for student in students: 
     result = get_average(student) 
     results.append(result) 
    return average(results) 

students = ["lloyd", "alice", "tyler"] 
print get_class_average(students) 
+0

トレースバックを読んだことがありますか。 – jonrsharpe

+0

はい、私はそれを読むが、それは多くの行を列挙している。問題の原因となった行が常にわからない。 –

+0

あなたがそれを完全に理解していなくても、少なくともそれを含めることができます。そしてそれを解釈するのを助けるために:原則として、エラーの前に*最後の行が呼び出された下から始めます。 – jonrsharpe

答えて

6

名前を引用符で囲むと、変数ではなく文字列リテラルです。

>>> x = 3 
>>> x 
3 
>>> 'x' 
'x' 

上記で定義した変数を参照するには、students = [lloyd, alice, tyler]を使用してください。

+0

これを指摘してくれてありがとう。私は学生リストを変更しました。しかし今、それは警告しています:TypeError: 'float'オブジェクトは呼び出し可能ではありません。これは "total = float(total)"だと思います。だから私はそれを引用します、それでも同じです。そして、すべての生徒のマークが整数に変更されても動作しません。 –

+0

@EmmaZhao - Python 2のインタプリタで元のコードを(私が指定した変更で)実行し、 '83.8666666667 'を取得しました。私はあなたの新しい問題を再現できません。 – TigerhawkT3

+0

Wow..weird、それはバージョンのことかもしれないが、私はそれを理解しようとするだろう。どうもありがとう! –

関連する問題