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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:45:51