8. Part of the Whole


#1

Hello!

I am in the part 8 and I have to get the class average score.
However, I got the error message " get_class_average([alice]) returned 83.8666666667 instead of 91.15 as expected". I don’t understand because when I write “print get_average(alice)” in get 91.15.

Could someone help me?

Thank you!

> 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)
>   total=total / len(numbers)
>   return total
>  
> 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"
>   
> print "Lloyd: %s" % get_letter_grade(get_average(lloyd))
> print get_average(alice)
> 
> def get_class_average(class_list):
>   results=[]
>   for student in students:
>     print results.append(get_average(student))
>   return average(results)

#2

here:

for student in students:

why do you loop over students? A class size may very over time, so its better to loop over class_list, then you can specify the students in class at function call


#3

Oh yes you’re right.

Thank you!


#4