機
器
人
邏輯運算
除了數字運算之外,邏輯運算也是一個寫程式時一定會用到東西。寫程式時,常常會有「如果是… 則…」等的判斷,因此,瞭解邏輯的運算,是寫好程式一個很重要的一環。
布林值
我們都知道布林值是什麼,只是或許你不知道它叫布林值而已。所謂的布林值,就是「是」或「非」兩種值的名稱。布林值的英文稱為Boolean,最初是以數學家 George Boole 的名字命名的,在程式語言中,布林值常常被簡寫為 bool,並且以 True 或 1 代表「是」,而 False 或 0 代表「否」。
在 Python 中,布林變數可以有兩種值:不是 True 就是 False。讓我們看看以下的範例:
>>> a = True
>>> b = False
>>> print(a)
True
>>> print(b)
False
大於、小於、等於
在瞭解布林值的基本概念後,現在讓我們來看看幾個最基本的邏輯運算符號。在數學中,我們常常會使用到 > 、<、= 來比較兩個數字間的大小,而在 Python 中,這些符號也帶有著相同的意義:
>>> 3 < 5
True
在上述的範例中,「3 < 5」即是一個邏輯的運算,而我們都知道 3 < 5,因此這段邏輯運算所給出的結果就是 True。
這裡必須注意的是,當我們要判斷「大於」或「小於」時,我們可以直接輸入「>」或「<」;然而,當我們要比較「等於」時,是不能輸入「=」的,而是要輸入「==」:
>>> 3 = 5
File "", line 1
SyntaxError: can't assign to literal
>>> 3 == 5
False
我們可以看到,第一段程式中,程式出現了錯誤,而第二段程式中,程式成功地回答了 False,可見「==」才是比較的運算符號。那麼,究竟「=」和「==」間的差別是什麼呢?
原來,「=」代表的是「給予值」的意思,例如:
>>> a = 3
代表的是將 3 這個值賦予給 a 這個變數;相對地,「==」代表的是兩個值之間的比較,例如:
>>> a == 3
True
代表的是 a 與 3 這兩個東西之間的比較。
除了 >、<、== 之外,Python 跟很多其他的程式語言一樣,還有「>=」、「<=」。例如我們可以說:
>>> x = 5
>>> x >= 5
True
>>> x > 5
False
將布林值賦予變數
為了方便,我們可以將以上的邏輯運算結果,像數字一樣地賦予給一個變數,這個變數的運作模式與其他變數基本上完全相同。讓我們看看這個例子:
>>> a = 3
>>> a == 3
True
>>> b = a == 3
>>> print(b)
True
在第四行時,我們將變數 b 賦予一個值,這個值所代表的就是「a == 3」,而因為 a == 3 這件事是 True,因此在第五行 print(b)
時,螢幕上顯示了 True。
若你覺得第四行的b = a == 3
艱澀難懂,試著回想一下「=」和「==」兩者之間的差別:前者是用來賦予變數值,而後者是用來比較兩個東西間的差異。
AND
有時,在做邏輯運算的時候,我們會需要用兩個或兩個以上的布林值來做運算。什麼意思呢?假設現在有一個變數代表「符合年齡限制」,另一個變數代表「符合工作條件」:
>>> qualifiedAge = True
>>> qualifiedJob = False
現在我們想要建立另外一個變數叫做 pass
,只有在 qualifiedAge
和 qualifiedJob
兩個變數都是 True 的時候才會是 True,那要怎麼寫呢?
>>> pass = qualifiedAge and qualifiedJob
>>> print(pass)
False
看到例子中第一行的「and」了嗎?and 是一個邏輯的運算符號,只有在左右兩側都成立的時候才會成立。還是不懂嗎?讓我們看看這個:
>>> False and False
False
>>> False and True
False
>>> True and False
False
>>> True and True
True
由此可知,and 只有在兩邊都是 True 的時候才會是 True。讓我們回到剛剛的例子,由於 qualifiedAge
和 qualifiedJob
分別帶表 True 和 False,因此qualifiedAge and qualifiedJob
所代表的就是 False。
OR
另一個跟 and 很像的邏輯運算符號是「or」。但是不同於 and 的是,or 只需要兩側的其中一個變數是 True,結果就會是 True:
>>> False or False
False
>>> False or True
True
>>> True or False
True
>>> True or True
True
回到剛剛 qualifiedAge
和 qualifiedJob
的例子,倘若我們要將 pass 變數設為「如果qualifiedAge
和 qualifiedJob
其中一個變數成立即為 True」,那麼我們可以寫:
>>> pass = qualifiedAge or qualifiedJob
>>> print(pass)
True
NOT
假設現在我們需要將布林變數的值反轉,也就是將 True 變成 False,並且 False 變成 True,那麼 Python 中也有很簡潔有力的工具可以達成這個目的,那就是 not 運算符號。
>>> not True
False
>>> not False
True
我們也可以將其運用在變數上:
>>> a = True
>>> b = not a
>>> print(b)
False
結論
最後,讓我們用這部影片來總結今天所學到的邏輯運算吧!