運算子 operator
在程式語言裡,如果要進行「運算式」的計算,就必須要使用「運算元 Operand」和「運算子 Operator」相搭配,運算元表示的是需要計算的數值,運算子代表特定運算功能的符號,例如 3+4 裡的 3 和 4 是運算元,+ 號則是運算子,整串算式就是運算式,這篇教學會介紹 Python 裡有哪些運算子。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
賦值運算子
「賦值運算子」就是「等號 =」,會將等號右邊的結果 ( 值 ),指定 ( 賦予 ) 給等號左邊的變數,下方的程式分別賦予 a、b、c 三個變數字串、數字和串列三種內容。
a = 'hello'
b = 123
c = [1,2,3]
算術運算子
「算術運算子」就是常見的「加減乘除」符號,針對數字進行數學式的運算 ( 如果要使用更多數學式,則需要 import math 模組 )。
比較需要注意的是,左邊的變數是右邊運算後的結果,和一般的數學式不太相同。
運算子 | 說明 | 範例 | 結果 |
---|---|---|---|
+ | 加法 | a = 1+2 | a = 3 |
- | 減法 | a = 20-12 | a = 8 |
* | 乘法 | a = 2*3 | a = 6 |
/ | 除法 | a = 9/2 | a = 4.5 |
// | 除法取整數 ( 無條件捨去 ) | a = 9//2 | a = 4 |
% | 餘數 | a = 9%2 | a = 1 |
** | 次方 | a = 2**3 | a = 8 |
使用算術運算子進行計算時,按照「先乘除後加減」的規則,並優先計算小括號刮起來的運算式。
a = 3*(3+2)
print(a) # 15
算術運算子和賦值往往搭配一起使用,進行變數的遞增或遞減效果。
a = 1 # a 賦值 1
a = a + 1 # a 賦值 1 + 1 ( 此時右邊的 a 等於 1 )
print(a) # 2
b = 5 # b 賦值 5
b = b - 1 # b 賦值 5 - 1 ( 此時右邊的 b 等於 5 )
print(b) # 4
如果需要「開根號」,可以使用「**0.5
」來實現。
print(4**0.5) # 2.0
除了單純的運算,也可以將算術運算子和賦值運算子組合,變成復合型態的運算子。
運算子 | 範例 | 等同於 |
---|---|---|
+= | a += 1 | a = a + 1 |
-= | a -= 1 | a = a - 1 |
*= | a *= 2 | a = a * 2 |
/= | a /= 2 | a = a / 2 |
//= | a //= 3 | a = a // 3 |
%= | a %= 3 | a = a % 3 |
**= | a **= 2 | a = a ** 2 |
比較運算子
「比較運算子」是用來比較「兩個值大小」的運算子,運算的結果只有 True 或是 False 兩種,常用於邏輯判斷使用。
注意,因為單一個等號「=」是「賦值運算子」,所以如果要進行相等的比較,必須使用兩個等號「==」。
運算子 | 說明 | 範例 |
---|---|---|
> | 大於 ( a 是否大於 b ) | a > b |
< | 小於 ( a 是否小於 b ) | a < b |
>= | 大於等於 ( a 是否大於等於 b ) | a >= b |
<= | 小於等於 ( a 是否小於等於 b ) | a <= b |
== | 等於 ( a 是否等於 b ) | a == b |
!= | 不等於 ( a 是否不等於 b ) | a != b |
a = 5
b = 3
print(a < b) # False
print(b <= a) # True
print(a != b) # True
print(a == b) # False
邏輯運算子
「比較運算子」可以判斷「and」( 且 )、「or」( 或 ) 和「not」( 非 ) 三種邏輯狀態,運算的結果只有 True 或是 False 兩種。
比較運算子可以使用 & 代替 and,| 代替 or。
and
當 a 是 True,b 也是 True,結果是 True,但只要 a、b 其中一個是 False,結果就是 False。
a = True b = False c = True print(a & b) # False print(a and b) # False print(a & c) # True print(a and c) # True
or
只要 a、b 其中一個是 True,結果就是 True。
a = True b = False c = True print(a | b) # True print(a or b) # True print(a | c) # True print(a or c) # True
not
如果 a 為 True,not a 的結果 False,如果 a 為 False,not a 的結果 True。
a = True b = False print(not a) # False print(not b) # True
邏輯運算子可以結合比較運算子,做出更複雜的邏輯判斷。
a = 1
b = 2
c = 3
print((a>b)&(c>b)) # False
print((a>b)|(c>b)) # True
print(not ((a>b)&(c>b))) # True ( 因為 (a>b)&(c>b) 為 False )
in 與 is 運算子
如果有 a 和 b 兩個變數,使用「in 運算子」可以判斷 b 是否包含 a,使用「is 運算子」可以判斷 a 和 b 是否為相同物件,如果判斷包含或相同,回傳 True,否則回傳 False。
a = 2
b = 4
c = [1,2,3]
print(a in c) # True
print(b in c) # False
x = [1,2,3]
y = [1,2,3]
z = x
print(x is y) # False
print(x is z) # True
位元運算子
在程式語言的底層,所有數值都是以二進位表現 ( 0 和 1 ),「位元運算子」會針對每個數值的「二進位」字元進行位元運算,下面的表格使用 4 ( 二進位 0100 ) 和 5 ( 二進位 0101 ) 為例子。
運算子 | 說明 | 範例 | 結果 |
---|---|---|---|
& | 位元 且,二進位數字「完全相同」的部分,不同的部分以 0 取代。 | 4&5,使用 0100 和 0101 比較後,回傳 0100 | 4 |
| | 位元 或,二進位數字「只要有一個為 1 」的部分都為 1。 | 4&5,使用 0100 和 0101 比較後,回傳 0101 | 5 |
^ | 位元 互斥,二進位數字「完全相同」的部分都為 0,不同的部分以 1 取代。 | 4^5,使用 0100 和 0101 比較後,回傳 0001 | 1 |
~ | 位元 相反,二進位數字 0 變成 1,1 變成 0 | ~4,0100 相反為 1011 | -5 |
>> | 位元 右移,將二進位數字往右移動指定位數,左側補 0 | 4>>2,0100 往右移動兩位 0001 | 1 |
<< | 位元 左移,將二進位數字往左移動指定位數,右側補 0 | 5<<2,0101 往左移動兩位 10100 | 20 |
print(4&5) # 4
print(4|5) # 5
print(4^5) # 1
print(~4) # -5
print(4>>2) # 1
print(5<<2) # 20
跨列運算子
如果有遇到「算式過長,需要換行」的程式碼或運算式,除了使用小括號包覆使其換行計算,也能使用「反斜線 \」放在一列的最後方,就可以將程式碼進行換列,注意,使用跨列運算子後不得加上空格或其它字元,下方的例子執行後,a 和 b 的結果會是相同的。
a = ( 1 + 2 + 3 +
4 + 5 + 6 +
7 + 8 + 9 )
b = 1 + 2 + 3 + \
4 + 5 + 6 + \
7 + 8 + 9
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~