Python编写选课列表循环无限运行,满6个条目不触发删除提示如何修复?
Python选课列表程序bug修复方案
核心问题原因
- 两个循环为串行执行逻辑,课程删除校验只会在用户输入
Exit结束课程输入后才会触发,输入过程中哪怕课程超过5门也不会弹出提示,不符合需求 - 输入课程的循环中会将
Exit字符串也加入课程列表,导致列表出现无效条目 - 删除课程的输入校验范围固定为1-6,当课程数量不足6门时会出现逻辑冲突
修复后完整代码
courseList = [] max_course = 5 while True: courses = input("请输入课程名称?(输入Exit结束输入) ") # 退出判断放在最前,避免将Exit加入列表 if courses == "Exit": break # 先判断当前列表是否已经满员 if len(courseList) >= max_course: print("课程列表最多容纳5门课程,请先删除一门已有课程:") # 打印当前课程列表,带序号 for idx, course in enumerate(courseList, 1): print(f"{idx}. {course}") # 删除逻辑 while True: try: x = int(input("请输入要删除的课程序号: ")) if 1 <= x <= len(courseList): courseList.pop(x-1) print(f"已删除第{x}门课程,当前课程列表:{courseList}") break else: print(f"请输入1到{len(courseList)}之间的有效序号") except ValueError: print("请输入合法的数字序号") # 课程列表有空位,添加新课程 courseList.append(courses) print(f"已添加课程:{courses},当前已选{len(courseList)}门课程") # 最终输出选课结果 print("\n最终选课列表:") for idx, course in enumerate(courseList, 1): print(f"{idx}. {course}")
关键修改说明
- 调整执行逻辑,将满员校验放在输入课程的循环内部,每输入一门新课程前先判断列表是否满员,满员立刻触发删除流程,符合需求的触发时机
- 把Exit的判断放在最前面,不会将无效的Exit字符串加入课程列表
- 新增输入异常捕获,避免用户输入非数字内容导致程序崩溃
- 删除的序号校验范围动态适配当前课程列表长度,不会出现逻辑错误
内容的提问来源于stack exchange,提问作者jose013
相关产品推荐
相关产品推荐

