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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:54:05