# Student Becomes the Teacher Error

#1

Oops, try again. get_average(alice) raised the following error: 'float' object is not iterable. I am wondering what exactly is going on in my code at the moment and why this error would be occurring. It is automatically iterating through all of the dictionaries? Even though I have not passed in an argument? Not sure what iteration is going on.

``````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 = 0
total += sum(numbers)
total = float(total)
mean = total / len(numbers)
return mean

def get_average(student):
homework = average(student['homework']) * .10
quizzes = average(student['quizzes']) * .30
tests = average(student['tests']) * .60
grade = sum(homework + quizzes + tests)

#2

You should just be doing:

`total = sum(numbers)`

Then I'm thinking this:

wouldn't matter much.

the `sum` is like a repetition. You might want to remove it.

#3

`sum()` is a list method that takes a list and reduces it to a single sum of the values. The line above is not a list, but an expression that adds the three values. No need to use `sum()` and the reason the error is thrown.

Aside:

There seems a penchant for verbosity and over-use of variables among the learners in this unit. We can do better than this...

and not need any variables (or extra steps).

``````def average(numbers):
return float(sum(numbers)) / len(numbers)``````

#4

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