Wrong Return for Class Average


#1



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


get_class_average([alice],[lloyd]) returns as 80.55.


expected return of 85.85.


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"

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


#2

Initialize this empty list before the loop.


#3

that makes sense! So it does not create a new results list with every iteration...


#4

Another probable tendency that many users might do as i did while learning this section:

I did a different kind of mistake, and here is how
i declared empty list before or outside the function of get_class_average(students)

results = []

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

I did it out of fear to avoid overwriting or avoid local declaration to be inaccessible by other due elements if any later one. Hence it returned the wrong average to me too.

I understand it did not work due to the same mathematical reason, i.e. a new average will be calculated after each appendage of value in the empty list of

results = []


#5

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