8/9 average undefined


#1

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 get_average(numbers):
total = sum(numbers)
total = float(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 get_letter_grade(get_average(lloyd))
def get_class_average(student):
results = {}
for a in students:
results.append(get_average(a))
return average(results)

Error:
Traceback (most recent call last):
File "python", line 42, in
File "python", line 27, in get_average
NameError: global name 'average' is not defined


#2

I think you need to change how you're declaring results. You've got "results = {}" and it should be an empty list "results = []". I'd blame the shift key!

I had the same error and this other discussion clarified that! :grinning:


#3

Sorry but it still did not help.


#4

After looking closer you've also got at least one syntax issue. In the new function you're feeding (student) into the function but using students in your for loop.

You might have some other issues, though I didn't see any. If you keep getting the error you noted above, you've still got a syntax issue though. If that's the case, I'd go through the new function very closely and map where you're using your variables and verify your formatting. It's tedious, but you'll need that skill to actually apply what your learning to your own projects.


#5

The argument in the function get_class_average should be 'students' and you have 'student', therefore, when you call 'students' in your 'for' loop, it will not find it.


#6

The error is still the same it has to do with average and i don't know what to do.


#7

def get_average(student):
return (0.1 * average(student["homework"]) + 0.3 * average(student["quizzes"]) + 0.6 * average(student["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"

students = [lloyd, tyler, alice]

def get_class_average(students):
return average([get_average(student) for student in students])

print get_class_average(students)
print get_letter_grade(get_class_average(students))

This code will help


#8

I am a newbie, so take what you will from this... I don't see your function for when we defined "average." Did it disappear? Maybe that is why it can't compute the average in the later code. The function looked like this:
def average(numbers):
total = sum(numbers)
return float(total)/ len(numbers)