今天开始分享我讨厌的运算符 ,预计会持续很多天……
今天的干货就是「逻辑运算符」逻辑运算符返回布尔值,True或False。
回忆一下知识点,python规定:
①任何非数字0和非空对象都为True。
②数字0,空(null)对象和特殊对象None都为False。
③True,False首字母必须大写。
1、逻辑与(a and b)
只有当[a] 和[b] 同时为真的时候,[a and b] 才为真 ,否则为假。所以当第一个值为假的时候,即不在继续进行b值的判断与运算,逻辑与是找假的运算。
例子①
result_0 = True and False
result_1 = False and True
result_2 = True and True
result_3 = False and False
print("True and False 的结果为:{}".format(result_0))
print("False and True 的结果为:{}".format(result_1))
print("True and True 的结果为:{}".format(result_2))
print("False and False 的结果为:{}".format(result_3))
执行结果:
True and False 的结果为:False
False and True 的结果为:False
True and True 的结果为:True
False and False 的结果为:False
若[a] 和[b]都是非0的数字,[a and b] 为右侧的数字b。若[a] 和[b]是至少有一个数字0,[a and b] 为数字0。
例子②
result_0 = 0 and 0
result_1 = 0 and 1
result_2 = 0 and 2
result_3 = 1 and 2
result_4 = 1 and 0
result_5 = 2 and 0
result_6 = 2 and 1
print("0 and 0 的结果为:{}".format(result_0))
print("0 and 1 的结果为:{}".format(result_1))
print("0 and 2 的结果为:{}".format(result_2))
print("1 and 2 的结果为:{}".format(result_3))
print("1 and 0 的结果为:{}".format(result_4))
print("2 and 0 的结果为:{}".format(result_5))
print("2 and 1 的结果为:{}".format(result_6))
执行结果:
0 and 0 的结果为:0
0 and 1 的结果为:0
0 and 2 的结果为:0
1 and 2 的结果为:2
1 and 0 的结果为:0
2 and 0 的结果为:0
2 and 1 的结果为:1
若[a] 和[b]都是非空的字符串,[a and b] 为右侧的b字符串。若[a] 和[b]是至少有一个空字符串,[a and b] 输出空行。
例子③
result_0 = '' and ''
result_1 = '' and 'a'
result_2 = '' and 'aa'
result_3 = 'a' and 'aa'
result_4 = 'a' and ''
result_5 = 'aa' and ''
result_6 = 'aa' and 'a'
print("'' and '' 的结果为:{}".format(result_0))
print("'' and 'a' 的结果为:{}".format(result_1))
print("'' and 'aa' 的结果为:{}".format(result_2))
print("'a' and 'aa' 的结果为:{}".format(result_3))
print("'a' and '' 的结果为:{}".format(result_4))
print("'aa' and '' 的结果为:{}".format(result_5))
print("'aa' and 'a' 的结果为:{}".format(result_6))
执行结果:
'' and '' 的结果为:
'' and 'a' 的结果为:
'' and 'aa' 的结果为:
'a' and 'aa' 的结果为:aa
'a' and '' 的结果为:
'aa' and '' 的结果为:
'aa' and 'a' 的结果为:a
2、逻辑或(a or b)
只要[a] 和[b] 中有一个为真,[a and b] 就为真,其余情况都是假。也就是说当[a] 和[b] 都是假的时候,[a and b] 才是真。
例子①
result_0 = True or False
result_1 = False or True
result_2 = True or True
result_3 = False or False
print("True or False 的结果为:{}".format(result_0))
print("False or True 的结果为:{}".format(result_1))
print("True or True 的结果为:{}".format(result_2))
print("False or False 的结果为:{}".format(result_3))
执行结果:
True or False 的结果为:True
False or True 的结果为:True
True or True 的结果为:True
False or False 的结果为:False
若[a] 和[b] 都是数字0,那么[a or b] 为数字0。若[a] 和[b]中只有一个为数字0,那[a or b] 返回非0是数字。若[a] 和[b] 都非数字0,那么[a or b] 为左侧的数字a。
例子②
result_0 = 0 or 0
result_1 = 0 or 1
result_2 = 0 or 2
result_3 = 1 or 2
result_4 = 1 or 0
result_5 = 2 or 0
result_6 = 2 or 1
print("0 or 0 的结果为:{}".format(result_0))
print("0 or 1 的结果为:{}".format(result_1))
print("0 or 2 的结果为:{}".format(result_2))
print("1 or 2 的结果为:{}".format(result_3))
print("1 or 0 的结果为:{}".format(result_4))
print("2 or 0 的结果为:{}".format(result_5))
print("2 or 1 的结果为:{}".format(result_6))
执行结果:
0 or 0 的结果为:0
0 or 1 的结果为:1
0 or 2 的结果为:2
1 or 2 的结果为:1
1 or 0 的结果为:1
2 or 0 的结果为:2
2 or 1 的结果为:2
若[a] 和[b]都是非空的字符串,[a or b] 为左侧的b字符串。若[a] 和[b]是至少有一个空字符串,[a or b] 输出非空的那个字符串。若[a] 和[b]都是空的字符串,[a or b] 输出空行。
例子③
result_0 = '' or ''
result_1 = '' or 'a'
result_2 = '' or 'aa'
result_3 = 'a' or 'aa'
result_4 = 'a' or ''
result_5 = 'aa' or ''
result_6 = 'aa' or 'a'
print("'' or '' 的结果为:{}".format(result_0))
print("'' or 'a' 的结果为:{}".format(result_1))
print("'' or 'aa' 的结果为:{}".format(result_2))
print("'a' or 'aa' 的结果为:{}".format(result_3))
print("'a' or '' 的结果为:{}".format(result_4))
print("'aa' or '' 的结果为:{}".format(result_5))
print("'aa' or 'a' 的结果为:{}".format(result_6))
执行结果:
'' or '' 的结果为:
'' or 'a' 的结果为:a
'' or 'aa' 的结果为:aa
'a' or 'aa' 的结果为:a
'a' or '' 的结果为:a
'aa' or '' 的结果为:aa
'aa' or 'a' 的结果为:aa
当[a]和[b]两值非0或非False,[a or b]取左侧值a。当[a]和[b]一值非0或非False,另一值为0或False, [a or b]取非0或True。当a]和[b]为 0,False, [a or b]为右侧值b。
例子④
result_0 = 2 or True
result_1 = True or 2
result_2 = 0 or 2
result_3 = False or 2
result_4 = 2 or 0
result_5 = 2 or False
result_6 = 0 or False
result_7 = False or 0
print("2 or True 的结果为:{}".format(result_0))
print("True or 2 的结果为:{}".format(result_1))
print("0 or 2 的结果为:{}".format(result_2))
print("False or 2的结果为:{}".format(result_3))
print("2 or 0 的结果为:{}".format(result_4))
print("2 or False 的结果为:{}".format(result_5))
print("0 or False 的结果为:{}".format(result_6))
print("False or 0 的结果为:{}".format(result_7))
执行结果
2 or True 的结果为:2
True or 2 的结果为:True
0 or 2 的结果为:2
False or 2的结果为:2
2 or 0 的结果为:2
2 or False 的结果为:2
0 or False 的结果为:False
False or 0 的结果为:0
3、非(not a)
逻辑非是取反运算。 [a] 为真,[not a] 就为真。 [a] 为假,[not a] 就为假。
对于布尔值,非运算直接对其进行取反操作,True变False,False变True。对于非布尔值,非运算先将其转换成布尔值,再取反。
对于字符串,有内容为True,空字符串为False。对于数字,0 为 False ,其它 为 True 。
例子①:、
>>> not 0
True
>>> not 1
False
>>> not -1
False
>>> not []
True
>>> not [0]
False
>>> not [1]
False
>>> not ''
True
>>> not '01'
False
>>> not '1'
False
>>> not ()
True
>>> not (0)
True
>>> not (1)
False
>>> not True
False
>>> not False
True
● ● ●
python对非布尔值的与或非运算会将其当作布尔值运算,最终会返回原值。
1)与运算是找False。若第一个值是False,直接返回第一个值,也不再计算第二个值,否则返回第二个值。
2)或运算是找True。若第一个值是True,直接返回第一个值,也不再计算第二个值,否则返回第二个值。
3)非运算是取反。