iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Python

初學者的 30 天 Python 復健課程系列 第 3

復健第三天:布林值 Boolean 與運算子 Operators

  • 分享至 

  • xImage
  •  

說謊村與誠實村的故事

在開始今天的主題前,我們先來說一個蠻經典的故事:

有一天,有一個旅人來到一個路口,前面有兩條路,其中一條通向誠實村,而另一條擇通向說謊村。
在誠實村裡,所有人都只會講真話,而在說謊村裡,所有的人都會只講謊話。
為了能讓旅人順利到達誠實村,誠實村的人派了一位村民前去接待,而說謊村的村民為了拐騙這位旅人,也派了一位村民前去接待這位旅人。
旅人在路上遇到了前來接待的村民,卻不知道這位村民到底是誠實村還是說謊村派來的。
旅人應該詢問這位村民什麼問題,才能確保自己無論如何都能抵達誠實村呢?

(答案在文末)

什麼是布林值 Boolean

布林值 Boolean 像是我們小時候最喜歡的是非題,只有真值 True假值 False,沒有中間曖昧不明的數值。(通常老師會送分,喂!)

a = True
b = False

print(a) # True
print(b) # False

什麼是運算子 Operators

其實我一直不太瞭解「運算子」的「子」究竟是什麼意思,趁著這機會也詢問了一下 GPT 老師,根據老師的說法:

「運算子」是一個由「運算」和「子」組成的詞語。
其中「運算」指的是數學或邏輯上的計算過程,「子」通常用來表示這個概念的具體實現或元素。
所以「運算子」指的是在運算過程中使用的符號或詞語,如加法 +、減法 -、乘法 *、除法 / 等,它們在數學或邏輯中用來進行操作的基本單位。
簡單來說,「運算子」的「子」字用來強調這些符號或詞語在運算過程中的作用,是「運算」的具體實現或部分。

講了那麼多,用白話文解釋運算子就是「用來運算的符號」,而 Python 中除了常見的算數運算子(即「加減乘除」),還有其他的幾種運算子。

算術運算子(Arithmetic Operators)

  • 加法 (+): a + b
  • 減法 (-): a - b
  • 乘法 (*): a * b
  • 除法 (/): a / b
  • 取餘數 (%): a % b
  • 取商數 (//): a // b
  • 次方運算 (**): a ** b

賦值運算子(Assignment Operators)

復健第二天:內建函數與變數中,我們有提及可以使用等號 = 進行變數的賦值,而這個「等號 =」實際上就是賦值運算子。

同時我們也可以將 = 與前面的算數運算子做結合,產生出其他的賦值運算子,例如:

  • +=x += 3 等同於 x = x + 3
  • -=x -= 3 等同於 x = x - 3
  • *=x *= 3 等同於 x = x * 3
  • /=x /= 3 等同於 x = x / 3

比較運算子(Comparison Operators)

用於比較兩個值,結果會是布林值(TrueFalse),例如:

  • ==:等於(x == y
  • !=:不等於(x != y
  • >:大於(x > y
  • <:小於(x < y
  • >=:大於或等於(x >= y
  • <=:小於或等於(x <= y

成員運算子(Membership Operators)

用來檢查某個值是否在串列(物件)中:

  • in:如果某個值存在於串列(物件)中返回 True
  • not in:如果某個值不存在於串列(物件)中返回 True
print('a' in 'an')         # True

身分運算子(Identity Operators)

用來比較兩個對象是否為同一個對象,比較的是記憶體裡的位置是否相同:

  • is:如果兩個變數引用的是同一個對象則返回 True
  • is not:如果兩個變量引用的不是同一個對象則返回 True
print(1 is 1)              # True
print(1 is not 2)          # True

邏輯運算子(Logical Operators)

邏輯運算子主要用於「布林值的邏輯運算」,主要有:

  • and:當兩個條件都為真時結果為真
  • or:當其中至少一個條件為真時結果為真
  • not:對運算結果的布林值進行反轉
print(3 > 2 and 4 > 3) # True
print(3 > 2 or 4 < 3)  # True
print(not False)       # True

位元運算子

這個是我覺得最難理解的運算子,對於初學者來說也比較不容易使用到。

簡單來說,位元運算將數字轉為二進位,然後執行按位與操作。(真的看不懂也沒關係,未來有需要再認識即可!)

  • &: 按位與運算 bitwise AND
    按位與運算符 & 對兩個數字的每一位執行按位與操作。如果對應位都為 1,則結果為 1,否則為 0
  • |: 按位或運算 bitwise OR
    按位或運算符 | 對兩個數字的每一位執行按位或操作。如果對應位中至少有一位是 1,則結果為 1,否則為 0
  • ^: 按位異或運算 bitwise XOR
    按位異或運算符 ^ 對兩個數字的每一位執行按位異或操作。如果對應位不同,則結果為 1,如果對應位相同,則結果為 0
  • >>: 右移運算 bitwise right shift
    右移運算符 >> 將數字的二進制表示向右移動指定的位數。移動後左邊的空位由 0 補充,右邊移出的位置被丟棄。
  • <<: 左移運算 bitwise left shift
    左移運算符 << 將數字的二進制表示向左移動指定的位數。移動後右邊的空位由 0 補充,左邊移出的位數被丟棄。
a = 5  # 0101
b = 3  # 0011
print(a & b)   # 1  (0001)
print(a | b)   # 7  (0111)
print(a ^ b)   # 6  (0110)

後記

打這篇文章的時候,我差那麼一點點就要放棄鐵人賽(才第三天會不會太快?),因為我在打了一個多小時之後,不小心手賤按了這個小鈴鐺按鈕,沒想到它竟然直接進行了網頁的跳轉,再按上一頁時,只剩下標題與空蕩蕩的內文,那個時候已經是萬念俱灰,只能說 iThome 您能不能開發一個自動存草稿的功能呀,在 23:10 發現全部要重來,只能寫個慘字了!

萬惡的小鈴鐺
https://ithelp.ithome.com.tw/upload/images/20240917/20167668cOMJOxordP.png

(說謊村與誠實村的解答)

旅人只要對接待的村民問:「哪一條路是通往你村莊的道路呢?」
此時若是誠實村的村民,會誠實地帶旅人去誠實村。
此時若是說謊村的村民,為了不帶旅人去自己的村莊(說謊村),也會帶旅人去誠實村。


上一篇
復健第二天:內建函數 Built-in Functions 與變數 Variables
下一篇
復健第四天:字串 Strings
系列文
初學者的 30 天 Python 復健課程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言