Python实现School类中跨班级Student对象的交换功能
实现支持跨班级交换的School类swap方法
我们需要基于以下类结构完成功能开发:
- Student类:包含
id和name两个属性 - ClassRoom类:包含
students列表,每个班级最多容纳5名学生 - School类:包含
classes列表,最多包含3个班级;需实现swap方法,仅传入两个学生的名字字符串,遍历所有班级找到对应学生对象并交换位置(支持跨班级交换),无需返回值
先修正原代码的语法错误
原代码中ClassRoom的初始化方法存在语法问题,需将self.Students[]改为self.students = [];测试代码里的scl.search_replace是笔误,应改为scl.swap。
完整实现代码
class Student: def __init__(self, id, name): self.name = name self.id = id class ClassRoom: def __init__(self): # 初始化空的学生列表 self.students = [] class School: def __init__(self): self.classes = [] def swap(self, name1, name2): # 存储两个学生的位置信息:(班级对象, 索引) student1_info = None student2_info = None # 遍历所有班级查找目标学生 for classroom in self.classes: for idx, student in enumerate(classroom.students): if student.name == name1: student1_info = (classroom, idx) elif student.name == name2: student2_info = (classroom, idx) # 找到两个学生后提前终止遍历,提升效率 if student1_info and student2_info: break # 仅当两个学生都找到时执行交换 if student1_info and student2_info: class1, idx1 = student1_info class2, idx2 = student2_info # 交换两个学生的位置(支持同班级/跨班级) class1.students[idx1], class2.students[idx2] = class2.students[idx2], class1.students[idx1] else: # 可选:处理学生未找到的情况 missing = [] if not student1_info: missing.append(name1) if not student2_info: missing.append(name2) print(f"未找到以下学生:{', '.join(missing)}") # 测试代码 if __name__ == "__main__": # 创建学生对象 s1 = Student(1, "Alice") s2 = Student(2, "John") s3 = Student(3, "Bob") s4 = Student(4, "Charlie") s6 = Student(6, "Ben") # 创建班级并添加学生 c1 = ClassRoom() c1.students = [s1, s2, s3] c3 = ClassRoom() c3.students = [s1, s4, s6] # 注意:实际场景应避免同一学生重复加入多个班级 # 创建学校并添加班级 scl = School() scl.classes = [c1, c3] # 执行交换操作 scl.swap("John", "Ben") # 验证交换结果 print("班级1的学生:", [s.name for s in c1.students]) print("班级3的学生:", [s.name for s in c3.students])
实现逻辑说明
- 查找学生位置:遍历学校所有班级及班级内的学生,记录两个目标学生的所在班级和索引位置
- 交换逻辑:仅当两个学生都被找到时,通过索引直接交换他们在各自班级列表中的位置,自然支持跨班级交换场景
- 异常处理:添加了学生未找到的提示逻辑,方便调试排查问题
内容的提问来源于stack exchange,提问作者הינדה הרשטיק
相关产品推荐
相关产品推荐

