8. Part of the Whole


#1

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

get_class_average([alice, lloyd]) returned 91.15 instead of 85.85 as expected


I want it to run


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)
    return float(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 >= 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(student)
        results.append(get_average(student))
        return average(results)


#2

A loop ends the moment a return key is reached. Please check the indentation for your get_class_average function.


#3

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

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"]) * .10
    quizzes = average(student["quizzes"]) * .30
    tests = average(student["tests"]) * .60
    return homework+quizzes+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"
    
get_letter_grade(get_average(lloyd))


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

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

Please what's the problem with my code? Why is get_class_average([alice]) not returning a number?


#4

The first call to get_average(student) is unnecessary because the returned value is not getting stored here and just below this call you're again calling the same function and appending the returned value to results. You can safely remove the first call.

The function is to return the average of the class, not just one student, so the return statement should be outside the loop.


#5

You're making the same mistake as the OP. Look for my reply to notsoawesome elsewhere in this discussion. Hope it helps :slight_smile:


#6

SOLVED!!!

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

This solved it for me.


#7

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