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

# Add your function below!
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.