如何修复while循环,实现选择l[0]和l[1]时都能正常退出外层y循环
问题根因
- 条件判断匹配错误:你连续写了两个独立的
if判断,最后的else分支只会和离它最近的if B == l[1]绑定。当你输入l[0]对应的内容时,第一个if分支会把y设为False,但第二个if B == l[1]判断不通过,就会触发else分支把y重新改回True,导致外层循环无法退出。 - 无效代码:所有写在
break语句之后的y=False都永远不会执行,break运行后会直接跳出当前内层循环,后续代码不会被触发。 - 语法错误:
l[1]对应的内层循环的else分支里,print语句缺少闭合引号,运行会直接报错。
修正后的代码
# l和m可替换为你自己的实际赋值 l = ["smörgås", "pannkakor"] m = ["juice", "mjölk", "saft", "vatten"] y = True while y: B = input("现在是7点,你马上就要出发了,你想吃什么早餐?三明治还是煎饼:") if B == l[0]: y = False b = True while b: D = input("根据你的选择我推荐果汁或者牛奶,你想喝什么?") if D == m[0] or D == m[1]: print("好的,用餐愉快") b = False else: print("你没有输入可选的饮品,或者你用了大写字母,请重新输入") elif B == l[1]: y = False ö = True while ö: D = input("根据你的选择我推荐果汁汽水或者矿泉水,你想喝什么?") if D == m[2] or D == m[3]: print("好的,用餐愉快") ö = False else: print("你没有输入可选的饮品,或者你用了大写字母,请重新输入") else: print("你没有输入可选的餐品,或者你用了大写字母,请重新输入")
调整说明
- 把第二个
if B == l[1]改成了elif,让三个分支(l[0]、l[1]、其他输入)成为互斥的一组判断,输入l[0]的时候不会再走到else分支把y改回True - 删掉了所有break后的无效代码,简化了内层循环的判断逻辑,不需要用break,直接修改内层循环的控制变量即可退出
- 补全了语法错误的引号,修复了运行报错的问题
- 把所有
变量 == True的判断简化成直接写变量名,更符合Python的写法规范
内容的提问来源于stack exchange,提问作者Karam
相关产品推荐
相关产品推荐

