8/9 Part of the Whole (Should return a number)


#1

When I completed and ran my code for lesson 8.9:

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)
    return total / len(numbers)
    
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 < 90 and score >= 80:
        return "B"
    elif score < 80 and score >= 70:
        return "C"
    elif score < 70 and score >= 60:
        return "D"
    else:
        return "F"
        
get_letter_grade(get_average(lloyd))

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

I get the following error in return: get_class_average([alice]) should return a number

I'm not sure how I'm getting this error.


#2

results is defined as an Array - results = []. Then the average of alice is appended and the code expects number. When you write return results, an Array is returned. Try and define results = 0 and then just add to it in the loop.


#3

You're not averaging out the results but instead getting an array. Try:

return average(results)


#4

You need to return average(results) outside the for in loop to finish the function.


#5

Thank you! This solved it for me.


#6

i typed d same code but it returned 91.15 instead of 85.85 and its showing d error


#7

@shikhar23
So i figured it out. Same thing hapenned to me.

What you have to do is make sure you indent the "return" line so it is only ONE indent away from the "def" statement above. NOT twice, because then it would be indented one away from the "for" statement, making the "return" as part of a loop.

You want the return statement to apply to the function, not inside the loop.!