Python 運算子

Python

Python「運算子」除了和其它程式語言一樣有數學運算的「算術運算子」、將值指定給變數的「指定運算子」、比較數值字母大小的「比較運算子」、Boolean 運算的「邏輯運算子」和對「二進位」進行低階的位元操作,另外還有判斷「元素」是否為序列成員的 in、ont in「成員運算子」與判斷兩個「識別符」是否引用同一個物件的 is、is not 「身份運算子」。

「運算式」(Expression) 的組成,為一個「運算子」(Operator) 結合「運算元」(Operand),例如 1 + 2 這個「運算式」:

  • + 為「運算子」。
  • 1、2 為「運算元」。

算術運算子

提供數學 +-*/ 運算,例如 1 + 2

Python 算術運算子表
運算子 說明 變數 運算 結果
a b
+ 3 2 a + b 5
- 減法 a - b 1
* 乘法 a * b 6
/ 除法 9.0 2.0 a / b 4.5
// 除法 (向下取整數) a // b 4.0
% 取餘數 9 5 a % b 4
** 次方 2 4 a ** b 16

範例程式:

print('3 + 2        = {}'.format(3 + 2))
'''
3 + 2        = 5
'''
 
print('3 - 2        = {}'.format(3 - 2))
'''
3 - 2        = 1
'''
 
print('3 * 2        = {}'.format(3 * 2))
'''
3 * 2        = 6
'''
 
print('9.0 / 2.0    = {}'.format(9.0 / 2.0))
'''
9.0 / 2.0    = 4.5
'''
 
print('9.0 // 2.0   = {}'.format(9.0 // 2.0))
'''
9.0 // 2.0   = 4.0
'''
 
print('9 % 5        = {}'.format(9 % 5))
'''
9 % 5        = 4
'''
 
print('2 ** 4       = {}'.format(2 ** 4))
'''
2 ** 4       = 16
'''

指定運算子

使用 = 來將值指定給變數,例如 a = 1 + 2,還可以結合「算術運算子」。

Python 指定運算子
運算子 例子 說明
= a = b + c b + c 的運算結果給 a
+= a += b 等同 a = a + b
-= a -= b 等同 a = a - b
*= a *= b 等同 a = a * b
/= a /= b 等同 a = a / b
%= a %= b 等同 a = a % b
**= a **= b 等同 a = a ** b
//= a //= b 等同 a = a // a

範例程式:

b = 5
c = 10
 
a = b + c
print('a = b + c    a 值為 {}'.format(a))
'''
a = b + c       a 的值為 15
'''

比較運算子

用來比較兩個「運算元」的數值或字母大小。

Python 比較運算子
運算子 說明 運算
a = 5, b = 20
結果
== 相等 a == b False
!= 不相等 a != b True
> 大於 a > b False
>= 大於等於 a >= b False
< 小於 a < b True
<= 小於等於 a <= b True

範例程式:

a = 5
b = 10

print('a == b   {}'.format(a == b))
print('a != b   {}'.format(a != b))
print('a >  b   {}'.format(a > b))
print('a >= b   {}'.format(a >= b))
print('a <  b   {}'.format(a < b))
print('a <= b   {}'.format(a <= b))
'''
a == b   False
a != b   True
a >  b   False
a >= b   False
a <  b   True
a <= b   True
'''

邏輯運算子

用來執行「布林值」(Boolean) TrueFalse 的運算。

Python 邏輯運算子
運算子 表達式 說明
and a and b a、b 都為 True,結果才為 True
or a or b a、b 只要有一個為 True,結果就為 True
not not b 反向,b 如果為 False,結果就為 True

範例程式:

a = 1
b = 5
boo = False

print('b > a and b > a  : {}'.format(b > a and b > a))
print('a > b and b > a  : {}'.format(a > b and b > a))
'''
b > a and b > a  : True
a > b and b > a  : False
'''

print('b > a or a > b   : {}'.format(b > a or b > a))
print('b > a or b > a   : {}'.format(b > a or b > a))
print('a > b or a > b   : {}'.format(a > b or a > b))
'''
b > a or a > b   : True
b > a or b > a   : True
a > b or a > b   : False
'''

print('not boo          : {}'.format(not boo))
'''
not boo          : True
'''

位元運算子

用來對「二進位」進行低階 (接近電腦,對人類較不易解讀) 的位元操作。

Python 位元運算子
運算子 運算元數 說明 運算
a = 1001
b = 1100
結果
& 2 兩個「運算元」的位元都為 1 時,結果為 1 a & b
1001
1100
----
1000
| 2 兩個「運算元」其中一個位元為 1 時,結果為 1 a | b
1001
1100
----
1101
^ 2 兩個「運算元」的位元不同時,結果為 1 a ^ b
1001
1100
----
 101
~ 1 將「運算元」進行「二補數」運算 ~a
01001
-----
11010
<< 2 將左側「運算元」依右側設定的數量向左移 (「最低有效位」補 0) a << 2
  1001
------
100100
>> 2 將左側「運算元」依右側設定的數量向右移 (「最高有效位」正值補 0、負值補 1,最低有效位丟棄) a >> 2
1001
----
  10

範例程式:

a = 0b1001
b = 0b1100

print('a        = {}'.format(bin(a)))
print('b        = {}'.format(bin(b)), end = '\n--------------------\n')

print('a & b    = {}'.format(bin(a & b)))
print('a | b    = {}'.format(bin(a | b)))
print('a ^ b    = {}'.format(bin(a ^ b)), end = '\n\n')
'''
a        = 0b1001
b        = 0b1100
--------------------
a & b    = 0b1000
a | b    = 0b1101
a ^ b    = 0b 101
'''

print('a        = {}'.format(bin(a)), end = '\n--------------------\n')

print('~a       = {}'.format(bin(~a)))
print('a << 2   = {}'.format(bin(a << 2)))
print('a >> 2   = {}'.format(bin(a >> 2)))
'''
a        =  0b1001
--------------------
~a       = -0b1010
a << 2   =  0b100100
a >> 2   =  0b10
'''

二進位

表示方式

Python 使用 0b 前綴 (prefix) 來表示這是「二進位」。

正、負數

「二進位」有正、負數稱為「有符號數」,表示將「最高有效位」用來表示正、負數:

  • 0 正數:Python 省略最左邊的 0,例如 0b1001 實際上是 01001
  • 1 負數:Python 使用符號 - 表示負數,例如 -0b1010 實際上是 11010

補數

補數有兩種:

  • 一補數 (ones’ complement):將原二進位「反相運算」(0 變 1;1 變 0),例如 1001 → 0110。
  • 二補數 (2’s complement):「一補數」後再 + 1,例如 1001 → 0110 → 0111。

電腦所存放的是「二補數」,因此程式語言的補數一般也是使用「二補數」,它最大的優點是加、減法處理中,不用因正、負數值而使用不同的計算方式。

正數 to 負數運算

  1. 原二進位反轉 (「最高有效位」1 表示負數)。
  2. 再反轉,但「最高有效位」不變。
  3. 結果 + 1。

負數 to 正數運算

  1. 原二進位反轉 (「最高有效位」0 表示正數)。
  2. 結果 + 1。
  3. 再反轉,但「最高有效位」不變。

in、not in 成員運算子

用來判斷「元素」是否為序列 (String、List 或 Tuple) 的成員:

  • in:是序列成員返回 True,否則返回 False
  • not in:與上述 in 相反。

範例程式:

a = 'A'
b = 2
list = [1, 2, 3]

print('a in list        : {}'.format(a in list))
print('b in list        : {}'.format(b in list))
'''
False
True
'''

print('a not in list    : {}'.format(a not in list))
print('b not in list    : {}'.format(b not in list))
'''
True
False
'''

is、is not 身份運算子

用來判斷兩個「識別符」是否引用同一個物件:

  • is:引用自同一個物件返回 True,否則返回 False
  • is not:與上述 is 相反。

範例程式:

a = 2
b = 2

print('id(a)        : {}'.format(id(a)))
print('id(b)        : {}'.format(id(b)))
print('a is b       : {}'.format(a is b))
print('a is not b   : {}'.format(a is not b))
'''
id(a)        : 18528436
id(b)        : 18528436
a is b       : True
a is not b   : False
'''

b = 3

print('id(a)        : {}'.format(id(a)))
print('id(b)        : {}'.format(id(b)))
print('a is b       : {}'.format(a is b))
print('a is not b   : {}'.format(a is not b))
'''
id(a)        : 18528436
id(b)        : 18528424
a is b       : False
a is not b   : True
'''

參考

發表留言