11. 班级排名的功能的实现
实现方法
- 学校相关模块:
school.py
from class_room import ClassRoom
import tools
class_rooms = [] # 用于存放班级对象
...
def list_class_room_order_by_average_score():
'''列出班级排名(平均成绩高 - 低)'''
def get_avg_score(class_r):
return class_r.get_average_score()
result = sorted(class_rooms, key=get_avg_score, reverse=True)
print('+------+------------+--------+')
print('| 序号 | 班级名称 | 平均分 |')
print('+------+------------+--------+')
number = 1
for cr in result:
print('| %4d | %s | %5.1f |' % (
number,
tools.center_to_display_width(cr.class_name, 10),
cr.get_average_score()
))
number += 1
if len(result) :
print('+------+------------+--------+')
...
def class_manager():
'''此函数用来管理班级数据'''
while True:
show_school_menu()
sel = input('请选择:')
match sel:
case '1': # 1) 添加班级
add_class_room()
case '2': # 2) 删除班级
del_class_room()
case '3': # 3) 进入管理班级
enter_class_manager()
case '4': # 4) 列出所用班级
list_all_class_room()
case '5': # 5) 列出班级排名(平均成绩高 - 低)
list_class_room_order_by_average_score()
case '6': # 6) 保存班级信息
...
if __name__ == '__main__':
from student import Student
cr1 = ClassRoom('一年一班')
cr1.student.append(Student('张三', 100, 61))
cr1.student.append(Student('李四', 70, 81))
cr1.student.append(Student('王五', 90, 71))
cr1.student.append(Student('赵六', 80, 91))
class_rooms.append(cr1)
cr2 = ClassRoom('一年2班')
cr2.student.append(Student('张3', 7, 1))
cr2.student.append(Student('李4', 8, 2))
cr2.student.append(Student('王5', 9, 3))
cr2.student.append(Student('赵7', 6, 4))
class_rooms.append(cr2)
cr3 = ClassRoom('一年三班')
cr3.student.append(Student('aaa', 100, 99))
cr3.student.append(Student('bbb', 98, 98))
cr3.student.append(Student('cccc', 99, 97))
class_rooms.append(cr3)
cr4 = ClassRoom('一年4班')
cr4.student.append(Student('xxx', 60, 80))
cr4.student.append(Student('yyy', 70, 50))
class_rooms.append(cr4)
class_manager()
- 班级相关模块:
class_room.py
import student
from student import Student
import tools
class ClassRoom:
'''班级类型'''
def __init__(self, class_name):
self.class_name = class_name # 班级名称
self.student = [] # 保存学生信息
...
def get_average_score(self):
if len(self.student) == 0:
return 0
total_score = 0
for a_student in self.student:
total_score += a_student.chinese_score + a_student.math_score
return total_score / (len(self.student) * 2)
...