Python 入門指南 5.0

單元 5 - 運算式與陳述

~~學習進度表~~

運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成

op1 operator op2

單一運算元就構成一個運算式,運算元可以是變數 (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)

運算子功能範例
anda and b
ora or b
notnot a

not 也是單元運算子, andor 則需要兩個運算元

 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. 邏輯運算子與相等性及關係運算子的運算結果為 TrueFalse
4. 算術運算子用於整數與浮點數,其中加號與乘號(星號)也可用於字串連接與複製。
5. 指派運算子除了單一個等號外,還可以跟算術運算子結合,用為計算後直接指派。
6. 運算子有各自的計算優先次序,小括弧的計算優先次序最高,因此會先得到小括弧內的計算結果。
問題與討論
1. 邏輯運算子可以運用在整數、浮點數或字串嗎?
2. 字串為什麼可以用加法跟乘法?那也可以用減法或除法嗎?
3. 為什麼測試兩個變數相等的運算子為連續兩個等號?
4. 為什麼計算的優先次序很重要?
練習
1. 寫一個程式 exercise0501.py ,建立兩個變數 aba 設定為 2b 設定為 8 ,利用 +-%/% 計算出兩者加、減、乘、除、取餘數的結果。 參考程式碼
2. 承上題,另寫一個程式 exercise0502.py ,利用內建函數 input() 取得使用者輸入的字串,並用 int() 轉換為整數,將取得的整數指派給 ab 後,然後再計算出結果。 參考程式碼
3. 寫一個程式 exercise0503.py ,建立字串變數 a 並設定為 "*" ,然後印出 aa + aa + a + aa + a + a + aa + a + a + a + a參考程式碼
4. 承上題,另寫一個程式 exercise0504.py ,建立字串變數 a 並設定為 "*" ,然後印出 aa * 2a * 3a * 4a * 5參考程式碼
5. 寫一個程式 exercise0505.py ,建立兩個變數 ab ,兩個變數都設定為 2.0 ,然後印出 a > ba >= ba < ba <= ba == ba != b參考程式碼
6. 承上題,另寫一個程式 exercise0506.py ,兩個變數改成接收使用者輸入。 參考程式碼
7. 寫一個程式 exercise0507.py ,建立變數 a 並設定為 10 ,然後印出 a += 10a -= 10a *= 10a /= 10a %= 10 的結果。 參考程式碼
8. 寫一個程式 exercise0508.py ,先用平行指派建立變數 abcd ,並分別設定為 1234 ,然後用平行指派將四個變數分別重新取得 b+2c-2d*2a/2 的結果,最後義春四個變數的值。 參考程式碼
9. 寫一個程式 exercise0509.py ,建立兩個變數 ab ,兩個變數分別設定為 1033 ,然後建立變數 result 取得 a * 3 + b 的計算結果,最後印出 result 值。 參考程式碼
10. 承上題,另寫一個程式 exercise0510.py ,將 3 + b 加上小括弧,觀察最後印出 result 的值是否有變化。 參考程式碼

上一頁 單元 4 - 變數命名規則與縮排
回 Python 入門指南 5.0 首頁
下一頁 單元 6 - 選擇
回 Python 教材首頁
回程式語言教材首頁