# 8. Part of the whole

#1

Oops, try again. get_class_average([alice]) returned 83.8666666667 instead of 91.15 as expected

I don't know what I'm doing wrong. please help. I thought by looping student in students, all three of them would have their average number in the result making that a list. Then with return average(results) would calculate my answer.

``````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)
total = total / len(numbers)

def get_average(student):
homework = average(student['homework'])
quizzes = average(student['quizzes'])
tests = average(student['tests'])
return .1 * homework + .3 * quizzes + .6 * tests

if score >= 90:
return 'A'
elif score >= 80:
return 'B'
elif score >= 70:
return 'C'
elif score >= 60:
return 'D'
else:
return 'F'

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

#2

Check the parameter of function `get_class_average()`.

#3

You want to change the name of the data in the for loop, so you want to make it

for names in students:
results.append(get_average(names))
return average(results)

I have reason to believe that the reason you kept on getting an error is that in your for loop you gave the data in your list the same name as your list (i.e you named them both students).

#4

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.