8. Part of the Whole



I'm getting the following error code:

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

Not sure what I'm doing incorrectly...I thought my averages are already integers. Any help here?


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)
    average = total/len(numbers)
    return average
def get_average(student):
    homework = average(student["homework"])
    quizzes = average(student["quizzes"])
    tests = average(student["tests"])
    get_average = .1*homework + .3*quizzes + .6*tests
    return get_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"
        return "F"

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


Not sure if this is the main problem but you will get an error on this eventually. Your return statement is out of line needs to be back in line with your for statement


Thanks, while this wasn't the main problem, I do see how this would eventually result in an error. I have changed this.


EURKEAAAAAA found it! You need student not students in your results.append :smiley:


Don't want to be the bearer of bad news, but I already tried this before I posted. Returned this error:

get_class_average([alice]) resulted in an error: 'function' object has no attribute 'getitem'


Hmmm well post your full code now. Based off of your previous code I pasted everything into mine and that was the only problem after the return statement was moved back. But I will take another look at it :thumbsup:


Edited my code to show the most up-to-date version.


should be in ( ) not brackets! :smiley:


the problem is here:

return average[results]

average() should be a function call, it calls the average function you build earlier.


I thought my code does that?

if I have defined the average function above and then later write

return average(results) shouldn't that call the function?


but you use square brackets here? that is for accessing lists/dictionary by index/keys, to make return average[results] a function call you should use parentheses


Yep I came to that same conclusion after I worked on it in my lesson :thumbsup:


@bibleman13 @stetim94

YESSSSSSS okay so the two problems that I had were in this line:

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

1) The input of get_average should have student, whereas I had students
2) Returning the average of results should have been in line with my for function
3) I should have used parenthesis instead of brackets

Thank you to you both!