8 part of the whole


#1



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


Oops, try again. get_class_average([alice]) resulted in an error: global name 'student' is not defined
this is my error code


I am not sure what i am doing wrong. I am at the point with this that i don't know if i really get this or not. I mean i am doing the exercises but i do not feel like i am actually understanding everything. I don't want to just go to the qa and copy the solution i really want to know what i am doing wrong here. any help would be appreciated. thanks


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)
    total = total/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
    return homework + quizzes + tests
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"
    elif score < 60:
        return "F"
    print get_letter_grade(get_average(lloyd))
def get_class_average(students):
    results = []
    for i in student:
        print i("name")
        results.append(get_average([i]))
    print results
    return average(results)
    all_students = [lloyd,alice,tyler]
    print get_class_average(all_students)


#2

In python, be careful with indentation, I think the problem here that you indent this code:

    all_students = [lloyd,alice,tyler]
    print get_class_average(all_students)

Which mean, the python will see this code as the part of the function get_class_average().
If i am right, You want to call get_class_average() function with all_students list as the argument, correct?
If so, you should put this two line outside the function, (do not indent them).

Hope it helps a little bit.


#3

thanks for the tip. I will try it out in a few moments


#4

hi, may i ask the line 'for i in student:' What does 'student' indicate ?


#6

The i is common variable to represent a counter. The word student means look at the student object.


#8

for some reason i am still getting the same error. i don't know whats wrong here.


#9


#10

Hey, try this:

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

insert this and only this,
you could reset the code and paste it.

Well, the problem here is you didn't give any argument to .append() while it requires one argument.
by doing

avg = get_average(student)
results.append(avg)

you could save the average score of the students in "avg"
then pass the "avg" to the next line and append it into "results"

Hope it helps:D


#11

Thanks, I finally got it right. For some reason the code below returned the wrong average for each student:

for i in students:
    results.append(get_average(i))

But storing each average in a temporary variable like above solved it somehow. I'm a bit puzzled, but I guess you can't take shortcuts in python? :smile:


#12

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.