Python如何实现循环重复直到用户输入完星期列表所有元素
星期名称循环收集功能解决方案
原代码存在的核心问题
- 输入获取逻辑位置错误:
input()仅在while循环外调用1次,循环执行过程中不会重新拉取用户新输入,要么直接跳过循环,要么进入后触发无限死循环 - 校验逻辑位置错误:输入合法性校验、重复值校验的逻辑全部写在循环外部,无法在每次用户提交输入后即时给出反馈
- 循环终止条件设置错误:原逻辑只要输入值属于合法星期名就持续循环,没有设置「收集满7个不同星期名就退出」的终止规则
- 存在语法错误:残缺的
if answer语句会直接导致代码运行前就抛出语法异常
修复后可直接运行的代码
# 初始化已收集星期列表、合法星期名参考列表 days = [] valid_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] # 未收集满7个不同合法星期时,持续循环提问 while len(days) < 7: answer = input('Enter a day of the week: ').strip() # 每轮循环重新获取输入,自动去除首尾多余空格 # 校验是否为合法星期名 if answer not in valid_days: print(f'Sorry {answer} is not a day of the week.') # 校验是否已经收集过 elif answer in days: print('Sorry already in our list.') # 合法且未收集过则追加进列表 else: days.append(answer) print(f'{answer} has been added to our days of the week.') print(days) # 收集满7个后输出恭喜提示 print('Congratulations! You have entered all days of the week!')
逻辑说明
- 循环判断条件直接绑定已收集列表长度,只要长度小于7就持续运行,从根源上避免漏收集、多收集问题
- 每次用户输入后按顺序做三层判断:先校验是否为合法星期名,再校验是否重复,都不触发才执行追加操作,完全匹配示例运行效果
- 输入获取逻辑放在循环内部,每轮交互都会等待用户新输入,不会出现死循环或者仅提问一次的问题
- 循环正常退出的唯一条件是收集齐7个不重复的合法星期名,退出后直接输出恭喜提示即可
内容的提问来源于stack exchange,提问作者runn3_
相关产品推荐
相关产品推荐

