介紹邏輯運算的觀念,包含布林值、運算子與運算式的介紹。並說明如何使用 Python 撰寫這些觀念。
上一次提到程式的邏輯思維,那如何讓控制程式按照我們的邏輯走呢?就少不了控制流程。
控制流程是每個程式語言都會有相對應語法的事情。其中有兩種最基本的控制流程觀念:條件、迴圈。
但在講控制流程之間,我們需要先懂得使用邏輯運算,以及一些基礎觀念:布林值、運算式、運算子。這些內容確實有些枯燥,但如果你認識他們,未來與人討論或查找資料時會更方便。
如果您沒有閱讀過上一篇,或是忘記上次的內容,可以先回顧一下: 【程式教學 Programming Tutorials】程式設計的邏輯思維
基礎組成:運算元 + 運算子 → 運算式
運算式又稱為表達式(Expressions),需要由運算元(Operant)與運算子(Operator)組成。
在開始之前先提醒各位,一個名詞的中文翻譯有太多種了,所以建議記英文的名字。
以下直接舉例子來說明運算元與運算子:
1-1
- 其中數字的部分為運算元,你也可以想成是資料的部分。
- 而中間的
-
這類運算符號(Operation Symbol),則稱為運算子。並且在這個例子當中,因為它連接著兩個運算元,所以又稱為二元運算子(Binary Operator)。再且因為它執行的是數學運算,所以又稱算數運算子(Arithmetic Operator)。 - 而這一整句就是運算式(Expressions),同持這個例子來說,它是一個算術運算式。它最後會有結果產生。
-1
1
為運算元。-
為運算子。且在這個運算式當中,因為只對一個運算元起作用,所以它又稱為一元運算子(Unary Operator)。
(0 + 1) - (2 - 1)
- 此時兩組括號中間的
-
還是二元算數運算子,只不過這次連接的是兩組運算式。也就是說,他們是可以組合使用的。
以上你可以發現,同一個運算符號,可能當一元運算子使用,也可能當二元運算子使用。
每個種程式語言對於運算子有自己的定義,包括符號與運算順序,並且有好幾種類別的運算子(例如在這篇文章有介紹到的是算術運算子、邏輯運算子)。
由於運算子繁多,這裡先附上 Python 所有運算子的教學:W3Schools
邏輯運算 Logical Operation
一般來說,我們最習慣的運算就是算術運算,而邏輯運算其實也是相同的道理:運算元配上運算子。只不過邏輯運算的定義與算術運算不同。記得上一篇當中我也有提到,邏輯思維的「是」與「非」概念很鮮明嗎?這點也有從邏輯運算表現出來。
布林值 Boolean
在開始運算之前,我們需要先認識一種資料型態(Data Type):布林值(Boolean)。
如同我們平時執行算術運算的時候,我們資料的部分(運算元)放的是數值型態(Numerical Type),而數值型態又有許多種,最常見是整數(integer)與浮點數(float)。
而邏輯運算或是之後會介紹的條件控制流程,都少不了用到布林值這種資料型態。
這個型態只有兩種值:True, False。
邏輯運算子 Logical Operators
如同上面說的,運算子的用途是用來連接不同的運算元,也能連結不同的運算式,而這裡的邏輯運算子自然也能連接運算元(或者我們可以說是「資料」),只是運算的定義不同。
邏輯運算「最基礎」有三種:「且」、「或」、「非」。通常每個程式語言至少都會定義這三種運算子。
而在 Python 裡面,分別為:
- 且:
and
- 或:
or
- 非:
not
邏輯運算用法簡單來說:
and
:只要一個為 False,整個就 False 了or
:只要一個為 True,整個就 True 了not
:將結果相反
邏輯運算式 Logical Expressions
再複習一次,算術運算式的組成:數值當運算元+算術運算子。
那邏輯運算式的組成,就是如同上面的圖一樣,布林值當運算元去配邏輯運算子……嗎?
在真正的意義上確實是這樣沒錯,但你可以直接試試看,把運算元的位置放數值型態,其實也是行得通!但事實上他也是被變成布林的邏輯了。
猜猜看以下幾個例子的答案:
print(1 and 1)
print(1 and 9)
print(0 and 9)
print(9 and 1)
print(1 or 1)
print(1 or 9)
print(9 or 1)
print(0 or 9)
print(not 1)
print(not 0)
print(not 9)
順便一提,print()
是 Python 中要顯示內容的方法,細部參數調整我們之後有機會再聊。
公布答案:
1
9
0
1
1
1
9
9
False
True
False
先說最後使用 not
的部分:聽過電腦的世界只有 0 與 1 這種說法嗎?除了數字 0 會被以 False 表達,其他都會被以 True 做解釋,而 not
的作用就是反過來,於是變成上面的結果。
那其他例子發生什麼事呢?這裡要介紹 Python 一種為了加快運算的設計:短路運算(Short-Circuit)。
and
:只要檢查到有一個條件為 False,整個運算式便結束。or
:只要檢查到有一個條件為 True,整個運算式便結束。
舉其中 0 and 9
來說,因為第一個就出現會被判斷為 False 的 0 了,所以運算在這停下來,有些程式語言會直接輸出的結果為 False,只是 Python 會幫你保留數字顯示最後確定的結果。
而前兩個 1 and 9
與 9 and 1
的差別在哪呢?這兩個運算式都需要從頭檢查到尾是否有 False 產生,所以第一個式子最後的確定結果就是靠後的 9,而第二個式子就是最後確定結果的 1。
同樣的道理用到 or
身上,我們可以看 1 or 9
與 9 or 1
這兩個例子:因為一開始就檢查到 True 的結果了,所以兩個運算式最後確定的結果就是排在前面的數字。
後集待續與結語
希望大家看到這裡頭腦還沒暈,原先我是想直接連條件控制都介紹完,但發現應該留給大家喘口氣(而且也越寫越多了,感覺順便拆分來發比較好 XD)。
總結來說,這一整篇重點就兩個:True, False。
如果將任何事情二分法區分清楚一點,或許會比較好理解。但提醒您,在日常生活中,尤其與人交際當中,千萬不要任何時候都只有二分法。
介紹完邏輯運算之後,下次我們可以進入條件流程控制的部分了。