Guest User

Untitled

a guest
Nov 20th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. class Grade:
  2. """
  3. """
  4. def __init__(self, value, weight):
  5. if 0 > value or 100 < value:
  6. raise "Cannot create new Grade object. Grade value must be in range [0,100]"
  7. # 0-100
  8. self.value = value
  9. if 1 > weight or 4 < weight:
  10. raise "Cannot create new Grade object. Grade weight must be in range [1,4]"
  11. # 1-4
  12. self.weight = weight
  13.  
  14. def __str__(self):
  15. return "value: {}, weight: {}".format(self.value, self.weight)
  16.  
  17. class Subject:
  18. """
  19. """
  20. def __init__(self, name):
  21. self.name = name
  22. # Empty at the begining
  23. self.grades = []
  24.  
  25. def add_grade(self, grade):
  26. self.grades.append(grade)
  27.  
  28. def avg_grade(self):
  29. return sum([i.value * i.weight for i in self.grades]) / sum([i.weight for i in self.grades])
  30.  
  31. def __str__(self):
  32. return """Subject: {}
  33. Average: {}
  34. Grades :
  35. \t{}""".format(self.name, self.avg_grade(), "\n\t".join([str(i) for i in self.grades]))
  36.  
  37. class Student:
  38. """
  39. """
  40. def __init__(self, name, student_id):
  41. self.name = name
  42. self.student_id = student_id
  43. self.subjects = {}
  44.  
  45. def add_subject(self, subject_name):
  46. self.subjects[subject_name] = Subject(subject_name)
  47.  
  48. def add_grade(self, subject_name, grade):
  49. self.subjects[subject_name].add_grade(grade)
  50.  
  51. def avg_subject(self, subject_name):
  52. return self.subjects[subject_name].avg_grade()
  53.  
  54. def avg_subject_all(self):
  55. return sum([v.avg_grade() for v in self.subjects.values()]) / len(self.subjects)
  56.  
  57. def best_subject(self):
  58. """
  59. """
  60. best_avg = 0
  61. best_subject = None
  62. for v in self.subjects.values():
  63. if best_avg < v.avg_grade():
  64. best_avg = v.avg_grade()
  65. best_subject = v
  66. return best_subject
  67.  
  68. def __str__(self):
  69. return """Name : {}
  70. ID : {}
  71. AvgGrade: {}
  72. BestSubj: {}
  73. Subjects:
  74. ---
  75. {}
  76. ========""".format(self.name, self.student_id, self.avg_subject_all(), (self.best_subject()).name, "\n".join([str(v) for v in self.subjects.values()]))
  77.  
  78. if __name__ == "__main__":
  79. ST = Student('captain', 123456)
  80. ST.add_subject('history') #sub1
  81. ST.add_grade('history', Grade(value=100, weight=2))
  82. ST.add_grade('history', Grade(value=88, weight=4))
  83. ST.add_subject('economics') #sub2
  84. ST.add_grade('economics', Grade(value=15, weight=3))
  85. ST.add_grade('economics', Grade(value=94, weight=1))
  86. ST.add_grade('economics', Grade(value=72, weight=2))
  87. ST.add_grade('economics', Grade(value=56, weight=4))
  88. print(ST)
Add Comment
Please, Sign In to add comment