运算符
# 运算符
# 比较运算符
大于 > 小于 < 大于等于>= 小于等于 <= 不等于!= <>(也是不等于但 python3.7 不支持了) == 等于
判断结果输出是布尔值
print(2 > 1) #True
print(3 < 2) #False
print(2 >= 2) #True
print(2 <= 1) #False
print(1 != 2) #True
print('hello' == 'hello') #True
2
3
4
5
6
#比较符在字符串中使用
#字符串之间使用比较运算符,会根据各个字符逐一编码值(ASCII码表)比较
print('a' > 'b') #False 97 > 98
print('abc' > 'a') #False 97 > 98 逐一对比False就不往下
#字符串和数字不能进行比较,与等于做运算结果为False,与不等于做运算为True,不支持其他的比较运算
2
3
4
5
6
# print('a' > 90 )
print('a' == 90) #False
print('a' != 90) #True
2
3
4
# 逻辑运算符
逻辑与 and(并且) 逻辑或 or (或者) 逻辑非 not
逻辑与规则:只要有一个运算数是 False,结果就是 False;只有所有的运算数都是 True,结果才是 True(找第一个 False)
print(5 > 3 and 6 < 8 and 1 < 7) #True
print(3 > 1 and 9 < 5 and 2 < 3) #False
2
逻辑或规则:只要有一个运算是 True,结果就是 True; 只有所有的运算数都是 False,结果才是 False(找第一个 True)
print(5 > 3 or 6 < 1 or 1 > 3) #True
print(1 > 3 or 3 > 6) #False
2
逻辑非运算:Ture ==> False; False ==>Ture (取相反)
print(not(5 < 1)) #True
print(not(6 > 1)) #False
2
# 逻辑运算符的短路
逻辑与的短路,只要检索到有 False 就输出 False,后面的不会继续检索,取第一个 False 的值
5 > 3 and print('hello') #True 继续检索
8 < 2 and print('weiwei') #False 不会继续执行下一个
2
逻辑或的短路,只要检索到有 True 就输出 True,后面的不会继续检索,取第一个为 True
6 > 2 or print('123') #True,不会继续执行下一个
9 < 1 or print('456') #False 继续检索
2
逻辑与运算做取值时,取第一个为 False;如果所以运算数都是 True,取最后一个值
print(1 and 4 and 'hello' and 'test') #test
print(4 and 7 and 0 and '' and '123') #0
2
逻辑或运算做取值时,取第一个为 True;如果所以运算数都是 False,取最后一个值
print(0 or 'hello' or '' or []) #hello
print(0 or [] or '' or None or ()) # ()
2
# 位运算符
按位与 & 按位或 | 按位异或 ^ 按位左移 <<按位右移>> 按位取反~
a = 42
b = 13
# 按位与& 是把整型转换成二进制进行运算,两个二进制同为1则为1,否则为0,进行运算的结果
# 42 = 0b101010 0010 1010 ==>
# 13 = 0b1101 0000 1101 ==>0000 1000 ==> 0b1000 = 8
print(a & b)
2
3
4
5
6
按位或 | 只有一个为 1 就为 1
# 00101111 ==> 47
print(a | b)
2
按位异或 ^ 相同为 0,不同为 1
# 00100111 ==> 39
print(a ^ b)
2
按位左移 << 转换成二进制在尾部加 0,即头部向前移 n 位
# 101 ==> 101000
x = 5
print(x << 3) # x << n ==> a * 2 ** n ==> a*2的n次方
2
3
按位右移 >> 转换成二进制在头部加 0,即尾部向后移 n 位,溢出的数要丢弃 (也就是丢弃尾部二进制的 n 位数)
# 10001 ==> 100
x = 17
print(x >> 2) # x >> n ==> a 除以2的n次方
2
3
按位取反~把数据每个二进制位进行取反,即把 1 变成 0,0 变成 1, 涉及补码和反码有点绕,以后补习 #https://www.cnblogs.com/jniantic/p/12189648.html
# 0101 ==> 010
x = 6
print(~6) #~x = -(x+1)
2
3
用位运算符拆分十六进制各两位出来
x = 0xF0384E
R = x >> 16 #右移16位把后面16位溢出
G = x >> 8 & 255 # 255 为 1111 1111,然后与运算把前面的8位去除
B = x & 255 # 同上,把前面16位去除
print(hex(R),hex(G),hex(B))
2
3
4
5
# 运算符的优先级
#逻辑运算符的优先级 not > and > or
#先加减后乘除
#()括号内是最高优先级的
# ** 比乘除高
# ~ + - (正负号) 高
print(True or False and True) #True
print(True and not False or False) #True
2
3
4
5
6
7
# 三元表达式
#3. 三元表达式(if...else语句的简写),将if...else转变成一行代码
num1 = 12
num2 = 42
# if num1 < num2:
# x = num2
# else:
# x = num1
x = num1 if num1 > num2 else num2 # a if 1 > 2 else b,意思是如果1>2成立 则输出a否则输出b
print(x,'这数大')
2
3
4
5
6
7
8
9