8-part of the whole-get_class_average([alice]) resulted in an error


#1

Hey got a bit stuck on this one hoping someone can see where i've gone wrong. i tried calling the functions and printing out the current student name (curr) but this lso caused an error.
the error is "function object has no attibute '____getitem____' but i can't see which attribute isn't getting passed
many thanks in advance for any help

sorry can't work out how to reindent code and won't let me upload txt version :frowning:

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]
}
results = []

# Add your function below!
def average(numbers):
    total = sum(numbers)
    return float(total)/len(numbers)
 
students = [lloyd, alice, tyler]   

def get_average(student):
    homework =average(students["homework"])
    quizzes =average(students["quizzes"])
    tests =average(students["tests"])
    return homework*0.1 + quizzes*0.3 + tests*0.6

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):
    for curr in students:
        results.append(get_average[curr])
    return average(results)

#3

ok realised results.append(get_average[curr]) should be results.append(get_average(curr))
but now getting: list indices must be integers not str
do i need to create a dictionary for results? with an integer as the reference?

`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!

results = []

students = [lloyd, alice, tyler]  

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

def get_average(student):
    homework =average(students["homework"])
    quizzes =average(students["quizzes"])
    tests =average(students["tests"])
    return homework*0.1 + quizzes*0.3 + tests*0.6

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):
    for curr in students:
        results.append(get_average(curr))
    return average(results)`

#4

ok got a bit further found my mistake in get_average where had left an s off one students
now getting alice returning 85.6875 instead of 91.15
think i've seen other pple having this issue so should be able to muddle through this but here's the code so far if anyone can see where i've gone wrong

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!

results = []

students = [lloyd, alice, tyler]  

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

def get_average(students):
    homework =average(students["homework"])
    quizzes =average(students["quizzes"])
    tests =average(students["tests"])
    return homework*0.1 + quizzes*0.3 + tests*0.6

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):
    for curr in students:
        results.append(get_average(curr))
    return average(results)
    
print get_class_average(students)

#5

ok solved it i was trying to initialise results as a global variable outside the function and moved it inside the get_class_average function.
wow really struggled through this one will leave this post up here incase can help anyone else that gets stuck on these ones. good luck here's the corrected code:

`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!



students = [lloyd, alice, tyler]  

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

def get_average(students):
    homework =average(students["homework"])
    quizzes =average(students["quizzes"])
    tests =average(students["tests"])
    return homework*0.1 + quizzes*0.3 + tests*0.6

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 curr in students:
        results.append(get_average(curr))
    return average(results)
    
print get_class_average(students)`

#6

Thanks for leaving this up. Was going nuts on this one. Had the same problem you did at the end, but it turned out my RETURN was indented directly under RESULTS.APPEND. Caught it by looking at your code.


#7

I much prefer to see the thread slowly drop into the abyss though, people abuse their ability to copy things.


#8