To the student dict we’ve added a student id, sid
by key name,
def add(self, name, homework, quizzes, tests):
sid = len(self.roll)
self.roll.append(Student(sid, name, homework, quizzes, tests))
and in Student,
def __init__(self, sid, name, homework, quizzes, tests):
self['sid'] = sid
add to Teacher,
def roll_call(self):
print "\nRoll Call"
for i in range(len(self.roll)):
x = self.roll[i]
print "{:>10d}: {:s}".format(x['sid'], x['name'])
Now with the information in this list we can garner an individual’s grades.
def grades(self):
print "\nGrades for, {:s}".format(self['name'])
for key in self.criteria:
x = self[key]
print "{:>10s}: ".format(key),
y = ["{:0.1f}".format(item) for item in x]
print ", ".join(y)
>>> room.roll_call()
Roll Call
0: Lloyd
1: Alice
2: Tyler
>>>> room.roll[0].grades()
Grades for, Lloyd
quizzes: 88.0, 40.0, 94.0
tests: 75.0, 90.0
homework: 90.0, 97.0, 75.0, 92.0
Teacher.show() gets an upgrade.
def show(self):
for i in range(len(self.roll)):
self.roll[i].grades()
Grades for, Lloyd
quizzes: 88.0, 40.0, 94.0
tests: 75.0, 90.0
homework: 90.0, 97.0, 75.0, 92.0
Grades for, Alice
quizzes: 82.0, 83.0, 91.0
tests: 89.0, 97.0
homework: 100.0, 92.0, 98.0, 100.0
Grades for, Tyler
quizzes: 0.0, 75.0, 78.0
tests: 100.0, 100.0
homework: 0.0, 87.0, 75.0, 22.0
Code
class Student(dict):
criteria = {'homework': 0.1, 'quizzes': 0.3, 'tests': 0.6}
def __init__(self, sid, name, homework, quizzes, tests):
self['sid'] = sid
self['name'] = name
self['homework'] = homework
self['quizzes'] = quizzes
self['tests'] = tests
def average(self):
weighted_average = 0
for key in self.criteria:
weighted_average += sum(self[key]) / len(self[key]) * self.criteria[key]
return weighted_average
def grades(self):
print "\nGrades for, {:s}".format(self['name'])
for key in self.criteria:
x = self[key]
print "{:>10s}: ".format(key),
y = ["{:0.1f}".format(item) for item in x]
print ", ".join(y)
class Teacher(object):
keys = ['sid', 'name', 'homework', 'quizzes', 'tests']
def __init__(self):
self.roll = []
def add(self, name, homework, quizzes, tests):
sid = len(self.roll)
self.roll.append(Student(sid, name, homework, quizzes, tests))
def show(self):
for i in range(len(self.roll)):
self.roll[i].grades()
def get_averages(self):
print "\nWeighted Averages"
for i in range(len(self.roll)):
x = self.roll[i]
print "{:>13s}: {:0.2f}".format(x['name'], x.average())
def class_average(self):
total = 0
for i in range(len(self.roll)):
total += self.roll[i].average()
return "Class Average: {:0.2f}".format(total / len(room.roll))
def roll_call(self):
print "\nRoll Call"
for i in range(len(self.roll)):
x = self.roll[i]
print "{:>6d}: {:s}".format(x['sid'], x['name'])
room = Teacher()
room.add("Lloyd",[90.0, 97.0, 75.0, 92.0],[88.0, 40.0, 94.0],[75.0, 90.0])
room.add("Alice",[100.0, 92.0, 98.0, 100.0],[82.0, 83.0, 91.0],[89.0, 97.0])
room.add("Tyler",[0.0, 87.0, 75.0, 22.0],[0.0, 75.0, 78.0],[100.0, 100.0])
room.roll_call()
room.show()
room.get_averages()
print room.class_average()