Part of the Whole


#1



Hi everyone. I'm having a problem with Part of the Whole exercise. Would you please look at my code to see if anything's wrong with it?
Exercise URL:
https://www.codecademy.com/courses/python-beginner-en-qzsCL/1/4?curriculum_id=4f89dab3d788890003000096

Here's the error:

Oops, try again. get_class_average([alice, lloyd]) returned 91.15 instead of 85.85 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]
}

# Add your function below!
def average(numbers):
    total = sum(numbers)
    total = float(total)
    ave = total / len(numbers)
    return ave
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_letter_grade(score):
    if type(score) == int or type(score) == float:
        if score >= 90:
            return "A"
        elif score >= 80:
            return "B"
        elif score >= 70:
            return "C"
        elif score >= 60:
            return "D"
        else:
            return "F"
    else:
        return "Wrong Input!!!"
def get_class_average(students):
    if type(students) == list:
        results = []
        for i in students:
            results.append(float(get_average(i)))
        return results
    else:
        return "Wrong Input!!!"
def get_class_average(class_list):
    if type(class_list) == list:
        results = []
        for student in class_list:
            a = get_average(student)
            results.append(a)
        return results
    else:
        return "Wrong Input!!!"
def get_class_average(students):
    results = []
    for student in students:
        results.append(get_average(student))
        return average(results)


#2

Two things,

1. You need a global variable that stores all your dictionaries before and outside any function,

students = [lloyd, alice, tyler]

2. Your for loop needs to be indented like this for your code to run properly,

for student in students:
        results.append(get_average(student))
return average(results)

#3

I did as you asked but still the problem persists. :frowning:


#4

Please post your updated code


#5

Hi, this is my problem: (and I also don't know what's wrong...)
Could someone help me, please?

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]
}

our_class = [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 0.6 * tests + 0.3 * quizzes + 0.1 * homework
    
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 our_class:
        results.append(get_average(student))
    return average(results)

Oops, try again.
get_class_average([alice]) returned 83.8666666667 instead of 91.15 as expected


#6

@ieanne,

This statement is iterating through a global variable, our_class, for items ...

for student in our_class:

As a result, the function is inflexible, only able to compute results for that particular class. Instead, the loop should iterate through the function parameter, students, so that it works for any class.

Also, that global variable, which you created here ...

our_class = [lloyd, alice, tyler]

... should be named students, as per the third exercise.


#7

Thank you.
Now it works. :slight_smile:


#8

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