# [Python]Student Becomes the Teacher 8. Part of the Whole

#1

Here is my piece of code

``````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)
total = float(total)
total /= len(numbers)
def get_average(student):
homework = average(student["homework"])
quizzes = average(student["quizzes"])
tests = average(student["tests"])
sum = 0.1 * homework + 0.3 * quizzes + 0.6 * tests
return sum
if score >= 90 and score <= 100:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
print get_average(alice)
#result = []
def get_class_average(students):
result = []
for student in students:
result.append(get_average(student))
return average(result)
#return result.average()``````

if i run the 'result = []' that is above the def get_class_average(students):
then the result is equal to write it in that function.but it exactly showed the
"get_class_average([lloyd]) returned 85.85 instead of 80.55 as expected"
I don't it what the difference it is?

#2

It is important to format code when you post it. That enables users to see your indentation and other important details.

Your `get_class_average` function should be designed to return the correct result every time it is called. This includes situations in which the user, or Codecademy itself, calls the function multiple times during a program run. For the function to produce a correct result, it must initialize the `result` variable to an empty list at the beginning of every call. If you have the following, that initialization will be performed at the beginning of each execution of the function, as it should ...

``````def get_class_average(students):
result = []``````

However, if you have this instead ...

``````result = []
def get_class_average(students):``````

... `result` will be initialized prior to the time the function is defined, which is also prior to the first call, and you will get a correct result from that first call. However, thereafter, `result` will still be carrying data from previous calls during any subsequent call to the function. This will cause it to compute incorrect results. Codecademy calls your function multiple times to test it, and if it fails a test, Codecademy issues you a message to that effect.

#3

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)
total = float(total)

def get_average(student):
homework = average(student["homework"])
quiz = average(student["quizzes"])
test = average(student["tests"])
return 0.1 * homework + 0.3 * quiz + 0.6 * test

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 students:
avg = get_average(student)
results.append(avg)
return average(results)

print get_class_average([lloyd, alice, tyler])

#4

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]
}
students=[lloyd,alice,tyler]

def average(numbers):
total=sum(numbers)
avg=float(total)/len(numbers)
return avg
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
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 students:
avg=get_average(student)
results.append(avg)
return average(results)
print get_class_average(students)

Hi. i tried the above code in IDLE , and it seems to be returning 80.55
There seems to be a problem in the console of codeacademy i guess.
Even I am getting an error,
Oops, try again. get_class_average([alice, lloyd]) returned 91.15 instead of 85.85 as expected

that is what I'm getting.

#5

It is important to format code when you post it. That enables users to see your indentation and other important details.

Since your code is not formatted, we cannot check its indentation. Make sure that the `return` statement in your `get_class_average` function is not part of the `for` loop.