【python系統學習10】布林值
python的資料型別有好多個,前邊寫過字串、整數和浮點數這三種。
本節來整理另一種簡單資料型別--布林值
布林值(bool)
布林值和其資料值
計算機可以用資料進行判斷,若判斷為真則執行特定條件中的程式碼塊。若不為真則執行相反的指定條件內的程式碼塊或不執行任何內容。
這種資料就是布林值
。其資料型別在python中標記為bool
。
布林值其值比較特殊,不像字串、整數那些,是使用者自定的、無固定值的。他有固定的值,且只有兩個:True
、False
(⚠️首字母大寫)。
示例程式碼
下列程式碼分別列印True
和False
print(3>1) # True
print(3<1) # False
其中,True表示真
,說明條件成立。正如上例中,數字3是大於1的,判斷的結果為“真”
相反,False表示假
,說明條件不成立。正如上例中,數字3不小於1,判斷的結果為“假”
而只有當條件判斷為True(即條件成立)時,if和while後面的子句才會執行下去。
比如下邊的程式碼
if True:
print('這句話肯定會被執行')
if False:
print('這句話肯定不會被執行')
⚠️特別的,在使用while時,如果當條件永遠正確,那麼就會出現迴圈一直執行停不下來、造成死迴圈現象。如下邊的程式碼(千萬不要輕易執行)
while 3 > 1:
print('糟了,是死迴圈的感覺!')
3>1
的判斷永遠成立,得到True後,while一直執行出現死迴圈。
布林運算
什麼是布林運算
根據布林值資料所做的邏輯判斷,叫做布林運算
。
下例中,3>1
就是布林運算。
print(3>1)
布林運算產生布爾值
試想一下,為什麼我們這麼寫,if條件就執行了呢?
if 5 > 3:
print('布林運算產生布爾值')
if語句後邊條件判斷語句需要一個布林值,來指定判斷後的邏輯,如果判斷為真,則將執行if後的程式碼塊。
計算機會先做一次布林運算,判斷5是否大於3。判斷結果是5>3
這個布林運算返回了布林值——True
,條件成立if語句執行。
布林運算的三種方式
數值比較 - 比較運算子
數值運算 - 真假判斷
布林值運算 - 邏輯運算子
數值比較 - 比較運算子
python中的比較運算子
比較運算子 | 含義 | 備註 |
---|---|---|
等於 | == | 判斷資料和型別 |
不等於 | != | 英文感嘆號 |
大於 | > | |
小於 | < | |
大於等於 | >= | |
小於等於 | <= |
基本上就是小學數學!
::: tip ⚠️等於運算子(==)
1、需要兩個等於號。一個等於號(=
)是賦值的作用
2、不僅僅只判斷左右兩邊的值是否相等,還會判斷符號左右的資料型別是否一致。
比如print(3 == '3')
就會因為兩邊資料型別不一致,進而返回False
:::
數值運算 - 真假判斷
除了用數值比較作為語句的判斷條件外,我們可以用一個數據/數值本身作為一個條件,直接進行真假判斷。如下:
if 'False':
print('這段你覺得會列印嗎?')
最後執行結果,就是列印了'這段你覺得會列印嗎?'這句話。
原因是,字串'False'在這裡就是作為一個條件,被判斷為真(True)。
在Python中被判定為假的資料是有限的,官方文件規定的。如下:
python中的假值表
序號 | 認定為假的值 | 含義 | 備註 |
---|---|---|---|
1 | False | 布林值中的假 |
|
2 | 0 | 整數0 |
|
3 | None | 資料型別NoneType |
|
4 | '' | 空字串空串 |
裡邊有內容就為真 注意區別空串和空格字串‘ ’ |
5 | [] | 空列表 | 裡邊有內容就為真,如[0] |
6 | {} | 空字典 | 裡邊有內容就為真,如{boolVal: Flase} |
除了上述“假”值,其他值都會被判斷為“真”。
if False:
print('False值為假,這句話不會被執行。')
if 0:
print('整數0為假,這句話不會被執行。')
if None:
print('空值None為假,這句話不會被執行。')
if '':
print('空串為假,這句話不會被執行。')
if []:
print('空列表為假,這句話不會被執行。')
if {}:
print('空字典為假,這句話不會被執行。')
以上案例顯示,各個資料本身作為一個條件時,會被判定為假,if後面的條件為假,計算機就都不會執行if的下一行程式碼。
⚠️相反的,注意區分下邊這些值,看上去和假值很像,但是他們都是真
if 'False':
print('字串"False"值為真,這句話會被執行。')
if '0':
print('字串"0"值為真,這句話會被執行。')
if -1:
print('非0數字皆為真,這句話會被執行')
if 'None':
print('字串"None"為真,這句話會被執行。')
if ' ':
print('空格字串,不是空串!特別注意。空格字串是真,這句話會被執行。')
# 可見,只要字串不為空串,都為真。
if [0]:
print('列表不為空,條件為真,這句話會被執行。')
if {'boolVal': False}:
print('字典不為空,條件為真,這句話會被執行。')
⚠️特別注意。空格字串不是空串!他的布林值是真
布林值運算 - 邏輯運算子
邏輯運算子有以下五種運算:
運算子 | 含義 | 備註 |
---|---|---|
and | 與 | 並且 |
or | 或 | 或者 |
not | 非 | 取反 |
in | 屬於 | 判斷資料是否屬於一個字典或列表 |
not in | 不屬於 | 同上,取反。判斷不屬於 |
篇幅比較大,整理到下邊一個大模組中。
邏輯運算子
and - 與
and的計算邏輯
我自己學習js的並且(&&
)時總結的順口溜,同樣適用於python中的並且(and
):
# 關於判斷規則
真真才為真
有假不算他
# 關於返回結果
真真得末尾
遇假返回假
解釋:and左右的條件,都為真時,總的判斷結果就為真。否則一旦左邊或右邊有假值,則整個結果都是假的。
如果兩邊都是真值,返回結果為最後的那個真值。
如果兩邊有假值,則返回第一個遇到的假值。
and案例
# 真真才為真 案例:
if 1 and 2:
print('真真返回結果:',1 and 2) # 真真返回結果: 2(返回最後的那個真值)
# 有假不算他 案例:
if 2 and None:
print('不成立')
else:
print('真假返回結果:',2 and None) # 真假返回結果: None(返回第一個遇到的假值)
if 0 and False:
print('條件不成立,這裡不列印')
else:
print('假假返回結果:',0 and False) # 假假返回結果: 0(返回第一個遇到的假值)
# 兩邊表示式,左邊有假,則返回結果是第一個假表示式的執行結果:
a = 1
b = 2
c = 3
d = 4
if a > b and c < d:
print('條件不成立')
else:
print('真假表示式返回結果:', a > b and c < d) # False (a>b的結果)
and對價值是零容忍的,只要有假、立馬判定為假,誰說都不好使!
or - 或
or的計算邏輯
同樣來一段我學習時的順口溜:
# 關於判斷規則
有真即為真
假假才算假
# 關於返回結果
有真返回真
假假返末尾
解釋:or左右的條件,只要有一個為真時,總的判斷結果就為真。
必須左、右兩邊都是假值時,整個結果才是假的。
如果兩邊都是真值、或者兩邊其中一邊有一個真值,則返回結果為第一個遇到的真值。 如果兩邊都是假值,則返回最後的那個假值。
or的案例:
# 有真即為真 案例:
if 1 or 2:
print('真真返回結果:',1 or 2) # 真真返回結果: 1(返回第一個遇到的真值)
if 2 or None:
print('真假返回結果:',2 or None) # 真假返回結果: 2(返回第一個遇到的真值)
if None or 3:
print('真假返回結果:',None or 3) # 真假返回結果: 3(返回第一個遇到的真值)
# 假假才算假 案例:
if 0 or False:
print('條件不成立,這裡不列印')
else:
print('假假返回結果:',0 or False) # 假假返回結果: False(返回最後的那個假值)
可以想象成or是對假值的容忍度很高,不監測到最後一個都為假,她是不會死心並直接判斷為假值的。
not - 非
not
表示翻轉
的意思。所謂取反,就是顛倒真假的意思。
not True就等於False,not False就等於True。
print(not True) # False
print(not False) # True
in - 屬於
in
用來判斷一個元素是否在一堆資料之中
資料集合是列表的話,【in】和【not in】就可以用來判斷變數在不在列表list裡面(in在、not in不在)。
資料集合是字典的話,【in】和【not in】就可以用來判斷字典中是否存在某個【鍵】(in在、not in不在):
myName = ['小石頭', 'xing.org1^', 181, True]
dictName = {
'name': '小石頭',
'age': 19,
'hobby': {
'it': ['css','js','python'],
'daily': [['music','tv'],['apple','pear']],
'sports': 'sleep'
}
}
print('小石頭' in myName) # True 該字串存在於列表中
print('gjf' in myName) # False
print('hobby' in dictName) # True
print('sex' in dictName) # False
not in - 不屬於
與in
相反,用來判斷一個元素是否不在一堆資料之中
# 變數沿用in案例中的
print('小石頭' not in myName) # False 該字串存在於列表中,非要說不在那是錯誤的,返回假值。
print('gjf' not in myName) # True
print('hobby' not in dictName) # False
print('sex' not in dictName) # True
優先順序
三者之間的優先順序:() > not > and > or
型別查詢 type()
資料型別和型別轉換章節,提過type函式,他主要用於型別查詢。
布林型別作為資料型別中的一種,同樣可以用type函式進行型別查詢:
print(type(True)) # <class 'bool'>
print(type(False)) # <class 'bool'>
可以從列印結果看出來,布林值的型別返回為<class 'bool'>
。
布林值判斷 bool()
雖然我們有python中的假值表, 肉眼就能辨別真假值。
不過python也提供了bool()
函式來幫助我們判斷資料的真假。下邊是使用案例:
以下皆列印False
print(1, bool(False))
print(2, bool(0))
print(3, bool(''))
print(4, bool(None))
print(5, bool([]))
print(6, bool({}))
以下皆返回True
print(1, bool('False'))
print(2, bool('0'))
print(3, bool(' '))
print(4, bool('None'))
print(5, bool([0]))
print(6, bool({'boolVal': False}))
print(7, bool('字串除了空串都為真'))
print(8, bool(-1))
print(9, bool(1.3))
print(10, bool([False]))
思考題
一百遍“我真棒”
用布林運算實現while迴圈重複執行100遍列印“我真棒”的任務
# 參考程式碼位於原始碼files資料夾下對應章節的py檔案中
本文使用 mdnice 排版