8.Part of the whole! Oops, try again. get_class_average([alice]) should return a number


#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)
    avg=total/len(numbers)
    return avg
    
def get_average(student):
    homework=average(student["homework"])
    quizzes=average(student["quizzes"])
    tests=average(student["tests"])
    results = (homework * 0.1) + (quizzes * 0.3) + (tests * 0.6)
    return results
    return 0.1*homework
    return 0.3*quizzes
    return 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>=70:
        return "C"
    elif score>=60:
        return "D"
    else:
        return "F"
print get_letter_grade(lloyd)        

students={"students":["lloyd","alice","tyler"]}
def get_class_average(students):
    
    results=[]
    for students in students:
        get_average(students)
        results.append(students)
        return results

Oops, try again. get_class_average([alice]) should return a number. help me out with this


#2

Where to start, lets start here:

students={"students":["lloyd","alice","tyler"]}

students should be a list containing the lloyd, alice and tyler dictionary, if you don't remember, revisit 3. put it together

here:

for students in students:

why use the same name for the iterator and the list you are looping over? This can only cause trouble. given the iterator contains individual student, maybe you should name it as such?

here:

get_average(students)

you calculate the average grade for a student. But you don't store this is average grade anywhere, so how are you going to append it to results?

a function ends the moment a return keyword is reached, so currently your function ends in the first run of the loop. This means your function will not calculate the correct class average for any class with 2 or more students, place return outside the loop.

you need to return the average of results of the list, maybe an idea to use your average() function?


#3

thanks much :smiley:


#4