for文と辞書・リストについての質問
Pythonで下記関数を作ると、次のようなエラーが発生しました。
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
}
def average(numbers):
total = float(sum(numbers))
total = total / len(numbers)
return total
def get_average(student):
homework = average(student["homework"])
quizzes = average(student["quizzes"])
total = float(0.5*homework + 0.5*quizzes)
return total
student = alice #test alice
print(get_average(alice)) #correctly works
def get_class_average(students):
results = []
for student in students:
results.append(get_average(student))
return average(results)
students = alice #test alice
print(get_class_average(students)) #error
Traceback (most recent call last):
File "", line 28, in
File "", line 24, in get_class_average
File "", line 13, in get_average
TypeError: string indices must be integers
27行目のalice
を、[alice]
に変更したらうまく動作するようになりました。
双方をPythonTutor で比較確認したところ、Step 27においてリストが作られるかどうかが違っており、またalice
の方ではStep 31のfor文実行時に、get_class_average
のstudent
に辞書の文字列キーがひとつ入ってしまっていました。
そこで質問なのですが、どうして19行目ではget_average
がalice
で動作したのに、28行目のget_class_average
から呼び出したget_average
においてalice
では文字列が入ってしまい、うまく動かないのでしょうか。for文に関係していると思うのですが、よくわかりません。