Part of the whole


#1

Hello,

I've been getting error messages for "part of the whole" and this was my first one

" File "python", line 51
for student in class:
^
SyntaxError: invalid syntax"

Now I've decided to make a list to find a workaround for "for student in class"

It looks like this:

def get_class_average(students):
    results = []
    classroom = [lloyd, alice, tyler]
    for student in classroom:
        return get_average(student)
        results.append(get_average(student))
    return average(results)

So my entire code looks like this: 

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

def get_class_average(students):
    results = []
    classroom = [lloyd, alice, tyler]
    for student in classroom:
        return get_average(student)
        results.append(get_average(student))
    return average(results)

but now I get this:

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

What am I doing wrong?


#2

You are using classroom instead of students as the instructions indicate.

Also, if you declare the students list inside of a method, nothing else can access it. From there it is just a matter of making sure you print everything it is asking for.


#3

Okay, I've fixed that, thanks for that

Now I keep getting another error message:

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

I've been looking at other codes in this q&a and my code seems to be identical yet not working for me somehow


#4

Can you re-post the code you have now so I can see what we are looking at. I know you just made the changes I suggested, but it's just easier to see it.


#5

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

students = [lloyd, alice, tyler]

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

#7

Sorry for the last response I deleted, i was one step ahead of where you are.

In your method, your code stops running as soon as you pass the return statement. So the first return statement inside the get_class_average for loop does not belong. Delete that and you will pass.


#8

Hello. Please can you explain why I get "Oops, try again. get_class_average([alice]) resulted in an error: 'list' object is not callable " and in particular what does "list object not callable" mean.The answers I get are 80.55, 91.15 and 79.9 Thank you for all the help.


#9

I'll be happy to help. Just start a new thread with your code posted so I can see it. If I can't get to it one of the other helpful members will.


#10

get_class_average([alice]) resulted in an error: unsupported operand type(s) for +: 'int' and 'NoneType'


#11

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