11.8 Part of the Whole


#1

I can't figure out what is wrong with this code.
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"])

def get_average(student):
quizzes=average(student["quizzes"])

def get_average(student):
tests=average(student["tests"])

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"

print get_letter_grade(get_average(lloyd))

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

it says get_class_average([alice]) resulted in an error:list indices must be integers, not (then a word starting with s is cut off)
Any ideas?


#2

Hello, @vcolleluori!

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

The thing with it is that you're trying to pass the entire list, who's reference is stored in the argument students, to the function get_average(), check the first line right after your for loop definition.
That's causing the error on your code.

Edit: You're also using three functions with the exact same name and argument to get specific values but only one of them is actually getting the values from homework, quizzes and tests, multiplying and adding them and later returning it while the others are simply storing values in the variable tests which will no longer exist after the function, where such variable is defined , has been executed.
Example:

def testFunction():
     variableB = "Hello!"
     print variableB # We'll get the value "Hello"
print variableB # We'll get an error because the variable varuableB doesn't exist in this scope, only inside the function's scope.

If you still have doubts about it, let me know and I'll try explain in a different way!


#3

it's work with me :slightly_smiling:

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


#4

it gave me 'return' outside function


#5

@flame2000 You need to put the return inside the function.