Last Updated on 2021-03-28 by Clay
要討論 Python 中的 True 和 False,就不能不提到所謂的 bool 這個類別。
bool 也被稱作『布林』,也就是你看程式語言的書籍常常會看到的『布林值』。在程式裡頭,最簡單的 bool 值即為『真』或『假』、電位的 1 或 0,就只是這麼簡單。
bool 布林值
bool = True if bool == True: print('True') else: print('False')
我們首先來看這樣一段簡單的程式碼。
True
它的結果也是顯而易見,當我們設定的 bool 值為 True 時印出 ‘True‘。
同理,若是我們將程式碼改成:
bool = 1 if bool == True: print('True') else: print('False')
Output:
True
我們同樣也會印出 True 來!
正如剛剛介紹所說,bool 值 (布林值)所代表的正是極基本的單位:
1 = True
0 = False
所以若我們將程式碼修改一下,確認是否真的符合上述兩條規則:
bool = 5 if bool == True: print('True') elif bool == False: print('False') else: print("It's not bool!")
我們會印出的到底是哪種結果呢?
It's not bool!
沒錯!顯而易見,它並不屬於 bool !
常見問題
Python 中存在著一種容易跟 bool —— True, False 搞錯的判斷式,在此順便紀錄起來。
我們一樣改寫上面的程式:
bool = 1 if bool: print('True') elif not bool: print('False') else: print("It's not bool!")
output:
True
看起來很合理啊,哪裡不對?這樣還可以少寫『== True』 的判斷欸。
但實際上,當我們只使用 『if 變數:』 時,這判斷的並不是一個 bool 值,而是這個變數是否存在(非 0, False, None)!
bool = 5 if bool: print('True') elif not bool: print('False') else: print("It's not bool!")
我們再次將程式修改成 bool = 5, 這次我們印出的答案為:
True
很奇怪吧?這次跟之前印出的答案不一樣了。
原因在於程式判斷 bool 這個變數是有值的(非零或 None)!大家要小心這種地方,不要寫錯邏輯判斷了!
and, or, not
剛剛我們介紹的範例程式碼中,第二個條件判斷式裡頭有個 『not』。
有學過 C 語言的人一定馬上就知道,這跟變數面前加『!』來進行判斷有類似的功能,但由於我紀錄這個是為了讓從來沒學習過程式語言的人也能簡單上手,所以還是讓我多嘴一下囉。
a = 0 b = 1 if a and b: print('good!') else: print('not good!')
and,在邏輯上代表的是『而且』的意思。
在程式碼中,若單一個『if 變數:』代表著的是『這個變數存在的值』,那麼,當我們用『and』將兩者串在一起時的意思變為:
『a 存在 『而且』 b 同時存在』。
那麼我們在上面說過了,這個值存在的意思即為它並非 0, False, None …… 可是 a = 0 耶,所以我們印出的結果會是什麼?
not good!
沒錯! 只要一個條件失敗了就會執行 else 底下的程式碼!
那 『or』呢?
or,其實也就是字面上的意思,在邏輯上代表著的是『或』的意思。
我們簡單改寫一下上述的程式碼,將 and 更改為 or:
a = 0 b = 1 if a or b: print('good!') else: print('not good!')
這一次會有什麼樣的變化呢?
good!
是的! or 在這裡程式碼的意思即為『只要 a 或 b 有一個符合條件』—— 我們打從一開始就知道, b 是有值的!那麼我們理所當然地符合第一個設定的條件!
最後,終於回到 『not』的部份了。
not,其實就是邏輯中『非』的意思。
我們再回到剛剛有 and 的程式碼、卻不符合設定第一個條件只能印出 not good! 的部份。
這次我們簡單地修改程式,並將 not 給放進去:
a = 0 b = 1 if not a and b: print('good!') else: print('not good!')
output:
good!
我們成功印出『good!』了!這是為什麼呢?
這是因為 not 是『非』的意思。 a 本來是邏輯判斷式裡頭判斷為『負』的部份,也就是『不符合條件』的部份。
在我們加上 not 在 a 之前,即為我們讓其『負負得正』——也可以說我們將條件判斷式更改成我們本來就希望 a 是『不符合條件』的,所以若 a 本來是『不符合條件』的話反而讓我們整個條件『符合條件』了 …… 我在說什麼啊,似乎越說越亂了,哈哈哈哈哈哈。
總之,就由各位盡情地去試試看囉!