Part of the Whole: Alice, We Have a Problem


#1


In "Student Becomes the Teacher": 8. Part of the Whole,

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

I keep receiving:
"Oops, try again. get_class_average([alice]) returned 83.8666666667 instead of 91.15 as expected"

For some reason, I believe that the code is only taking one person's average and excluding the others.


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

def get_average(student):
    homework = float(average(student["homework"]))
    quizzes = float(average(student["quizzes"]))
    tests = float(average(student["tests"]))
    weighted_average = (homework*0.1)+(quizzes*0.3)+(tests*0.6)
    return weighted_average
    
def get_letter_grade(score):
    if score >= 90:
        print "A"
        return "A"
    elif score >= 80 and score < 90:
        print "B"
        return "B"
    elif score >= 70 and score < 80:
        print "C"
        return "C"
    elif score >= 60 and score < 70:
        print "D"
        return "D"
    else:
        print "F"
        return "F"

def get_class_average(student):
    results = []
    results.append(get_average(lloyd))
    results.append(get_average(alice))
    results.append(get_average(tyler))
    return average(results)

I've looked at the other posts addressing this topic and have considered multiple sources of the problem but to no avail. Any and all help would be greatly appreciated. Thank you!


#2

Hi @terawhiz10069 ,

The get_class_average function needs to be able to work within any list of students, not only lloyd, alice, and tyler.

Consider renaming the function parameter to students. Then, inside the function, iterate through students, which will represent a list when the function is called. During the iteration, pass each item in students to the get_average function, appending the result of that call to results.


#3

I do think that looping through the student in students then appending their class average results is what the code requires.
We are being asked to put each student's average function in a list called results by way of a function. Think about it.


#4

if you loop it through it still has the alice error


#5

Hi @pysolver50412,

Looping through the students list is one of the tasks necessary for producing the correct result, but it is not sufficient by itself. The three essential tasks are to ...

  • create an empty list, results, to hold the average for each student.
  • iterate through the list of students, passing each item to the get_average function, and appending the result of each of those function calls to the results list.
  • return the result of passing results to the average function.

Be careful with the indentation, so that the return statement is not made part of the loop.


#6

Thanks for all the input guys! I've figured it out. Much appreciated.


#7