Python初学者提问:while循环yes/no输入校验逻辑异常该如何解决?
问题原因
- 逻辑运算符使用错误:你用于判断非法输入的分支使用了
or(或逻辑),该条件恒成立。任意输入必然满足「不等于yes」或「不等于no」中的至少一项:输入no时满足「不等于yes」,输入yes时满足「不等于no」,输入其他内容时两个条件都满足,因此该分支永远会被触发,后续判断no的分支永远不会执行,自然无法退出循环。 - 分支判断顺序不合理:将
no的退出判断放在非法输入判断之后,即使修正运算符也容易出现逻辑优先级问题。同时原代码未统一对用户输入做大小写归一处理,容易出现用户输入Yes/NO等大小写混合内容时识别失败的问题。
修正代码
把非法输入判断的or改为and(与逻辑),调整分支判断顺序,同时统一对用户输入做大小写归一处理:
while True: # 统一将用户输入转为小写,兼容大小写输入场景 decision = input("Would you like to repeat? Yes or No? ").casefold() if decision == "yes": # 此处放置需要重复执行的业务逻辑 print("") elif decision == "no": break # 剩下的都是非法输入场景,直接用else兜底即可,无需再写复杂判断 else: print("Please type yes or no")
内容的提问来源于stack exchange,提问作者eugene
相关产品推荐
相关产品推荐

