满足终止条件时While循环仍重复执行的技术问题咨询
问题排查与解决
核心错误原因
代码的条件判断逻辑完全错误。Python中or运算符需要连接完整的布尔表达式,你写的fenced.lower() != 'fully' or 'partially' or 'none'会被解析为:
- 先判断
fenced.lower() != 'fully'的布尔结果 - 再和
'partially'(非空字符串在Python中会被视为True)做or运算,最终整个条件永远为True,导致循环无法终止。
同理,if和elif里的条件也犯了同样错误——不管用户输入什么,if分支都会触发,因为'partially'永远为真。
修正后的代码
fenced = '0' # 初始化为无效值 # 用in判断输入是否在合法列表中 while fenced.lower() not in ['fully', 'partially', 'none']: fenced = input("Is the property fully fenced or partially fenced? (Answer 'Fully', 'Partially' or 'None') ") if fenced.lower() not in ['fully', 'partially', 'none']: print("Invalid Input. Please try again.") else: myfile.write("Fenced:\n" + str(fenced) + '\n') break
额外优化建议
可以把合法选项提取为集合(查找效率更高),同时用f-string简化字符串拼接:
valid_fenced_options = {'fully', 'partially', 'none'} fenced = '0' while fenced.lower() not in valid_fenced_options: fenced = input("Is the property fully fenced or partially fenced? (Answer 'Fully', 'Partially' or 'None') ") if fenced.lower() not in valid_fenced_options: print("Invalid Input. Please try again.") else: myfile.write(f"Fenced:\n{fenced}\n") break
内容的提问来源于stack exchange,提问作者Martin Nel
相关产品推荐
相关产品推荐

