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

Python if/else语句中的布尔表达式未按预期求值是什么原因?

原代码逻辑错误原因

核心问题:逻辑否定规则使用错误,违反德摩根定律

原代码的if判断条件为if e != 1 and f != 3:,该条件成立的唯一触发场景是:e不等于1 同时 f也不等于3,只有这种情况下才会输出“you got it wrong!”,其余所有场景都会走else分支输出correct。

这就会出现你遇到的问题:

  • 当e输入正确(等于1),哪怕f输入错误:e !=1为假,and连接的整个条件就为假,走else输出correct
  • 当f输入正确(等于3),哪怕e输入错误:f !=3为假,and连接的整个条件就为假,走else输出correct
  • 只有两个输入都错误的时候,才会触发错误提示,完全不符合需求预期。

逻辑修正的原理

你需要的业务逻辑是「两个输入都正确才判定为正确,只要有一个错误就判定为错误」,对应的两种写法都是正确的:

  1. 正向判断(也就是你修改后的写法):直接判断两个值同时正确
if e == 1 and f == 3:
    print('correct')
else:
    print("you got it wrong!")
  1. 反向判断:如果要从错误场景触发的角度写,按照德摩根定律,not (A and B)等价于not A or not B,因此应该用or而不是and:
# 等价写法
if e != 1 or f != 3:
    print('you got it wrong!')
else:
    print("correct")

额外优化建议

不要使用eval()处理用户输入,存在极高的安全风险,用户可以输入任意可执行代码执行恶意操作,建议改为类型转换实现同样的效果:

e = int(input('enter 1 '))
f = int(input('enter 3 '))

内容的提问来源于stack exchange,提问作者boxerbobby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:24:01