运算符
算术运算符:+ - / % // 等
逻辑运算符: not and or 优先级 not >and >or
运算时: and 前为False 后面的不再计算,前为True,输出后面的;
or 前面为True,后面的也不再计算,否则输出后面的:
print(1 or 2) #1 print(0 or 3) #3 print(2 and 0) #0 print(0 and 2) #0 print(2 and 3) #3
类比,int 和 str 数据类型可以相互转换,int 和 bool 类型也可以相互转换:
# int --> bool 非零即为True ,只有0 才是False print(bool(0)) #False print(bool(1)) #True print(bool(-1)) #True #bool -->int True 为1 ,False 为0 print(int(True)) #1 print(int(False)) #0
还有一点需要特别注意:
逻辑运算符(and or) 前后都是数字时,结果是数字;规则按照上面说的输出:
x and y: x为True ,输出y;否则输出x;
x or y: x 为True ,输出x ; 否则输出y;
逻辑运算符(and or )前后都是比较运算符时,输出的才是True False
print(1 or 2) #1 print(1 <2 or 2>3) #True print(1 >2 or 2<3) #True
再来看个复杂的:
print(2 or 100 or 3 or 4) #2 print(0 or 4 and 3 or 2) #3 先算and得到3 ==> 0 or 3 or 2 ==>3
最后看一个逻辑运算符前后,数字和比较运算符结合的:
print(2 or 1<3) # 2
print(2 and 1<3) #True
print(2 and 1>3) #False
print(1>2 and 3 or 4 and 3<2) #False
其实规律就是,当 or 和 and的运算规则:
第一行,or 前面的是2就不用管后面的了,也就是后面的结果都不看!
第二行,and 前是数字2 (也可以看做True 因为后面的是比较运算符,结果肯定为True or False),后面1 <3 为True ,所以最终结果为True
第三行,and 前是2(此处看为True)后面比较运算符为False,所以最终结果为False;
第四行, 有两个and 一个or ,所以先算and ,第一个and 是False, 后面的and 是False 所以最终结果是False;
下面这个就很简单:(面试题? 23333)
print(2 or 1<3 and 2) #2
下面这个我竟然出错了!:
print(1<3 and 3 or 2) #3
其实还是先算and 嘛,and 前面为True ,所以看y 为2 ,所以前面1<3 and 3 结果为3 就不用看后面的2了~