8. Part of the Whole


#1



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

get_class_average([alice]) resulted in an error: list indices must be integers, not str

I don't understand why it's saying that the indices must be integers if it is passing [alice] as the argument.


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):
    return float(sum(numbers)) / len(numbers)
    
def get_average(student):
    homework = average(student["homework"])
    quizzes = average(student["quizzes"])
    tests = average(student["tests"])
    students_average = (0.1 * homework) + (0.3 * quizzes) +                        (0.6 * tests)
    return students_average
    
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"

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


#2

`..... students = [lloyd,alice,tyler]

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

print get_class_average(students)...]() `


#3

Hi @cssslayer13429,

The error comes from this bit:

which is, in all likelihood, a careless mistake!

Let us reconsider the point of the function get_class_average. By creating this function, we are trying to find the class average of all the students in the class.

Within the body of the function, when we do the bits about

what does the list results eventually contain after the loop has been completed? Pause here for a moment to think about it.

Okay, so actually, the list results will contain only 3 numbers, a number for Lloyd, a number for Alice, and a number for Tyler, and all these numbers are their respective average scores (from their own homework, quizzes and tests).

So now, the next step is to find the average of these 3 numbers (a.k.a. the items in the list results). To find this, which function should you use? Does it make sense to use the get_average function (as you did above)? If not, which function should you use instead?

Hope this helps :slight_smile:


#4

Thank you @umopapsidn!

You sir are a genius. Yes careless mistake indeed!

For those interested all I had to do was use the average() function, not the get_average() function.


#5

Glad to help, @cssslayer13429 :slight_smile:

Remember to mark the question as solved!