Python 程式設計

第 7 章    決策結構

(1) 布林值與布林表示式

∗ 布林值 (Boolean value)

▸ 布林代數 (Boolean algebra):於 18 世紀由英國數學家 George Boole 所發明

▸ 布林值:僅有真與假兩個值

▸ Python 的布林型態為 bool,真:True, 假:False (兩者均大寫開頭,並非字串)

ch7/boolean.py (首先建立 python/ch7 目錄)
print(True)
print(type(True))
print(False)
print(type(False))
True
<class 'bool'>
False
<class 'bool'>

▸ Python 認定為 False 的值:False, 0, None, (), [], {},其餘都是 True

∗ 布林表示式 (Boolean expression):表示式計算的結果會回覆布林值

▸ 例如兩個等號 == 用來比較兩個值,如果相等就回覆 True,否則回覆 False

ch7/booleanExp.py
print(5==5)      # True
print(5==6)      # False
print(5==2+3)    # True
print(5==2+4)    # False

∗ 關係運算子 (Relational operator)

▸ 也稱為比較運算子 (Comparison operator)

▸ 以下表示式判斷 xy 的關係

✶ 等於:x == y      (切記不要只寫一個等號,那是指派運算子)
✶ 不等於:x != y
✶ 大於:x > y
✶ 大於等於:x >= y
✶ 小於:x < y
✶ 小於等於:x <= y

∗ 邏輯運算子 (Logical operator)

▸ 三種邏輯運算子:and (且),or (或),not (非)

▸ 範例:

0<x and x<10:如果 x(0, 10) 範圍內就是 True,否則是 False
x%2==0 or x%3==0:如果 x 可以被 2 或被 3 整除就是 True,否則是 False
not (x%2==0 or x%3==0):如果 x 不能被 2 也不能被 3 整除就是 True,否則 False

∗ 運算子的優先順序 (Precedence of operators)

優先層次
(由高至低)
分類 運算子
6 乘法 *    /    //    %
5 加法 +    -
4 關係 ==    !=    <    >    <=    >=
3 邏輯 not
2 邏輯 and
1 邏輯 or

▸ 例如 10<x*5 and y-6<2 的計算順序為 (假設 x=3,y=10):

1. 先做乘減運算:x*5 (15), y-6 (4)
2. 然後關係運算:10<15 (True), 4<2 (False)
3. 最後為邏輯運算:True and False    --> 結果為 False

▸ 註:Python 的關係比較有較為簡潔的語法:if a < x < b

✶ 其他程式語言需寫成:if a<x and x<b

(2) 決策

∗ 決策 (Decision):依照條件來判斷哪些程式片段該執行,哪些不執行

▸ 亦稱為選擇 (Selection) 或條件 (Condition),決策指令稱為 Decision statement, selection statement, 或 conditional statement

▸ Python 的決策指令:if

∗ 二元決策 (Binary decision)

▸ 語法:

if <condition>:
    statements1
else:
    statements2
trueFalse.png
if <condition>if 之後跟隨一個布林值或布林表示式 <condition>,稱為「條件」(Condition)
if 是複合指令,因此結尾需有冒號
statements1:是 if 的本體區塊 (Body block),需要縮排一層, 如果布林判斷為真就執行此區的指令群
else 是複合指令,因此結尾也需要有冒號
statements2:是 else 的本體區塊,需要縮排一層, 如果布林判斷為假就執行此區裡的指令群

▸ 範例:如果 x 不能被 2 整除則印出 x 是奇數,否則印出 x 是偶數

ch7/evenOdd.py
x = 15
if x % 2:
    print(f'{x} 是奇數')
else:
    print(f'{x} 是偶數')
✶ 條件判斷 if x % 2:如果 x 不能被 2 整除(註:不是 0 的數值就是 True)
✶ 如果條件判斷為 True 則執行 if 的本體指令, 否則執行 else 的本體指令

▸ 練習 7-1

∗ if 指令可以沒有 else 部份

▸ 語法:

if <condition>:
    statements
if.png

▸ 範例:如果 x 小於 0 則印出 x 是負數,否則就結束 if 指令

ch7/negative.py
x = -10
if x < 0: 
    print(f'{x} 是負數') 
print('此訊息一定會印出') 

∗ 巢狀條件 (Nested conditionals)

▸ 在 ifelse 的本體中包含其他決策,語法:

if <condition_a>:
  statements_a
else:
    if <condition_b>:
        statements_b
    else:
        statements_c
✶ 如果 <condition_a> 條件判斷成立,就執行第一層 if 的本體指令 (statements_a),否則執行 else 的本體指令; 如果此區塊中的 <condition_b> 條件判斷成立,就執行第二層 if 的本體指令 (statements_b), 否則執行第二層 else 的本體指令 (statements_c)
nestedConditionals.png

▸ 例如:

ch7/nestedIf.py
x = 3
y = 5
if x < y:
    print('x 小於 y')
else:
    if x > y:
        print('x 大於 y')
    else:
        print('x 一定等於 y')

▸ 練習 7-2

∗ 鏈狀條件 (Chained conditionals)

▸ 一個 if 判斷,接下來一連串 elif 判斷 (elifelse if 的縮寫),最後是 else 判斷:

if <condition_a>:
    statements_a
elif <condition_b>: 
    statements_b
elif <condition_c>:
    statements_c
... 
else:
    statements_n

chainedConditionals.png
✶ 如果條件判斷成立,就執行 if 的區塊指令,否則再判斷條件 (elif), 以此類推,否則就執行 else 區塊的指令

▸ 範例:

ch7/chainedIf.py
x = 3
y = 5
if x < y:
    print('x 小於 y')
elif x > y:
    print('x 大於 y')
else:
    print('x 一定等於 y')

▸ 練習 7-3

上一章       下一章