I am strucked in student becomes teacher part of the whole exercise


#1

Hello friends,

I am strucked in student becomes teacher part of the whole exercise. I have written the below code and i get the below error. I have no clue where have i gone wrong. Also, I have used the print statements to make the program more clear to analyze where i did wrong which does not show any error due to those print statements. I request friends to me help me.Thanking you
Oops, try again. get_class_average([alice]) returned 85.6875 instead of 91.15 as expected

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]
results =[]
def average(numbers):
    total = sum((numbers))
    total = float(total)
    numbers = len(numbers)
    total = total/numbers
    return total   

def get_average(student):
    homework = average(student["homework"])
    quizzes = average(student["quizzes"])
    tests = average(student["tests"])
    return 0.1 * homework + 0.3 * quizzes + 0.6 * tests
    
def get_class_average(students):
    for student in students:
        results.append(get_average(student))   
    return average(results)
    
get_class_average(students)
     
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"
weightlloyd = get_average(lloyd)
print weightlloyd
grade = get_letter_grade(weightlloyd)
print "grade of lloyd is %s:" %grade

weightalice = get_average(alice)
print weightalice

weighttyler = get_average(tyler)
print weighttyler

print "average of lloyd"
total = average(lloyd["homework"])
print "avg of lloyd homework is %f:" %total
total =average(lloyd["quizzes"])
print "avg of lloyd quizzes is %f:"%total
total =average(lloyd["tests"])
print "avg of lloyd tests is %f:" %total

print "average of alice"
total = average(alice["homework"])
print "avg of alice homework %f:"%total
total = average(alice["quizzes"])
print "avg od alice quizzes is %f:" %total
total = average(alice["tests"])
print "avg of alice tests %f:" %total

print "average of tyler"
total = average(tyler["homework"])
print "avg of tyler homework is %f:" %total
total = average(tyler["quizzes"])
print "avg of tyler quizzes is %f:"%total
total = average(tyler["tests"])
print "avg of tyler tests is %f:" %total

#2

Initializing results[] before the for statement should correct it.

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


#3

I have already initialized the results below the` students list. I could not understand why it is showing the error.

students =[lloyd,alice,tyler]
results =[]

Can you please explain why the results be inside the def get_class_average(student): instead of outside?

def get_class_average(students):
        results = []

#4

Here's what I have. maybe it will help you.

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)
    return total / len(numbers)
    
def get_average(student):
    homework = average(student["homework"])
    quizzes = average(student["quizzes"])
    tests = average(student["tests"])
    return (homework * 0.1) + (quizzes * 0.3) + (tests * .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"

print get_letter_grade(get_average(lloyd))

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

#5

I got the same problem and defining the results list inside the function fixed it - thanks!
Is this just a problem with the parsing that codeacademy is doing to check our code, or a problem with the code itself?