Python 入門指南 V2.00 - 單元 5 - 運算式與陳述




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



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


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

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


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


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

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


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

一般運算子都須結合兩個運算元,像是關鍵字 (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

算術運算子 (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

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


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

相等性及關係運算子 (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

我們運用的等號,其實屬於指派運算子 (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

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


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

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


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

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


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


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


中英文術語對照


運算式expression
運算元operand
運算子operator
變數variable
字面常數literal
呼叫call
函數function
回傳值return value
關鍵字keyword
邏輯運算子logical operator
算術運算子arithmetic operator
整數integer
浮點數floating-point number
字串string
相等性及關係運算子equality and relational operator
布林值Boolean value
指派運算子assignment operator
平行指派parallel assignment
計算的優先次序precedence
程式program
陳述statement
控制結構control structure
複合陳述compound statement

重點整理


  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

the end

2 則留言:

handsssssome 提到...

a -= 1 # a 會等於 1 ? not 0?

Unknown 提到...

有個小小的錯誤:

練習的1. ...利用 + 、 - 、 % 、 / 、 % 計算出兩者加、減、乘、除、取餘數的結果。

符號對應有誤,%對應到乘了,應該是*對應乘。