11. Student becomes Teacher weird error


#1



I got a problem in the last exercise of chapter 6 in Python. I don't know what's wrong with it, and I keep getting the error:

Traceback (most recent call last):
File "python", line 51, in
NameError: name 'students' is not defined

I genuinly have no clue what's wrong here. Even tried copy-pasting answers I found on Github, but I keep getting the same error.

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 = sum(numbers)
    total = float(total) / float(len(numbers))
    return total

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

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

print get_class_average(students)
print get_letter_grade(get_class_average(students))


#2

Seems your error is right there, check spelling and such.


#3

this means your are using variable students which is not defined. there is a difference between defining a function and running it. after above print command, you call the function with argument students which is empty/ not defined. so we need real data when you call it. you should have before print command someting like:
students = [.....] fe. students = [alice, lloyd]
then your call command (get_class_average(students)) will use these arguments to calculate the average


#4

As @tomaszd79 mentioned, you need to define the list of students whose names you are trying to pass to get_class_average
in your variable definitions add:

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