iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Software Development

跟著 OXXO 一起學 Python系列 第 10

( Day 6.2 ) Python 運算子 operator

  • 分享至 

  • xImage
  •  

在程式語言裡,如果要進行「運算式」的計算,就必須要使用「運算元 Operand」和「運算子 Operator」相搭配,運算元表示的是需要計算的數值,運算子代表特定運算功能的符號,例如 3+4 裡的 3 和 4 是運算元,+ 號則是運算子,整串算式就是運算式,這篇教學會介紹 Python 裡有哪些運算子。

原文參考:運算子 operator

本篇使用的 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。

    Python 教學 - 運算子 - 邏輯運算子 - and

    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。

    Python 教學 - 運算子 - 邏輯運算子 - or

    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。

    Python 教學 - 運算子 - 邏輯運算子 - not

    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) 為 True )

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

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 6.1 ) Python 數字 number
下一篇
( Day 6.3 ) Python 內建函式 ( 數學計算 )
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言