Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Grade:
- """
- """
- def __init__(self, value, weight):
- if 0 > value or 100 < value:
- raise "Cannot create new Grade object. Grade value must be in range [0,100]"
- # 0-100
- self.value = value
- if 1 > weight or 4 < weight:
- raise "Cannot create new Grade object. Grade weight must be in range [1,4]"
- # 1-4
- self.weight = weight
- def __str__(self):
- return "value: {}, weight: {}".format(self.value, self.weight)
- class Subject:
- """
- """
- def __init__(self, name):
- self.name = name
- # Empty at the begining
- self.grades = []
- def add_grade(self, grade):
- self.grades.append(grade)
- def avg_grade(self):
- return sum([i.value * i.weight for i in self.grades]) / sum([i.weight for i in self.grades])
- def __str__(self):
- return """Subject: {}
- Average: {}
- Grades :
- \t{}""".format(self.name, self.avg_grade(), "\n\t".join([str(i) for i in self.grades]))
- class Student:
- """
- """
- def __init__(self, name, student_id):
- self.name = name
- self.student_id = student_id
- self.subjects = {}
- def add_subject(self, subject_name):
- self.subjects[subject_name] = Subject(subject_name)
- def add_grade(self, subject_name, grade):
- self.subjects[subject_name].add_grade(grade)
- def avg_subject(self, subject_name):
- return self.subjects[subject_name].avg_grade()
- def avg_subject_all(self):
- return sum([v.avg_grade() for v in self.subjects.values()]) / len(self.subjects)
- def best_subject(self):
- """
- """
- best_avg = 0
- best_subject = None
- for v in self.subjects.values():
- if best_avg < v.avg_grade():
- best_avg = v.avg_grade()
- best_subject = v
- return best_subject
- def __str__(self):
- return """Name : {}
- ID : {}
- AvgGrade: {}
- BestSubj: {}
- Subjects:
- ---
- {}
- ========""".format(self.name, self.student_id, self.avg_subject_all(), (self.best_subject()).name, "\n".join([str(v) for v in self.subjects.values()]))
- if __name__ == "__main__":
- ST = Student('captain', 123456)
- ST.add_subject('history') #sub1
- ST.add_grade('history', Grade(value=100, weight=2))
- ST.add_grade('history', Grade(value=88, weight=4))
- ST.add_subject('economics') #sub2
- ST.add_grade('economics', Grade(value=15, weight=3))
- ST.add_grade('economics', Grade(value=94, weight=1))
- ST.add_grade('economics', Grade(value=72, weight=2))
- ST.add_grade('economics', Grade(value=56, weight=4))
- print(ST)
Add Comment
Please, Sign In to add comment