11. 班级排名的功能的实现

实现方法

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()

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)

...