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
相关产品推荐
相关产品推荐

