9.How is Everybody Doing? Instead of names it prints whole dictionary under the name


#1

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))


#2

Recommend hide these lines.

Not necessary to initialize variables:

Recommend hide these lines...

Without seeing the instructions, I would suggest not printing anything unless directed to. If the instructions say to call the function, then just call it. You may be able to print, but again, I would not advise embellishing with any other text.

print get_class_average(students)

Now if you wish to see results for each student, then loop through the students list and run the computations on each. The name is students[student]['name'].


#3

Hey,

That actually worked with some trials and errors, I ran a loop for printing names as:
for student in students:
print student['name']

The interface has no flexiblity for experimentation;
if I type >>> print "Class Grade is " + get_letter_grade(get_class_average(students))
instead of >>> print get_letter_grade(get_class_average(students))
it simply pops up error.


#4

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