class Student:
def __init__(self, name):
self.name = name
self.attendance = 0
self.marks = []
self.grade = ()
def add_mark(self, mark):
self.marks.append(mark)
def present(self):
self.attendance = self.attendance + 1
def get_average(self):
try:
return sum(self.marks)/len(self.marks)
except ZeroDivisionError:
return 0
def change_mark(self, oldmark, newmark):
position = self.marks.index(oldmark)
self.marks[position] = newmark
def grade(get_average):
if get_average >= 80:
return "A"
elif get_average >= 68:
return "B"
elif get_average >= 55:
return "C"
elif get_average >= 50:
return "D"
else:
return "F"
def __str__(self):
print "%-15s %-15s %-15s %s" % ("Student", "Mark", "Grade", "Attendance")
print
print "%-15s" % (self.name)
print "%-15s" % str(self.get_average())
print "%-15s" % (self.grade())
print "%s" % str(self.attendance)
class StudentTracker :
def __init__(self, initial_student_list):
self.student_names = initial_student_list
self.students = {}
for name in self.student_names:
self.students[name] = Student(name)
def another_day(self, absent=[]):
for name in self.student_names:
if name not in absent:
self.students[name].present()
def add_mark(self, name, mark):
self.students[name].add_mark(mark)
def change_mark(self, student, oldmark, newmark):
self.students[name].change_mark(oldmark, newmark)
def prettyprint_students(self):
print "%30s" % ("Student Report")
print
for student in self.students.values():
print student
def Main():
o = StudentTracker(["Bobe", "Nono", "Beryl", "Shirley", "Joanna"])
o.another_day()
o.add_mark("Beryl", 90)
o.add_mark("Nono", 89)
o.add_mark("Bobe", 68)
o.add_mark("Shirley", 70)
o.another_day()
o.add_mark("Beryl", 70)
o.add_mark("Nono", 65)
o.add_mark("Shirley", 78)
o.add_mark("Joanna", 55)
o.add_mark("Bobe", 56)
o.another_day(["Joanna", "Bobe"])
o.add_mark("Beryl", 90)
o.add_mark("Nono", 70)
o.add_mark("Shirley", 66)
o.prettyprint_students()
Main()