字串中的特殊字元必須使用逸出字元
使用 '''起始與結束的內容會保留原來格式
content = 'Hello Pythonn中文字測試nWelcome'
content2 = '''Hello Python
中文字測試
Welcome'''
常值(Literal) 5/5
11
脫逸字元 說明 脫逸字元 說明
' 單引號字元 " 雙引號
反斜線字元 n 換行
r 游標移至列首 t Tab鍵
v 垂直定位 a 響鈴
b 後退鍵 f 換頁
x 16進位字元碼 o 8進位字元碼
保留字又稱關鍵字 (Keyword),是 Python 語言具特定用途的識別字
Python3.x 定義的保留字:
and as assert async await break
class continue def del elif else
except False finally for from global
if import in is lambda None
nonlocal not or pass raise True
return try while with yield
保留字
13
變數 (Variable) 是隨時可以改變內容的容器名稱,使用變數可以使程
式更靈活處理資料
程式中可以直接選擇未使用且不是Python保留字的名稱來建立變數,
並指定變數值。語法如下:
變數 = 變數值
a = 3
變數1, 變數2 [, 變數3…] = 變數值1, 變數值2 [,變數值3…]
a, b = 3, 5
變數1 [= 變數2 = 變數3…] = 變數值
a = b = 10
Python 程式是採用動態型別,程式在直譯時才會根據變數值,宣告成
適當的資料型別
變數宣告 1/3
14
在 Python 語言中,int、float、string... 等資料型別是屬於不可變物件,
變數值是不會改變
變數值改變時,實際上是建立⼀個新物件,再將變數值存入新物件中
在 C 程式語言中要交換兩個變數值時,做法如下
temp = x;
x = y;
y = temp;
但是在 Python 中,只要寫 x, y = y, x 就可以達成,因為是直接
將兩變數的記憶體位址交換
指定運算子 2/3
28
x = 5 #指定x變數值為常值5
y = x #指定y變數值為變數x的值
print(id(x), id(y)) #顯示x與y位址,會發現變數x與y共用同⼀物件
x = 3 + y #指定x變數值為運算式3+y的結果
print(id(x), id(y)) #顯示x與y位址,會發現變數x的位址已變更
a, b = 2, 3
print(id(a), id(b)) #顯示變數a,b位址
a, b = b, a #a,b變數值交換
print(id(a), id(b)) #顯示變數a,b位址,會發現a,b的位址已互換
指定運算子 3/3
29
算術運算子用來執行數學運算,包括加法、減法、乘法、除法、取餘
數等
算術運算子 1/2
運算子 說明 範例 執行結果(假設y值為3)
+ 將兩數字相加 x = y + 2 x變數值為5
- 將兩數字相減 x = y - 2 x變數值為1
* 將兩數字相乘 x = y * 2 x變數值為6
/ 浮點數除法運算 x = y / 2 x變數值為1.5
// 取除法之商數 x = y // 2 x變數值為1
% 取除法之餘數 x = y % 2 x變數值為1
** 指數 x = y ** 2 x變數值為9
30
r = 6.4
PI = 3.14159
print("圓的半徑:", r)
print("圓面積:", PI * r ** 2)
print("圓周⻑:", 2 * PI * r)
print("球的體積:", 4 / 3 * PI * r ** 3)
註:指數運算**優先權高於算術運算
算術運算子 2/2
31
若要將變數值運算後,再將運算結果指定給該變數時,可以利用複合
指定運算子來簡化敘述
x = x + 5 可用複合指定運算子改為 x += 5
複合指定運算子
運算子 說明 範例 執行結果(假設x值為3)
+= 相加後再指定 x += 2 x變數值為5
-= 相減後再指定 x -= 2 x變數值為1
*= 相乘後再指定 x *= 2 x變數值為6
/= 相除法後再指定 x /= 2 x變數值為1.5
//= 取除法之商數後再指定 x //= 2 x變數值為1
%= 取除法之餘數後再指定 x %= 2 x變數值為1
**= 指數運算後再指定 x **= 2 x變數值為9
32
關係運算子又稱為比較運算子,可對兩個運算元作比較,並傳回比較
結果。若結果成立,傳回值為 True;不成立傳回值為 False
相同型別物件才可以比較大小
'a' > 0 #會產生 TypeError
關係運算子常配合選擇結構,來決定程式流向
關係運算子 1/2
運算子 說明 範例 執行結果(假設x=1, y=3)
== 等於 x == y False
!= 不等於 x != y True
> 大於 x > y False
< 小於 x < y True
>= 大於或等於 x >= y False
<= 小於或等於 x <= y True
33
a, b = 2, 3
print('a =', a, ',b =', b) #a = 2 ,b = 3
print('a < b結果為', a < b) #a < b結果為 True
print('a >= b結果為', a >= b) #a >= b結果為 False
print('a == b結果為', a == b) #a == b結果為 False
print('0' == 0) #False
print('0' != 0) #True
print('0' == 48) #False,Python無字元型別,'0'為字串資料
print('0' >= 0) #
print('0' < '1') #False
關係運算子 2/2
34
TypeError: '>=' not supported between instances of 'str' and 'int'
邏輯運算子可以對兩個運算元作邏輯運算,並傳回運算結果
not 運算的回傳值為布林值,但 and 與 or 運算的回傳值不⼀定是布林
值
邏輯運算子 1/3
A B A and B A or B not A not B
False False False False True True
False True False True True False
True False False True False True
True True True True False False
35
Python 語言在做邏輯運算時,會採取快捷運算 (short circuit),來加
快執行速度
and 運算時,如果第⼀個運算元為 False,就直接回傳第⼀個運算元,
而不會再處理第二個運算元
or 運算時,如果第⼀個運算元為 True,就直接回傳第⼀個運算元,而
不會再處理第二個運算元
邏輯運算子 2/3
運算子 語法 執行結果 說明
and A and B 當A為False時回傳A;否則回傳B 只有A為True時,B才會被執行
or A or B 當A為True時回傳A;否則回傳B 只有A為False時,B才會被執行
not not A 當A為True時回傳False;否則回傳True
not之優先序比非邏輯運算低
not A==B執行順序為not(A==B)
36
邏輯運算子可用來測試較複雜的條件,常常用來連結多個關係運算子,
在if選擇結構中決定程式的流向
例如 (score >= 0) and (score <= 100),其中 (score >= 0) 和 (score <=
100) 為關係運算子,兩者用 and(且) 邏輯運算子連接,表示兩個條件
都要成立才為真,所以上述表示 score 要介於 0~100
print((1 < 2) and ('A' == 'a')) #False
print((-1 < 0) or (-1 > 100)) #True
print(not('A' != 'a')) #False
print(not 2) #False
print(2 and 3) #3 (回傳第2個運算元)
print(2 or 3) #2 (回傳第1個運算元)
print('a' or 'b') #a (回傳第1個運算元)
print(0 and 3) #0 (回傳第1個運算元)
print('' or 'b') #b (回傳第1個運算元)
邏輯運算子 3/3
37
位元運算會先將運算元轉換成二進位,再做指定的二進位布林運算
& 兩個運算元同時為 1 時,結果才為 1
| 兩個運算元中只要有⼀個為 1 時,結果就為 1
^ 兩個運算元不相同時,結果才為 1
~ 若運算元為 0,結果為 1;若運算元為 1,結果為 0
位元運算子 1/2
x y x & y x | y x ^ y ~x
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0
38
若a = 0b1001,b = 0b1100
a = 0b1001; b = 0b1100
print('a =', bin(a)) #a = 0b1001
print('b =', bin(b)) #b = 0b1100
print('a & b = ', bin(a & b)) #a & b = 0b1000
print('a | b = ', bin(a | b)) #a | b = 0b1101
print('a ^ b = ', bin(a ^ b)) #a ^ b = 0b101
print('~a = ', ~a) #~a = -10
運算子 說明 實例 運算結果
& 兩個運算元的位元都為 1 時,結果為 1 a & b 0b1000
| 兩個運算元其中一個位元為 1 時,結果為 1 a | b 0b1101
^ 兩個運算元的位元不同時,結果為 1 a ^ b 0b101
~ 將運算元進行1的補數運算 ~a -10
位元運算子 2/2
39
in 稱為成員運算子 (Membership operator)
in 用來判斷第⼀個運算元是否為第二個運算元的元素,若是就回傳
True;否則回傳 False。
not in 運算子用來判斷第⼀個運算元是否不屬於第二個運算元的元素
第二個運算元為字串、串列...等物件
print('P' in 'Python') #True
print('x' not in 'Python') #True
print(1 in [1, 2, 3]) #True
print(2 not in [1, 2, 3]) #False
註:[1, 2, 3]為串列資料,在後續單元介紹
in運算子
41
is 稱為身分運算子 (Identity operator)
is 用來判斷兩運算元的 id 是否相同,若是就回傳 True;否則回傳 False。
所以 x is y 敘述,就等於 id(x) == id(y) 敘述
not is 運算子用來判斷兩運算元的 id 是否不相同
要特別注意,is 運算子是用來判斷兩運算元是否引用自同⼀個物件,而
== 運算子則是判斷兩運算元的值是否相同
x = 2.5; y = 2.5
print(id(x), id(y)) #2081398578096 2081399329328 (隨執行環境變動)
print(x is y, x == y) #False True
z = x
print(id(z)) #2081398578096
print(z is x, z == x) #True True
is運算子
42
運算式可能非常複雜,所有程式語言都會根據運算子的優先序
(precedence) 與結合性 (associativity) 來決定先進行那⼀個運算。例如:
y = b * 2 + 3;
「*」乘法運算子優先序大於「+」加法運算子及「=」指定運算子,所以會
先計算 b * 2 的值
「+」加法運算子優先序大於「=」指定運算子,所以計算 b * 2 + 3 之後的
值才會指定給 y
當運算子擁有相同優先序時,運算子的執行順序則由結合性決定
右結合 (right-to-left associativity):運算式是從右到左執行運算子的運算
x = y = 3;
先執行 y = 3,之後再執行 x = y
運算子的優先序與結合性 1/5
43
左結合 (left-to-right associativity):運算式是從左到右執行運算子的運算
a = b – c - 4;
先計算 b - c,再將 b – c 的結果減 4,最後才將結果指定給變數 a
撰寫複雜的運算式時,最好使用括弧來明確指定運算式的優先序
運算子的優先順序與結合性 2/5
44
x = 2 << 1 + 2
x = 2 << 3
x = 16
x = (2 << 1) + 2
x = 4 + 2
x = 6
x = 1 + 4 * 3 / 2 % 5
x = 1 + 12 / 2 % 5
x = 1 + 6 % 5
x = 1 + 1
x = 2
運算子的優先順序與結合性 4/5
46
x, y = 2, 3
x >= y and x != y or x * 2 > y
2 >= 3 and 2 != 3 or 4 > 3
False and 2 != 3 or 4 > 3
False and True or 4 > 3
False and True or True
False or True
True
運算子的優先順序與結合性 5/5
47