Part of the Whole


#1

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 homework * 0.1 + quizzes * 0.3 + tests * 0.6
def get_letter_grade(score):
    if score >= 90:
        return "A"
    elif score >= 80 and score < 90:
        return "B"
    elif score >= 70 and score < 80:
        return "C"
    elif score >= 60 and score < 70:
        return "D"
    else:
        return "F"
    print get_letter_grade(get_average(lloyd))
def get_class_average(students):
    results = []
    for student in students:
        results.append(get_class_average(students))
        return average(results)
        print results


#2

here:

results.append(get_class_average(students))

you call get_class_average again (the function you are currently executing), so the function will endlessly call itself. you should call get_average. to get the average for each student (this is for individual students, so use student, not students)

a function ends the moment a return keyword is reached, in your case in the first run of the loop, you might want to change the indent of return so that return executes after the for loop

If you need more help, post an updated version of your code


#3

Thank u very much. It really works


#4