Part of the whole


#1

I am trying to get the class average, but get this error message:

Oops, try again. get_class_average([alice]) resulted in an error: 'NoneType' object is not iterable. Anyone else with this issue?


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.10 * homework + 0.30 * quizzes + 0.60 * tests   

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"
        
score = get_average(lloyd)
print get_letter_grade(score)    

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


#2

This doesn't look quite right...

Did you mean to write, 'student in students`?


#3

Good catch, thanks. But now getting a new error. I am going to figure this out!


#4

We cannot assign a statement to a variable.

results.append( ... )

is a statement.


#5

Yes, this assignment statement does not produce the desired effect ...

results = results.append(get_average(students))

The append method directly modifies the list on which it is called, but then it returns None. Therefore, the above statement appends an item to the results list, and then discards that effect by assigning the returned None to the results variable. So follow @mtf's advice by appending the value of get_average(student) to the list here, rather than the value of get_average(students), and omit the assignment operation.


#6

Good point. Again, I left only half an answer. Thanks!


#7

I appreciate the time you take to explain things. thannk you


#9