Python3 基础语法
逻辑运算符 and、or、not 的精确讲解
Python语言支持逻辑运算符。
初学者有难点,请仔细多次阅读!
运算符 | 表达式 | 描述 | 实例(注意返回值) |
and | x and y | 布尔"与" :如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 | a= 10 ,b = 20 (a and b) 返回 20 |
or | x or y | 布尔"或" :如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 | a= 10 ,b = 20 (a or b) 返回 10 |
not | not x | 布尔"非" :如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | a= 10 ,b = 20 not(a and b) 返回 False |
上面的实例有些同学可能并不是太理解,我这边解释一下:
有些不负责任的 Python 教程说:Python 逻辑运算符用于操作 bool 类型的表达式,执行结果也是 bool 类型,这两点其实都是错误的!
Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型;同时,逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型。这就是我些上面表格里面的实例的原因,
那么问题的重点就是:1、在 Python 中,and 和 or 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。2、and 和 or 运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果。这里就能解释为什么在上面表格里的实例并没有返回布尔值而是返回a的值或者b的值。这里注意not运算,它是返回布尔值的。
以上两点极其重要,了解这两点不会让你在使用逻辑运算的过程中产生疑惑。
有的同学可能看到这里就已经蒙圈了!别着急,我们再说一下逻辑运算符的本质:
对于and运算 ,两边的值都是真,它的输出(返回)值才是真,其余都返回为假。换句话说,and的计算,两边有一个是假,那计算结果就是假。所以 Python 按照下面的规则执行 a and b运算:
1、如果and的左边表达式的值为假,那么我们是不是没有必要再往下运算了!因为无论右边是什么,都不会影响计算结果。那这个时候,and会把左边表达式a的值作为返回值。而不是返回False!
2、如果左边a表达式的值为真,那么最终值是不能确定的,and 会继续计算右边b表达式的值,并将右边表达式b的值作为最终结果。下载再去看一下上面表格的计算就能理解为什么返回20了吧!
对于 or 运算符,情况是类似的,两边的值都为假时最终结果才为假,只要其中有一个值为真,那么最终结果就是真,所以 Python 按照下面的规则执行a or b 运算:
1、如果左边表达式a的值为真,那么就不用计算右边表达式的值了,因为不管右边表达式b的值是什么,都不会影响最终结果,最终结果都是真,此时 or 会把左边表达式a的值作为最终结果。
2、如果左边表达式a的值为假,那么最终值是不能确定的,or 会继续计算右边表达式b的值,并将右边表达式b的值作为最终结果。
我们写几段代码验证上面的结论:
1、and运算:
#python 3.10
# and实例
a = "字符串" #a的布尔值是Ture
b = 200 #b的布尔值是Ture
c = False #再定义一个c,布尔类型是False
print(a and b) #a和b都是真,所以输出右边b的值:200
print(a and c) #a是真,c是假,此时输出c的值:False
print(b and a) #我们把b在前,a在后,同样两个都是真,此时输出a的值:"字符串"
print(b and c) #b是真,c是假,此时输出c的值:False
print(c and a) #c是假,没必要再计算后面是否是真假,因为都不会影响输出的值:False
运行结果(and实例):
#运行结果(and实例)
200
False
字符串
False
False
进程已结束,退出代码0
2、下面再验证or运算:
#python 3.10
# or 实例
a = "字符串" #a的布尔值是Ture
b = 200 #b的布尔值是Ture
c = False #再定义一个c,布尔类型是False
print(a or b) #a和b都是真,所以输出左边a的值:"字符串"
print(a or c) #a是真,c是假,有一个真就是真,此时输出左边a的值:"字符串"
print(b or a) #我们把b在前,a在后,同样两个都是真,此时输出b的值:200
print(b or c) #b是真,c是假,有一个真就是真,因为c的值不影响结果,此时输出b的值:200
print(c or a) #c是假,a的值可以影响到最终结果的真假,a是真,那么输出左边a的值:"字符串"
运行结果(or实例):
字符串
字符串
200
200
字符串
进程已结束,退出代码0
3、not运算
#python 3.10
# not 实例
a = "字符串" #a的布尔值是Ture
b = 200 #b的布尔值是Ture
c = False #再定义一个c,布尔类型是False
print(not a)
print(not b)
print(not c)
#not运算,就只是咋计算它的bool值了
运算结果(not实例);
False
False
True
进程已结束,退出代码0