Python课程注册程序:列表元素校验与删除功能故障排查
问题修复:Python课程注册程序的删除校验与列表管理问题
原代码核心问题
- 添加课程逻辑错误:用
classes = course.split(",")直接覆盖原有选课列表,导致之前选的课程全部丢失,而非追加新课程。 - 删除校验逻辑完全失效:
- 错误地将
removeClass赋值为空列表,直接破坏了待删除课程的输入值 - 校验时用
classGone.count(removeClass)检查空列表在待删除列表中的数量,完全偏离了「检查课程是否在选课列表中」的需求
- 错误地将
- 边界逻辑不合理:当选课数量等于5时直接终止循环,用户无法删除课程调整列表。
修正后的完整代码
condition = True classes = [] print("Welcome to class registration!") def printClasses(): print("You are currently taking these courses: ") for idx, course in enumerate(classes, 1): print(idx, ".", course) while condition: if len(classes) < 5: course_input = input("What course(s) would you like to take?: ").strip() # 处理多课程输入,自动过滤空值并统一格式 new_courses = [c.strip().title() for c in course_input.split(",") if c.strip()] # 追加新课程,保留原有选课记录 classes.extend(new_courses) # 确保选课数量不超过上限 if len(classes) > 5: classes = classes[:5] printClasses() elif len(classes) >= 5: remove_input = input("Please select a class to remove: ").strip() remove_courses = [c.strip().title() for c in remove_input.split(",") if c.strip()] for course in remove_courses: if course in classes: classes.remove(course) print(f"Successfully removed {course}") else: print(f"Error: '{course}' is not in your course list.") printClasses() if len(classes) < 5: print("You can add more courses now.") # 提供主动退出选项 choice = input("Enter 'quit' to exit, or press Enter to continue: ").strip().lower() if choice == "quit": condition = False print("Thank you for using the class registration system!")
关键修改说明
添加逻辑修复:
- 用
classes.extend(new_courses)替代直接赋值,保留原有选课记录 - 用列表推导式处理多课程输入,自动过滤空输入(比如连续逗号的情况)
- 增加上限控制,避免一次添加超过5门课
- 用
删除校验修复:
- 移除错误的空列表赋值语句
- 用
if course in classes直接校验课程是否存在,逻辑清晰准确 - 为每个待删除课程单独反馈结果,提升用户体验
循环逻辑优化:
- 调整边界判断为
len(classes) >=5,覆盖选课数量等于5的场景,允许用户删除课程 - 添加主动退出选项,让用户灵活控制程序结束时机
- 用
enumerate(classes, 1)简化课程列表打印代码,更简洁高效
- 调整边界判断为
内容的提问来源于stack exchange,提问作者Lucc
相关产品推荐
相关产品推荐

