编写Python脚本实现学生班级均匀分配的需求及解决方案
学生均匀分班的Python实现
针对81名学生的分班需求——单班最大容量限制为20人,要求分成5个班级(每班人数控制在16-17人,避免出现4个满额班加1个仅1人的极端情况),以下是实现该逻辑的Python脚本:
import math def partition_students(students, max_capacity): # 按学生姓氏排序,保证分班公平性 students.sort(key=lambda student: student.last_name) num_students = len(students) # 计算所需最少班级数(基于最大班容) num_classes = math.ceil(num_students / max_capacity) # 计算每班的目标人数(向上取整,确保人数均匀分布) num_students_per_class = math.ceil(num_students / num_classes) # 初始化空班级列表 classes = [[] for _ in range(num_classes)] class_index = -1 for i, student in enumerate(students): # 每分配num_students_per_class个学生,切换到下一个班级 if i % num_students_per_class == 0: class_index = (class_index + 1) % num_classes classes[class_index].append(student) return classes
关键逻辑说明
- 排序处理:先按学生姓氏排序,避免同姓氏学生过度集中在某个班级,保证分班的公平性。
- 班级数计算:通过
math.ceil(num_students / max_capacity)得出满足最大班容要求的最少班级数(81÷20向上取整为5)。 - 每班人数计算:用
math.ceil(num_students / num_classes)确定每班的目标人数(81÷5向上取整为17),确保各班人数尽可能均匀,不会出现人数悬殊的情况。 - 循环分配:通过索引循环切换班级,每分配指定人数的学生后切换到下一个班级,最终实现人数均匀分布的分班效果。
内容的提问来源于stack exchange,提问作者user22022915
相关产品推荐
相关产品推荐

