使用and运算符的Python if条件判断逻辑失效问题求助
Python条件判断逻辑错误排查
原正常代码
while True: try: check_point_data = (str(input('Yes/No : '))) if check_point_data == 'Yes': print('Ok') break elif check_point_data == 'yes': print('Ok') break elif check_point_data == 'No': print('Try again later.') break elif check_point_data == 'no': print('Try again later.') break else: print('Only Yes or No is accepted.') continue except ValueError: break
修改后失效的代码
while True: try: check_point_data = (str(input('Yes/No : '))) if check_point_data == 'Yes' and check_point_data == 'yes': print('Ok') break elif check_point_data == 'No' and check_point_data == 'no': print('Try again later.') break else: print('Only Yes or No is accepted.') continue except ValueError: break
错误原因
核心问题是逻辑运算符使用错误:你把原本该用or(逻辑或)的地方写成了and(逻辑与)。
一个字符串变量不可能同时等于两个不同的值,比如check_point_data不可能既是'Yes'又是'yes',这两个字符串完全不同。and要求左右两边条件必须同时成立才会进入分支,所以这两个判断条件永远无法满足,程序必然走到else分支输出提示。
原代码通过多个elif逐个匹配不同大小写的输入,本质是“满足任意一个条件就执行对应逻辑”,对应逻辑或(or)的关系。
修正方案
方案1:替换逻辑运算符为or
while True: try: check_point_data = str(input('Yes/No : ')) if check_point_data == 'Yes' or check_point_data == 'yes': print('Ok') break elif check_point_data == 'No' or check_point_data == 'no': print('Try again later.') break else: print('Only Yes or No is accepted.') continue except ValueError: break
方案2:统一输入大小写(更简洁)
将输入转为小写(或大写)后再判断,减少重复条件:
while True: try: # 去除首尾空格并转小写 check_point_data = input('Yes/No : ').strip().lower() if check_point_data == 'yes': print('Ok') break elif check_point_data == 'no': print('Try again later.') break else: print('Only Yes or No is accepted.') continue except ValueError: break
内容的提问来源于stack exchange,提问作者maungG
相关产品推荐
相关产品推荐

