2022年 11月 4日

Python中的与或非

逻辑运算符基本描述

运算符 逻辑表达式 描述 实例
and x and y 布尔”与”:如果 x 为 False,x and y 返回 False,否则它返回 y 的值。 True and False, 返回 False。
or x or y 布尔”或”:如果 x 是 True,它返回 True,否则它返回 y 的值。 False or True, 返回 True。
not not x 布尔”非”:如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not True 返回 False, not False 返回 True
a = 1
b = 2
c = 3
print((a < b) and (b < c))  # True
print((a > b) and (b < c))  # False
print((a > b) or (b < c))   # True
print(not (a > b))          # True
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
在python里面,0、’’、[]、()、{}、None为假

python中and和or返回的值并不是True和false这么简单。

# and的返回值
print(2 and 5)   # 5
print(3 and "")  # 返回空

# or的返回值
print(2 or 5)   # 2
print(""or 3)   # 3
print("" or 0)  # 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

由上我们可知对于and,如果没有价值,返回的是最后一个真值,如果有假值,则返回第一个假值。;
对于or,如果没有真值,返回的是最后一个假值,如果有真值,则返回的是第一个真值。

逻辑运算符的本质

Python 中,andor 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。

另外,andor运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果。

应用:三目运算符

在c语言中三目运算符操作为a?b:c
我们来用python的逻辑运算符表示一下

优先级:非>与>或

a = "是小怪兽"
b = "不,是奥特曼"

print(1 and a or b) # 是小怪兽
print(0 and a or b) # 不,是奥特曼
  • 1
  • 2
  • 3
  • 4
  • 5

但是这样写会出现问题
例如:

a = ""
b = "不,是奥特曼"

print(1 and a or b) # 不,是奥特曼
  • 1
  • 2
  • 3
  • 4

解决:

a = ""
b = "不,是奥特曼"

print(1 and a or b) # 不,是奥特曼
c = (1 and [a] or [b])
print(c[0]) # 返回空
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

( ’ ’ )是为真的,且上面表达式中括号里的值为‘ ’,所以以上结果为空