往事封尘 2022-02-08 02:33 采纳率: 100%
浏览 124
已结题

python if语句中or的语法问题

背景

在写一个if语句中带有or判断的语句时为了简化,先写成了一下的样子

i = 3
if i == 1 or 5:
    print(i)

结果:
3

由于or优先级最低,因此边成了 i==1和5两个条件的判断,结果不对于是改成下面的样子

代码如下
i = 5
if i == (1 or 5):
    print(i)
elseprint('not')

结果:
not
i = 1
if i == (1 or 5):
    print(i)
elseprint('not')

结果:
1

不知道为啥这样,我看网上有人说可以这样写的

希望的结果
i = 5
if i == 1 or i== 5:
    print(i)
elseprint('not')

结果:
5

希望与这个效果一样但是省略i== 不知道可以不

  • 写回答

7条回答 默认 最新

  • 关注

    i == 1 or 5 是用 or 分隔的
    i == 1

    5
    两个条件表达式。
    其中5是一个单独的条件表达式,5在条件判断时永远为真, or 两边是任何一边为真结果就是真。
    所以i == 1 or 5 表达式的结果就是永远为真。

    if i == (1 or 5): 也是不对
    or 和 and 是逻辑运算, 具有短路特性。
    逻辑运算的工作原理是:
    表达式A and 表达式B 的工作原理是:如果A的值为false(或A的值可以被当做为false)就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值
    表达式A or 表达式B 的工作原理是:如果A的值为true(或A的值可以被当做为true)就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值

    i == (1 or 5) 会先计算(1 or 5) , 1可以被当做为true就直接返回1, 5不会计算到
    所以if i == (1 or 5): 等同于 if i == 1:

    正确的写法是

    if i == 1 or i == 5:
    

    要简写可以这样子

    if i in [1,5]:
    

    就是判断i的值是否包含在[1,5]列表中

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题