前面我們了解到,布爾類(lèi)型是Python的基礎(chǔ)數(shù)據(jù)類(lèi)型,布爾類(lèi)型只有True和False兩種值,本節(jié)課我們學(xué)習(xí)布爾類(lèi)型的集中運(yùn)算。
只有兩個(gè)布爾值都為 True 時(shí),計(jì)算結(jié)果才為 True。
True and True # ==> True True and False # ==> False False and True # ==> False False and False # ==> False
只要有一個(gè)布爾值為 True,計(jì)算結(jié)果就是 True。
True or True # ==> True True or False # ==> True False or True # ==> True False or False # ==> False
把True變?yōu)镕alse,或者把False變?yōu)門(mén)rue:
not True # ==> False not False # ==> True
這些運(yùn)算有什么用呢?計(jì)算機(jī)程序是由無(wú)數(shù)的邏輯分支組成的,通過(guò)布爾運(yùn)算,可以在計(jì)算機(jī)中實(shí)現(xiàn)條件判斷,根據(jù)計(jì)算結(jié)果為T(mén)rue或者False,計(jì)算機(jī)可以自動(dòng)執(zhí)行不同的后續(xù)代碼,因此學(xué)習(xí)布爾運(yùn)算也是非常有必要的。
在Python中,布爾類(lèi)型還可以與其他數(shù)據(jù)類(lèi)型(字符串,數(shù)字等)做 and、or和not運(yùn)算,請(qǐng)看下面的代碼:
a = True print(a and 0 or 99) # ==> 99
得到的計(jì)算結(jié)果不是布爾類(lèi)型,而是數(shù)字99,這是為什么呢?
因?yàn)镻ython把0、空字符串和None看成False,其他數(shù)值和非空字符串都看成True,所以:
True and 0
計(jì)算結(jié)果是0
繼續(xù)計(jì)算0 or 99
計(jì)算結(jié)果是 99
因此,結(jié)果是99。
需要注意的是,not計(jì)算的優(yōu)先級(jí)是高于and和or的。
True and not False # ==> True
在上述布爾計(jì)算中,先計(jì)算not False = True
,然后再計(jì)算True and True
,因此得到True的結(jié)果。
a and b
時(shí),如果 a 是 False,則根據(jù)與運(yùn)算法則,整個(gè)結(jié)果必定為 False,因此返回 a;如果 a 是 True,則整個(gè)計(jì)算結(jié)果必定取決與 b,因此返回 b。a or b
時(shí),如果 a 是 True,則根據(jù)或運(yùn)算法則,整個(gè)計(jì)算結(jié)果必定為 True,因此返回 a;如果 a 是 False,則整個(gè)計(jì)算結(jié)果必定取決于 b,因此返回 b。所以Python解釋器在做布爾運(yùn)算時(shí),只要能提前確定計(jì)算結(jié)果,它就不會(huì)往后算了,直接返回結(jié)果。
請(qǐng)運(yùn)行如下代碼,并解釋打印的結(jié)果:
a = 'python'
print('hello,', a or 'world')
b = ''
print('hello,', b or 'world')
解釋?zhuān)和ㄟ^(guò) or 運(yùn)算,可以把空字符串"變成"默認(rèn)字符串,而非空字符串保持不變。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書(shū)簽
舉報(bào)