如何随机配对文本文件中的师生数据?代码问题求助
解决师生随机配对问题
首先,你的代码目前只完成了读取文件内容的第一步,缺少随机分配学生到讲师的核心逻辑,而且没处理文件读取后的资源收尾(比如关闭文件),也没考虑文件里可能存在的空行问题。我来帮你完善这个逻辑:
完整实现代码
import random def load_data(file_path): # 读取文件并过滤空行,避免把空字符串当成人员 with open(file_path, "r", encoding="utf-8") as f: return [line.strip() for line in f if line.strip()] # 加载讲师和学生数据 lecturers = load_data("lecturer.txt") students = load_data("students.txt") # 先打乱学生顺序,保证随机性 random.shuffle(students) # 分配学生到讲师:尽量平均分配,剩下的学生依次加到前面的讲师 pairings = {lecturer: [] for lecturer in lecturers} student_count = len(students) lecturer_count = len(lecturers) avg_per_lecturer = student_count // lecturer_count remaining = student_count % lecturer_count index = 0 for i, lecturer in enumerate(lecturers): # 每个讲师先分平均数量的学生,剩余的依次分给前几个讲师 take = avg_per_lecturer + (1 if i < remaining else 0) pairings[lecturer] = students[index:index+take] index += take # 打印配对结果 for lecturer, assigned_students in pairings.items(): print(f"{lecturer} = {', '.join(assigned_students)}")
代码细节解释
- 文件读取优化:用
with语句自动关闭文件,避免资源泄漏;同时过滤掉空行,防止把文件末尾的空字符串当成有效数据。 - 随机化处理:用
random.shuffle()打乱学生列表,确保分配的随机性,不会出现固定顺序的配对。 - 公平分配逻辑:先计算每个讲师平均能分到的学生数,剩下的学生依次分给前几个讲师,保证分配尽量均匀(比如20个学生分给3个讲师,就是7、7、6的分配比例)。
- 结果输出:以清晰的格式打印每个讲师对应的学生列表,符合你期望的展示形式。
可选的随机分配方式(非均匀)
如果不需要保证每个讲师的学生数量均匀,只想完全随机分配,可以改用下面的逻辑:
# 完全随机分配(不保证数量均匀) pairings = {lecturer: [] for lecturer in lecturers} for student in students: # 随机选一个讲师分配当前学生 random_lecturer = random.choice(lecturers) pairings[random_lecturer].append(student)
这种方式下,每个学生都会被随机分配给任意讲师,可能出现有的讲师学生多、有的少的情况,适合不需要均匀分配的场景。
内容的提问来源于stack exchange,提问作者user9547846
相关产品推荐
相关产品推荐

