# Part of the Whole

#1

Part of whole

I've looked over all thousand times but still can't get it right.
It keeps saying that "Oops, try again. get_class_average([alice]) resulted in an error: list indices must be integers, not 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)
total = total/len(numbers)

students = [lloyd, alice, tyler]
def get_average(student):
homework = average(students["homework"])
quizzes = average(students["quizzes"])
tests = average(students["tests"])
for name in student:
return 0.1*homework + 0.3*quizzes + 0.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(students):
results = []
for student in students:
results.append(get_average(student))
return average(results)``````

#2

Hi @joyishere,

The errors are all contained within this function:

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

1.. using `students` instead of `student`

Notice that in this exercise, each student has multiple scores for their homework, quizzes and tests. When we are calculating the average score, we are finding the average score of each component for each student, and not the average of all 3 students (i.e. merely each student's average).

So in this case, instead of doing something like:

do for each student instead. Try it for quizzes and tests as well

2.. prematurely using a `for` loop

You did this bit:

``````  for name in student:
return 0.1*homework + 0.3*quizzes + 0.6*tests``````

the `for` bit is unnecessary, because later on you will be doing for each student anyway over here:

Doing it in the previous function will be confusing then...

Hope this helps

#3

got it! Thanks a lot

#4

you're welcome

remember to check the problem as solved!