8. Part of the Whole


#1



how does the function know to use the lloyd, alice, and tyler dictionaries as the arguments for the functions we've created in this exercise? For example, I don't define the argument students (i.e. students = [lloyd, alice, tyler]), but my code knows to use those dictionaries regardless. How is the code able to work in this way?


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

print get_class_average(students)


#2

here is all my code, btw

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

def get_average(student):
homework = average(student["homework"]) *.10
quizzes = average(student["quizzes"]) *.30
tests = average(student["tests"]) *.60
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"
else:
return "F"
return get_letter_grade(get_average(lloyd))

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

print get_class_average(students)


#3

That line is doing nothing and should be removed.


#4

I have the same question.


#5

Can you post your code with indentation, etc, so other people can test it.


#6

Great question! Can somebody answer it please? Also, I'm wondering how does the code know what the argument "student" in the "get_average" function is?


#7

The parameter of the get_class_average function is a list of dictionary identifiers...

students = [lloyd, alice, tyler]

The operative word is identifiers. They point to the dictionary objects and the list acts as an index. The function iterates over this index and accesses the individual dictionaries, one at a time. In your function, each is the iterator variable that holds the dictionary name. It is the argument in the get-average call, since we know that function takes a dictionary.

It knows because the object is passed as an argument in the call...

get_average(lloyd)
get_average(alice)
get_average(tyler)

Above we described how get_class_average takes a list that contains those same pointers.

each => [
    lloyd
    alice
    tyler
] in students

each takes on one name at a time.


#8

Thank you for a detailed answer! It's now clear


#9

2 posts were split to a new topic: Keep getting error


#10

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