# Wrong Return for Class Average

#1

get_class_average([alice],[lloyd]) returns as 80.55.

expected return of 85.85.

``````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) / 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

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):
for x in students:
results = []
results.append(get_average(x))
return average(results)``````

#2

Initialize this empty list before the loop.

#3

that makes sense! So it does not create a new results list with every iteration...

#4

Another probable tendency that many users might do as i did while learning this section:

I did a different kind of mistake, and here is how
i declared empty list before or outside the function of get_class_average(students)

``````results = []

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

I did it out of fear to avoid overwriting or avoid local declaration to be inaccessible by other due elements if any later one. Hence it returned the wrong average to me too.

I understand it did not work due to the same mathematical reason, i.e. a new average will be calculated after each appendage of value in the empty list of

results = []

#5

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