I ran the code and got the class average, class grade (Although it is still showing that class average is not printed even when it is on screen). Besides, we are supposed to print students' names according to my understanding; the code actually prints the entire dictionary under that name. How can I just print the names instead.

Following is the 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]

}

# Add your function below!

def average(numbers):

total=0

total = sum(numbers)

n=len(numbers)

avg= float(total)/n

return avg

homework2=lloyd["homework"]

homework3=alice["homework"]

homework4=tyler["homework"]

print average(homework2)

print average(homework3)

print average(homework4)

def get_average(student):

homework=0

quizzes = 0

tests = 0

homework=average(student["homework"])

quizzes=average(student['quizzes'])

tests=average(student["tests"])

return 0.1*homework + 0.3*quizzes + 0.6*tests

print "weighted average a =%s" % get_average(lloyd)

print "weighted average b = %s" %get_average(alice)

print " weighted average c = %s" %get_average(tyler)

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"

p=get_average(lloyd)

print get_letter_grade(p)

def get_class_average(students):

results=[]

for elem in students:

results.append(get_average(elem))

return average(results)

students=[lloyd,alice,tyler]

g= get_class_average(students)

print "Class average is " + str(g)

print " Students are " + str(students)

print " Class grade is " + str(get_letter_grade(g))