Part of The Whole Questions


#1



https://www.codecademy.com/courses/python-beginner-en-qzsCL/1/4?curriculum_id=4f89dab3d788890003000096


Traceback (most recent call last):
File "python", line 56, in
NameError: name 'results' is not defined

AND

Oops, try again. get_class_average([alice]) returned 83.8666666667 instead of 91.15 as expected

So I'm trying to get both the right answer (91.-something) and also define results? I thought I did already, but if someone could help me with this, I'd appreciate it! Thanks!


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


#Final countdown bb
students = [lloyd, alice, tyler]

def get_class_average(class_list):
    results = []
    grades = 0
    for values in students: 
        grades += get_average(values)
        class_average = grades / len(students)
    return class_average
    results.append(class_average)


print get_class_average(students)

#This is just me fiddling
print get_letter_grade(get_average(lloyd))
print get_letter_grade(get_average(alice))
print get_letter_grade(get_average(tyler))


#2

That line should be before the return, inside the loop block.

This is a misnomer. students does not contain values, but dictionaries.

for student in students:

is more to the point, and descriptive. student is a reference object which we can pass to get-average to compute the weighted average for that student.


#3

Hey, thank you! I appreciate the help with loop blocks, as well as the advice in naming variables (I added those in, and it helped reduce confusion for me!). That said, I'm still getting 83.66 rather than 91.5 for Alice? I've inputted the correct information in the original dictionary, so I'm a little confused on that front. Anyway, thanks again!


#4

Change that to students, or, alternatively, change the loop to,

for student in class_list:

This line should not be in loop block:

return grades / len(class_list)

In truth, your program does not need results since you are accumulating the individual grades.


#5

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