1. 程式人生 > >【python系統學習10】布林值

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