Python 入門指南

單元 5 - 運算式與陳述

本書已有新版,請參考 Python 入門指南 5.00 - 目錄

~~學習進度表~~

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

op1 operator op2

單一運算元就構成一個運算式,運算元可以是變數 (variable) 、字面常數 (literal) 或呼叫 (call) 函數 (function) ,例如

a       # 以變數當運算元
3       # 以字面常數當運算元
print() # 呼叫函數

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo01.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

運算式,顧名思義,其為運算出一個結果的式子,因此單一運算元的運算式所得到的結果就是運算元的值,如果是函數呼叫,就是函數回傳值 (return value) 囉!

單一運算元也可以結合單元運算子,單元運算子

運算子功能範例
++a
--a

正負如同一般數學表示正負值一樣,同樣的,負負會得正

a = -3
b = +a # b 會等於 -3
c = -a # c 會等於 3

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo02.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

一般運算子都須結合兩個運算元,像是關鍵字 (keyword) 中有邏輯運算子 (logical operator)

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

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

a = True
b = False
c = a and b # c 會等於 False
d = a or b  # d 會等於 True
e = not b   # e 會等於 True

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo03.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

算術運算子 (arithmetic operator) 可用在整數 (integer)浮點數 (floating-point number) ,計算結果也為整數浮點數

運算子功能範例
+a + b
-a - b
*a * b
/a / b
%取餘數a % b
**指數a ** b

例如

a = 2
b = a + 2  # b 會等於 4
c = b - 2  # c 會等於 2
d = c * 2  # d 會等於 4
e = d / 2  # e 會等於 2.0
f = e % 2  # f 會等於 0.0
g = f ** 2 # g 會等於 0.0

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo04.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

+* 也可用於字串 (string)+ 用於字串相接, * 用於複製字串,例如

a = "a"
b = a + "b" # 字串連接, b 會等於 "ab"
c = a * 3   # 字串重複三倍, c 會等於 "aaa"

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo05.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

相等性及關係運算子 (equality and relational operator) 的結果得到布林值 (Boolean value) ,不是 True 就是 False

運算子功能範例
==相等a == b
!=不相等a != b
>大於a > b
>=大於等於a >= b
<小於a < b
<=小於等於a <= b

例如

a = 11
b = 22
c = a >= b # c 會等於 False
d = a <= b # d 會等於 True
e = c == d # e 會等於 False
f = a != b # f 會等於 True

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo06.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的值給左邊的變數

運算子功能範例
=指派a = b
+=相加同時指派a += b
-=相減同時指派a -= b
*=相乘同時指派a *= b
/=相除同時指派a /= b
%=取餘數同時指派a %= b
**=取指數同時指派a **= b

例如

a = 1
a += 1  # a 會等於 2
a -= 1  # a 會等於 1
a *= 1  # a 會等於 1
a /= 1  # a 會等於 1.0
a %= 1  # a 會等於 0.0
a **= 1 # a 會等於 0.0

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo07.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

也可以用平行指派 (parallel assignment)

a, b, c = 11, 22, 33
# a 會等於 11
# b 會等於 22
# c 會等於 33

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:exp_demo08.py
# 功能:示範 Python 中的運算式
# 作者:張凱慶 */

有沒有看的眼花撩亂?居然有 f = a != b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 a != b 會先被計算,結果才會指派到 f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,先把要先被計算的運算式圍起來,例如

f = (a != b) # 等於 f = a != b

這是因為小括弧有最高的優先計算次序。

基本上單一行的運算式就是程式 (program) 中獨立的陳述 (statement) ,通常一行程式碼只會放一個陳述。 Python 程式的執行單位就是陳述,由前而後,一個陳述接著一個陳述來執行。

然而許多控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來討論控制結構中的選擇結構!

中英文術語對照
布林值Boolean value
算術運算子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 ,並且將 a 的值設定為 "*" ,然後印出 aa + aa + a + aa + a + a + aa + a + a + a + a

相關教學影片

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