運算式

運算子是對運算元執行某些運算並傳回結果的特殊符號。例如,5 + 6 是一個表達式,其中是一個運算符,它對數值左側運算元和右側運算元執行算術加法運算,並傳回兩個運算子的總和作為結果。

算術運算子 (Arithmetic Operator)

用於執行一般數學運算的運算子稱為「算術運算子」,算術運算子傳回結果的類型取決於運算元的類型,如下所示:

  1. 如果任一運算元是複數,則結果將轉換為複數;
  2. 如果任一運算元是浮點數,則結果將轉換為浮點數;
  3. 如果兩個運算元都是整數,則結果也是整數,不需要轉換。
運算子 說明 範例
+ 兩運算元相加 x, y = 5, 6
print(x + y) # 11
- 兩運算元相減 x, y = 5, 6
print(x - y) # -1
* 兩運算元相乘 x, y = 5, 6
print(x * y) # 30
/ 兩運算元相除 x, y = 6, 3
print(x / y) # 2.0
% 取得餘數 x, y =11, 3
print(x % y) # 2
// 取得整除的商數 x, y = 6, 5
print(x // y) # 1
** 運算元1的運算元2的次方 x, y = 2, 3
print(x ** y) # 8

注意: 「/」、「%」與「//」三個運算子與除法有關,第二個運算元不能為零,否則會出現「ZeroDivisionError」的錯誤。

賦值運算子 (Assignment Operators)

賦值運算子用於給變數賦值。下表列出了 Python 中的所有算術運算子:

運算子 說明 範例
= 等號,賦值給變數 x = 5;
+= 相加後再賦值給原變數 x = 5
x += 5
print(x) # 10
-= 相減後再賦值給原變數 x = 5
x -= 2
print(x) # 3
*= 相乘後再賦值給原變數 x = 2
x *= 3
print(x) # 6
/= 相除後再賦值給原變數 x = 6
x /= 3
print(x) # 2
//= 相除得到整除商數後再賦值給原變數 x = 6
x //= 5
print(x) # 1
%= 相除得到餘數後再賦值給原變數 x = 11
x %= 3
print(x) # 2
**= 做指數運算後再賦值給原變數 x = 10
x **= 3
print(x) # 1000

比較運算子 (Comparision Operators)

比較運算子是比較兩個運算元並傳回布林值 TrueFalse。下表列出了 Python 中的比較運算子。

運算子 說明 範例
> 如果左運算元大於右運算元,則為 True x, y = 5, 6
print(x > y) # False
< 如果左運算元小於右運算元,則為 True x, y = 5, 6
print(x < y) # True
== 如果運算元相等則為 True x, y = 5, 6
print(x == y) # False
!= 如果運算元不相等則為 True x, y = 5, 6
print(x != y) # True
>= 如果左運算元大於或等於右運算元,則為 True x, y = 5, 6
print(x >= y) # False
<= 如果左運算元大於或等於右運算元,則為 True x, y = 5, 6
print(x <= y) # True

邏輯運算子(Logical Operators)

邏輯運算子通常是結合多個比較運算式來綜合得到最終比較結果。

運算子 說明 範例
and 若兩者均為 True,則為 True x, y = 5, 6
print(x > 1 and y < 10) # True
or 如果至少有一個為 True,則為 True x, y = 5, 6
print(x > 6 or y < 10) # True
not 如果表達式計算結果為 False,則傳回 True,反之亦然 x = 5
print(not x > 1) # False

恆等運算子 (Identity Operators)

恆等運算子檢查兩個物件是否具有相同的 id 值。

運算子 說明 範例
is 若兩者物件值相同時,則為 True x, y = 5, 6
print(x is y) # Fasle
is not 若兩者物件值不相同時,則為 True x, y = 5, 6
print(x is not y) # True

成員運算子 (Membership Test Operators)

在 Python 中, innot in 是成員運算子,它們適用於測試是否在序列 (List、String、Tuple、Set、Dictionary) 中找到值或變數。

運算子 說明 範例
in 如果序列包含指定項,則傳回 True,否則傳回 False。 nums = [1,2,3,4,5]
print(1 in nums) # True
print(10 in nums) # False
print(‘str’ in ‘string’) # True
not in 如果序列不包含指定項,則傳回 True,否則傳回 False。 nums = [1,2,3,4,5]
print(1 not in nums) # False
print(10 not in nums) # True
print(‘str’ not in ‘string’) # False

位元運算子(Bitwise Operators)

位元運算子對二進位運算元執行運算。

運算子 說明 範例
& 如果兩個位元都是 1,則將每個位元設為 1,詳如下文程式解說。 x, y = 13, 11
print(x & y) # 9
| 如果兩個位元中有一位為 1,則將每個位元設為 1。 x, y = 13, 11
print(x | y) # 15
^ 如果兩個位元中只有一個為 1,則將每個位元設為 1。 x, y = 13, 11
print(x ^ y) # 6
~ 反轉所有位元,x 的按位取反結果為-(x+1)。 x = 5
print(~x) # -6
<< 透過從右側推入零來進行左移,並讓最左邊的位掉落。 x = 5
print(x<<2) # 20
>> 透過從左側推入最左邊位的副本來向右移動,並讓最右邊位脫落。 x = 13
print(x>>2) # 3

在實務上,常利用 & 來設計權限。

a = 0b1101  # 二进制表示,等于 13
b = 0b1011  # 二进制表示,等于 11

result = a & b  # 按位与
print(result) # 9
print(bin(result))  # 输出:0b1001
   1101  # a
&  1011  # b
--------
   1001  # result

實作練習

Lab 1:權限設計

id 姓名\功能 刪除(8) 更新(4) 新增(2) 檢視(1)
A01 Owen爸 V V V V
A02 林小宇 X V V V
A03 江士源 X X X V
A04 王聰明 V X X V

將上表轉成二進位如下

A01 = 0b1111 # 15
A02 = 0b0111 # 7
A03 = 0b0001 # 1
A04 = 0b1001 # 9

# 檢查誰有刪除權限
AA = [A01, A02, A03, A04]
for A in AA:
  if A & 8 > 0:
    print(A)

# 檢查林小宇是否有更新權限
if A02 & 4 > 0:
  print("yes")
else:
  print("no")

# 檢查江士源是否有刪除權限
if A03 & 8 > 0:
  print("yes")
else:
  print("no") 

隨堂測驗

留言