# 6/9 error: string indices must be integers, not str

#1

Hi
i have error in 6/9

get_average(alice) raised the following error: string indices must be integers, not str

why did this error raised?

``````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]
}

def average(numbers):
total = 0
total = sum(numbers)
return float(total)/len(numbers)

def get_average(students):
for st in students:
print st["name"]
homework= average(st["homework"])
quizzes= average(st["quizzes"])
tests= average(st["tests"])
w_average=.1*homework+.3*quizzes+.6*tests
return w_average
print get_average([lloyd, alice, tyler])
``````

thanks

#2

why do you have a loop in your get_average function? This function is suppose to calculate the average grade for a single student, in the next exercise you will build a get_class_average function, then you can use the loop

#3

thank you
yes , you are right
But what if i need to get it for each student
i think there is no error in my code because it gives me the average of lloyd but stops at alice
with this error
i want to know how to fix it

#4

you will build a function for this in the next exercise, for which get_average is a helper function, thus its important that get_average calculates the average grade of a single student.

#7

Thank you
@stetim94
i now understand it is meaningless using return inside a loop
thank you again

#8

It’s not meaningless. It’s perfectly valid, and very useful, to return from a loop

But it’s not useful to have a loop that never does a second iteration due to unconditionally exiting the first time

#9

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.