Part of the Whole / list indices must be integers, not str" error


#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"])
    quiz = average(student["quizzes"])
    test = average(student["tests"])
    return 0.1 * homework + 0.3 * quiz + 0.6 * test
    
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 item in students:
        results.append(get_average(students))
    return average(results)

I get "Oops, try again. get_class_average([alice]) resulted in an error: list indices must be integers, not str" error,

can you help me please?


#2

Copy the function call from the error message into your own code and run again. Look at the error message in the console window. If not immediately obvious what's up, start adding prints in that area to see what value is incorrect. And make sure that you have understood the error message as it tells you what you are looking for.


#3

I'm not sure if i understand but when i copy the function call

get_class_average([alice])

at the end i get following errors

Traceback (most recent call last):
  File "python", line 52, in <module>
  File "python", line 49, in get_class_average
  File "python", line 28, in get_average
TypeError: list indices must be integers, not str

#4

Which tells you where it happened. Go look at that place in your code (see my suggestions above)


#5

Thanks,

Changed the last part to below and it fixed it.

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

#6

OH! I was getting this too.

I was using "get_average(results)", not "average(results)"