Part of the whole : list indices must be integers, not str


#1



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

Part of the Whole

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


how am i getting a string with the last function... i cannot find any reference in the code to A output of strings


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

students = [lloyd, alice, tyler]

# Add your function below!

def average(numbers):
    total = sum(numbers)
    total = float(total)/ len(numbers)
    return total
    
def get_average(student):
    homework = average(student["homework"])
    quizzes = average(student["quizzes"])
    tests = average(student["tests"])
    overall1 = homework * .10
    overall2 = quizzes * .30
    overall3 = tests * .60
    answer = overall1 + overall2 + overall3
    return answer
    
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"
       
       
results = []

def get_class_average(students):
    for person in students:
        results.append(get_average(students))
    return average(results)


#2

here:

results.append(get_average(students))

students is a list, while get_average can only handle a single student/person as argument, that is why you have a loop


#3

ahhhhhhhh thank you so much


#4

#5

#6

https://discuss.codecademy.com/t/part-of-the-whole-list-indices-must-be-integers-not-str/184015/2

hey im still a little confused

if my code for my function is

def get_class_average(students):
for person in students:
a = get_average(students)
results.append(a)

   return average(results)

its actually looping through each person in the list called "students" i thought and appending each result to the list results.... why do i still get the error . i read your response and thought that i understood but, its not working. "students" is representative of 3 names...why doesnt it run through all three


#7

because the function should work for a class of any size (1, 2 or 3 students), your class might get more students or students might leave, or other possible cases

if you call the function multiply times, results will accumulate data from all the function calls given results isn't defined in the function


#8

ok i understand that part...in theory but
the error has nothing to do with what your saying .

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

how is this piece of code putting in a string?

results = []

def get_class_average(students):
for person in students:
a = get_average(students)
results.append(a)
return average(results)


#10

here:

a = get_average(students)

how did you get back to students? Which is a list? we solved this? You said you understood?


#11

we didnt solve it... after making changes same "get_class_average([alice]) resulted in an error: list indices must be integers, not str"

read below

Instructions
Define a function called get_class_average that has one argument students. You can expect students to be a list containing your three students.
First, make an empty list called results.
For each student item in the class list, calculate getaverage(student) and then call results.append() with that result.


#12

can you understand that i interpreter this as problem solved?

this assumes the loop iterator is student, given you decided to make this person you should append of person to results list using get_average function


#13

wow....ok ok ok...that worked, i can finish it from here this time... the "student" "students" juggle and word play was really playing on my head. it gave me a float response now thanks again.


#14