# Part of the Whole

#1

Hi guys,

Been trying to faff this one out. It seems to work for the most part in Atom, but when I submit it, the website barks "
Oops, try again. get_class_average([alice]) should return a number" at me.

Looks like it is saying that no number is being returned. Thanks in advance for your input.

``````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):
# takes a list of scores and creates an average
total       = (sum(numbers))
total       = total / len(numbers)
return      total

def get_average(student):
# calculates a weighted average for each student based on homework, quizzes and tests
homework = average(student["homework"])
quizzes = average(student["quizzes"])
tests = average(student["tests"])
return 0.1 * homework + 0.3 * quizzes + 0.6 * tests

# spits out a letter grade for each students, e.g. 90% = A
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, alice, tyler, ]

def get_class_average(students):
results = []
for student in students:
return (results.append(get_average(student)))
return average(results)

get_class_average([alice])``````

#2

Inside the function `get_class_average()`
The final `return` statement should not be part of `for loop` but its a separate block of code inside the function and it should have same level of indentation as for loop.

also this line of code...

`get_class_average([alice])`

As our function returning something ,It need to be printed or saved(and used/printed) in some variable.It does nothing here,Its an idle-code.

EDIT:
As it is necessary to understand our error.

Oops, try again. get_class_average([alice]) should return a number"

`return (results.append(get_average(student)))`

A function ends the moment it sees/reach `return` statement and it does not execute any code after it. Your current code is returning a list not a number.
To fix this..
You can remove the return? as that line of code only meant to do certain operation there.

#3

Thank you so much!

So basically I have to remember that after the return statement, the functions will not run anything else.
And also that the return statement indentation must be in-line with the function name.

#4

Yeah when function reaches at return statement it just returns value attached to it and halts ,even there is code after it ,It does not run it.

Also Indentation is important here as final return is different block of code.

#5

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