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

Python新手if语句逻辑异常求助:原结构化文本/C++写法无法正常运行

问题原因

你代码的核心问题是混淆了赋值运算符=和比较运算符==:

  • 你代码里写的ferdig == 3、ferdig == 2、ferdig == 1都是判断ferdig是否等于对应值,没有实际修改ferdig变量的取值
  • 所以ferdig的值一直停留在初始的1,每次循环都会进入int(ferdig) == 1的分支,自然就不断重复要求输入宾客信息的逻辑

另外还有两个隐藏问题:

  • guests = []放在while循环内部,每次循环都会清空列表,就算后续逻辑正常,最终打印的列表也只会有最后一次输入的宾客名
  • 初始变量定义没必要写loop = bool; loop = False、ferdig = int; ferdig = 1,Python是动态类型语言,直接赋值即可

关于if语句和switch/case的疑问

Python的if语句完全支持你想要的这种分支跳转逻辑,你现在的问题和if本身无关,不需要特意改用match-case(也就是其他语言的switch/case,Python 3.10以上版本才支持该语法)。


修正后的参考代码

more_guests = 0
loop = False
ferdig = 1
guests = [] # 把列表初始化移到循环外,避免每次清空
while not loop:
    more_guests = 0
    if ferdig == 1:
        guest = input("type in guest ")
        more_guests = int(input("done? 1 for yes 2 for no "))
        if more_guests == 1:
            guests.append(guest)
            ferdig = 3 # 双等号改成单等号赋值
        elif more_guests == 2:
            guests.append(guest)
            ferdig = 2 # 双等号改成单等号赋值
        else:
            print("unvalid answer, please use 1 or 2")
            ferdig = 1 # 双等号改成单等号赋值
    elif ferdig == 2:
        ferdig = 1
    elif ferdig == 3:
        print(guests)
    else:
        loop = True

内容的提问来源于stack exchange,提问作者Heggelund

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:54:00