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 排版
