Sending a letter


#1

Hi there,

For some reason this code gets accepted, however it does not give the correct letters. For instance for Lloyd it get's an weighted average of 80.50 but he get's an "A" any way. Even though this is privilaged to people of 90% and up.

Does anybody know what I'm doing wrong?

Thanks, Sjors


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


def average(numbers):
    total = sum(numbers)
    average = float(total)/len(numbers)
    return average
    
def get_average(student):
    homework=average(student["homework"])
    quizzes=average(student["quizzes"])
    tests=average(student["tests"])
    return homework*0.10+quizzes*0.30+tests*0.60
    
def get_letter_grade(get_average):
    if get_average >= 90:
        return "A"
    elif get_average >= 80:
        return "B"
    elif get_average >= 70:
        return "C"
    elif get_average >= 60:
        return "D"
    else:
        return "F"

print get_average(lloyd)
print get_letter_grade(lloyd)


#2

here:

print get_letter_grade(lloyd)

get letter grade expects a number (integer/float) as input, you supply a dictionary.

you will first need to calculate lloyd average grade (use get_average), then supply the average as argument

get_letter_grade only task is to convert a number to a letter grade


#3

Thanks amigo! That was the correct tip. However it leaves me with an additional question:

Why in the print statement it is with regular brackets?
print get_letter_grade(get_average(lloyd))

And in the weighted average function the is with squared brackets?
homework=average(student["homework"])

Both syntaxis have a function with a variable (lloyd or homework)?
In other words, after your tips I iniatially corrected the print statement as:

print get_letter_grade(get_average[lloyd])

But this was not correct.


#4

all the parentheses used here are function calls (average, get_average and get_letter_grade)

square brackets are used to retrieve a value from a dictionary (lloyd) using a key ("homework")


#5

I got it, thanks again! Awesome respond speed btw :slight_smile:


#6