You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

实现逻辑说明

  1. 查找学生位置:遍历学校所有班级及班级内的学生,记录两个目标学生的所在班级和索引位置
  2. 交换逻辑:仅当两个学生都被找到时,通过索引直接交换他们在各自班级列表中的位置,自然支持跨班级交换场景
  3. 异常处理:添加了学生未找到的提示逻辑,方便调试排查问题

内容的提问来源于stack exchange,提问作者הינדה הרשטיק

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:35:15