Python 入門指南 5.0
單元 5 - 運算式與陳述
運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成
單一運算元就構成一個運算式,運算元可以是變數 (variable) 、字面常數 (literal) 或呼叫 (call) 函數 (function) ,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 設定變數 a
a = 3
# 以變數當運算元
a
# 以字面常數當運算元
3
# 呼叫函數當運算元
print("end")
# 檔名: expression_demo01.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo01.py |
end |
$ |
運算式,顧名思義,其為運算出一個結果的式子,因此單一運算元的運算式所得到的結果就是運算元的值,如果是函數呼叫,就是函數的回傳值 (return value) 囉!
單一運算元也可以結合單元運算子,單元運算子有
運算子 | 功能 | 範例 |
---|---|---|
+ | 正 | +a |
- | 負 | -a |
正負如同一般數學表示正負值一樣,同樣的,負負會得正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 設定變數 a
a = -3
# 印出變數 a
print(a)
# b 會等於 -3
b = +a
# 印出變數 b
print(b)
# c 會等於 3
c = -a
# 印出變數 c
print(c)
# 檔名: expression_demo02.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo02.py |
-3 |
-3 |
3 |
$ |
一般運算子都須結合兩個運算元,像是關鍵字 (keyword) 中有邏輯運算子 (logical operator)
運算子 | 功能 | 範例 |
---|---|---|
and | 且 | a and b |
or | 或 | a or b |
not | 非 | not a |
not 也是單元運算子, and 與 or 則需要兩個運算元
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 設定變數 a 為 True
a = True
# 設定變數 b 為 False
b = False
c = a and b # c 會等於 False
# 印出變數 c
print(c)
d = a or b # d 會等於 True
# 印出變數 d
print(d)
e = not b # e 會等於 True
# 印出變數 e
print(e)
# 檔名: expression_demo03.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo03.py |
False |
True |
True |
$ |
算術運算子 (arithmetic operator) 可用在整數 (integer) 及浮點數 (floating-point number) ,計算結果也為整數或浮點數
運算子 | 功能 | 範例 |
---|---|---|
+ | 加 | a + b |
- | 減 | a - b |
* | 乘 | a * b |
/ | 除 | a / b |
% | 取餘數 | a % b |
** | 指數 | a ** b |
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | a = 2
# 印出變數 a
print(a)
b = a + 2 # b 會等於 4
# 印出變數 b
print(b)
c = b - 2 # c 會等於 2
# 印出變數 c
print(c)
d = c * 2 # d 會等於 4
# 印出變數 d
print(d)
e = d / 2 # e 會等於 2.0
# 印出變數 e
print(e)
f = e % 2 # f 會等於 0.0
# 印出變數 f
print(f)
g = f ** 2 # g 會等於 0.0
# 印出變數 g
print(g)
# 檔名: expression_demo04.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo04.py |
2 |
4 |
2 |
4 |
2.0 |
0.0 |
0.0 |
$ |
+ 與 * 也可用於字串 (string) , + 用於字串相接, * 用於複製字串,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 設定變數 a
a = "a"
# 印出變數 a
print(a)
# 設定變數 b
b = a + "b" # 字串連接, b 會等於 "ab"
# 印出變數 b
print(b)
# 設定變數 c
c = a * 3 # 字串重複三倍, c 會等於 "aaa"
# 印出變數 c
print(c)
# 檔名: expression_demo05.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo05.py |
a |
ab |
aaa |
$ |
相等性及關係運算子 (equality and relational operator) 的結果得到布林值 (Boolean) ,不是 True 就是 False
運算子 | 功能 | 範例 |
---|---|---|
== | 相等 | a == b |
!= | 不相等 | a != b |
> | 大於 | a > b |
>= | 大於等於 | a >= b |
< | 小於 | a < b |
<= | 小於等於 | a <= b |
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # 設定變數 a
a = 11
# 印出變數 a
print(a)
# 設定變數 b
b = 22
# 印出變數 b
print(b)
# 設定變數 c
c = a >= b # c 會等於 False
# 印出變數 c
print(c)
# 設定變數 d
d = a <= b # d 會等於 True
# 印出變數 d
print(d)
# 設定變數 e
e = c == d # e 會等於 False
# 印出變數 e
print(e)
# 設定變數 f
f = a != b # f 會等於 True
# 印出變數 f
print(f)
# 檔名: expression_demo06.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo06.py |
11 |
22 |
False |
True |
False |
True |
$ |
我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的值連結到左邊的變數
運算子 | 功能 | 範例 |
---|---|---|
= | 指派 | a = b |
+= | 相加同時指派 | a += b |
-= | 相減同時指派 | a -= b |
*= | 相乘同時指派 | a *= b |
/= | 相除同時指派 | a /= b |
%= | 取餘數同時指派 | a %= b |
**= | 取指數同時指派 | a **= b |
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # 設定變數 a
a = 1
# 印出變數 a
print(a)
a += 1 # a 會等於 2
# 印出變數 a
print(a)
a -= 1 # a 會等於 1
# 印出變數 a
print(a)
a *= 1 # a 會等於 1
# 印出變數 a
print(a)
a /= 1 # a 會等於 1.0
# 印出變數 a
print(a)
a %= 1 # a 會等於 0.0
# 印出變數 a
print(a)
a **= 1 # a 會等於 0.0
# 印出變數 a
print(a)
# 檔名: expression_demo07.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
執行結果如下
$ python epression_demo07.py |
1 |
2 |
1 |
1 |
1.0 |
0.0 |
0.0 |
$ |
也可以用平行指派 (parallel assignment)
1 2 3 4 5 6 7 8 9 10 11 | # 同時設定變數 a, b, c
a, b, c = 11, 22, 33
# a 會等於 11
# b 會等於 22
# c 會等於 33
# 檔名: expression_demo08.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月
|
有沒有看的眼花撩亂?居然有 f = a != b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 a != b 會先被計算,結果才會指派到 f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,先把要先被計算的運算式圍起來,例如
| f = (a != b) # 等於 f = a != b
|
這是因為小括弧有最高的優先計算次序。
基本上單一行的運算式就是程式 (program) 中獨立的陳述 (statement) ,通常一行程式碼只會放一個陳述。 Python 程式的執行單位就是陳述,由前而後,一個陳述接著一個陳述來執行。
然而許多控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來討論控制結構中的選擇結構!
中英文術語對照 | |
---|---|
布林值 | Boolean |
算術運算子 | arithmetic operator |
指派運算子 | assignment operator |
呼叫 | call |
複合陳述 | compound statement |
控制結構 | control structure |
相等性及關係運算子 | equality and relational operator |
運算式 | expression |
浮點數 | floating-point number |
函數 | function |
關鍵字 | keyword |
整數 | integer |
字面常數 | literal |
邏輯運算子 | logical operator |
平行指派 | parallel assignment |
運算元 | operand |
運算子 | operator |
計算的優先次序 | precedence |
程式 | program |
回傳值 | return value |
陳述 | statement |
字串 | string |
變數 | variable |
重點整理 |
---|
1. 運算式由運算元與運算子所組成,單一運算元就可構成運算式,其餘單元運算子結合單一運算元,或是兩個運算元結合一個運算子。 |
2. 運算子依種類分有邏輯運算子、算術運算子、相等性及關係運算子、指派運算子等。 |
3. 邏輯運算子與相等性及關係運算子的運算結果為 True 或 False 。 |
4. 算術運算子用於整數與浮點數,其中加號與乘號(星號)也可用於字串連接與複製。 |
5. 指派運算子除了單一個等號外,還可以跟算術運算子結合,用為計算後直接指派。 |
6. 運算子有各自的計算優先次序,小括弧的計算優先次序最高,因此會先得到小括弧內的計算結果。 |
問題與討論 |
---|
1. 邏輯運算子可以運用在整數、浮點數或字串嗎? |
2. 字串為什麼可以用加法跟乘法?那也可以用減法或除法嗎? |
3. 為什麼測試兩個變數相等的運算子為連續兩個等號? |
4. 為什麼計算的優先次序很重要? |
練習 |
---|
1. 寫一個程式 exercise0501.py ,建立兩個變數 a 及 b , a 設定為 2 , b 設定為 8 ,利用 + 、 - 、 % 、 / 、 % 計算出兩者加、減、乘、除、取餘數的結果。 參考程式碼 |
2. 承上題,另寫一個程式 exercise0502.py ,利用內建函數 input() 取得使用者輸入的字串,並用 int() 轉換為整數,將取得的整數指派給 a 及 b 後,然後再計算出結果。 參考程式碼 |
3. 寫一個程式 exercise0503.py ,建立字串變數 a 並設定為 "*" ,然後印出 a 、 a + a 、 a + a + a 、 a + a + a + a 、 a + a + a + a + a 。 參考程式碼 |
4. 承上題,另寫一個程式 exercise0504.py ,建立字串變數 a 並設定為 "*" ,然後印出 a 、 a * 2 、 a * 3 、 a * 4 、 a * 5 。 參考程式碼 |
5. 寫一個程式 exercise0505.py ,建立兩個變數 a 與 b ,兩個變數都設定為 2.0 ,然後印出 a > b 、 a >= b 、 a < b 、 a <= b 、 a == b 、 a != b 。 參考程式碼 |
6. 承上題,另寫一個程式 exercise0506.py ,兩個變數改成接收使用者輸入。 參考程式碼 |
7. 寫一個程式 exercise0507.py ,建立變數 a 並設定為 10 ,然後印出 a += 10 、 a -= 10 、 a *= 10 、 a /= 10 、 a %= 10 的結果。 參考程式碼 |
8. 寫一個程式 exercise0508.py ,先用平行指派建立變數 a 、 b 、 c 、 d ,並分別設定為 1 、 2 、 3 、 4 ,然後用平行指派將四個變數分別重新取得 b+2 、 c-2 、 d*2 、 a/2 的結果,最後義春四個變數的值。 參考程式碼 |
9. 寫一個程式 exercise0509.py ,建立兩個變數 a 與 b ,兩個變數分別設定為 10 及 33 ,然後建立變數 result 取得 a * 3 + b 的計算結果,最後印出 result 值。 參考程式碼 |
10. 承上題,另寫一個程式 exercise0510.py ,將 3 + b 加上小括弧,觀察最後印出 result 的值是否有變化。 參考程式碼 |