学习python的第五天之逻辑运算符

学习python的第五天之逻辑运算符与位运算符

逻辑运算符

逻辑与and 逻辑或or 逻辑非not

  • 逻辑与and

    规则:只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True。

    print(2 > 1 and 5 > 3 and 10 > 2) #--> True
    print(3 > 2 and 5 < 4 and 10 > 6) #--> False
    
  • 逻辑或or

    规则:只要有一个运算数是True,结果就是True;只有所有的运算数都是False,结果才是False

    print(3 > 9 or 4 < 7 or 10 < 3) #--> True
    print(3 > 5 or 4 < 2 or 8 < 7) #--> False
    
  • 逻辑非not

    规则:True ==> False;False ==> True

    print(not(5 > 2)) #--> False
    

逻辑运算符的短路

  • 与运算的短路问题

    4 > 3 and print('hello world') #--> hello world
    4 < 3 and print('你好世界') #不打印 你好世界
    

    逻辑与运算,只有所有的运算数都是True,结果才为True;
    只要有一个运算数是False,结果就是False。
    第二句不打印的原因是:4 < 3 是False,所以后半句就不会再继续走了。

  • 或运算的短路问题

    4 > 3 or print('yes') #不打印 yes
    4 < 3 or print('no') #--> no
    

    逻辑或运算,只有所有的运算数都是False,结果才是False;
    只要有一个运算数是True,结果就是True。
    第一句不打印的原因是:4 > 3 是True,所以后半句就不会再继续走了。

  • 逻辑运算的结果不一定是布尔值

    逻辑与运算做取值时,取第一个为False的值 ;如果所有的运算数都是True,取最后一个值

    print(3 and 5 and 0 and 'he1lo') #--> 0
    print('good' and 'yes' and 'ok' and 100) #--> 100
    

    逻辑或运算做取值时,取第一个为True的值;如果所有的运算数都是False,取最后一个值

    print(0 or [] or 'lisi' or 5 or 'ok') #--> Lisi
    print(0 or [] or {} or ()) #--> ()
    

逻辑运算符规则:

逻辑与运算:
只要有一个运算数是False,结果就是False;只有所有的运算数都是True,结果才是True
短路:只要遇到了False,就停止,不再继续执行了
取值:取第-一个为False,如果所有的运算数都是True,取最后一个运算数

逻辑或运算:
只要有一个运算数是True,结果就是True;只有所有的运算数都是False,结果才是False
短路:只要遇到了True,就停止,不再继续执行了
取值:取第一个为True的值,如果所有的运算数都是False,取最后一个运算数

位运算符

按位与& 按位或/ 按位异或^ 按位左移<< 按位右移>> 按位取反~

按位异或:相同为0,不同为1
按位或:只要有一个为1,就为1
按位与:同为1则为1,否则为0
按位左移:所有位向左移,空缺补0
按位左右移:所有位向右移,移出的位直接去掉
按位取反:略

a=23
b=15
print(a & b) #--> 7
print(a | b) #--> 31
print(a ^ b) #--> 24
print(a << 3) #--> 184  ==> a * 2 ** 3
print(a >> 3) #--> 2    ==> a // 2 ** 3
print(~ a) #--> -24

例题:使用位运算,获取到十六进制颜色 0xF0384E 的RGB值,以十进制形式打印输出。

color = 0xF0384E
red = color >> 16
green = color >> 8 & 0xFF
blue = color & 0xFF
print(hex(red), hex(green), hex(blue))

运算符的优先级

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0Zp7dbp-1591700250401)(C:\Users\93219\Desktop\201.png)]

逻辑运算的优先级:not > and > or
强烈建议:在开发中,使用括号来说明运算符的优先级

print(10 + 2 * 3 ** 2) #--> 28
print(True or False and True ) #--> Ture or False ==> True 
print(False or not False) #--> False or Ture ==> True 
print(True or True and False ) #--> Ture or False ==> True 
print((True or True ) and False) #--> True and False ==> False

进制表示方式

二进制前用0b表示;转二进制用bin()
八进制前用0o表示;转八进制用oct()
十进制前不需要表示;转十进制用bin()
十六进制前用0x表示;转十六进制用hex()

a = 0b01001011 # 二进制
# 转十进制
b = int(a) #--> 75
# 转八进制
c = oct(a) #--> 0o113
# 转十六进制
d = hex(a) #--> 0x4b
# 转二进制
e = bin(b) #--> 0b01001011
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值