【python系統學習10】布爾值


python的數據類型有好多個,前邊寫過字符串、整數和浮點數這三種。

本節來整理另一種簡單數據類型--布爾值

布爾值(bool)

布爾值和其數據值

計算機可以用數據進行判斷,若判斷為真則執行特定條件中的代碼塊。若不為真則執行相反的指定條件內的代碼塊或不執行任何內容。

這種數據就是布爾值。其數據類型在python中標記為bool

布爾值其值比較特殊,不像字符串、整數那些,是用戶自定的、無固定值的。他有固定的值,且只有兩個:TrueFalse(⚠️首字母大寫)。

示例代碼

下列代碼分別打印TrueFalse

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM