I got my code working, thanks to other people in the forum who posted about the same question...what I don't understand is the *why*.

Since we used students throughout the whole rest of the section without defining the student list, I don't understand why we have to define students=[lloyd,alice,tyler] at the end in order to get the class average/ average letter grade. If we do have to define it to print the class average, why didn't we have to define it before when we were using it in the functions for the the individual student average?

Thank you in advance for the help!!

```
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]
}
# Add your function below!
def average(numbers):
total=sum(numbers)
total=float(total)
return total/len(numbers)
print 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_letter_grade(score):
if score>=90:
return "A"
elif score>=80:
return "B"
elif score>=70:
return "C"
elif score>=60:
return "D"
else:
return "F"
score=get_average(lloyd)
print get_letter_grade(score)
score1=get_average(alice)
print get_average(alice)
def get_class_average(students):
results=[]
for student in students:
results.append(get_average(student))
return average(results)
students=[lloyd,alice,tyler]
print get_class_average(students)
print get_letter_grade(get_class_average(students))
```