Python程式設計
Lesson 4: 程式的流程控制—使用if
程式基本概念程式與演算法
Algorithm
發音: Al-go-ri-thm
演算法: 完成一件工作的一系列步驟
Program
發音: Pro-gram
程式: 編程完成的演算法(可執行)
演算法(步驟)
向右移動一格
塗滿空格
向右移動一格
向下移動一格
塗滿空格
有5個程式指令:
上 下 左 右
填滿
程式
右
填滿
右
下
填滿
由星號出發

程式基本概念資料
Variable
發音: Va-ri-able
變數: 資料內容(可改變) 的存放空間
Data Type
發音: Da-ta Type
資料型別: 資料存放空間的類型
x = 5
y = input('請輸入數值')指定
半徑 = int(input('輸入:')) // 字串轉整數
面積 = 3.14 * 半徑**2; // 平方, 乘法運算
半徑字串 = input('輸入:') // 字串
半徑數值 = int(半徑字串) // 字串轉整數
面積 = 3.14 * 半徑數值**2; // 平方, 乘法
# 轉換函式: int(), float(), str(), chr()型別轉換
程式基本概念流程控制
Loop
發音: loop
迴圈: 重複做的動作
Conditionals
發音: Con-di-shun-uls
條件判斷: 在某些情況才會執行的動作
if score<60:
print('不及格')
elif score<=80:
print('甲等')
else:
print('超出範圍')選擇結構
運算子關係運算子
結果為真,傳回True;結果為偽,傳回False
判斷是否相等:2個等號
因為: 1個等號➞指定運算子
關係運算子
| 關係運算子 | 說明 | 實例 | 說明 |
|---|---|---|---|
| > | 大於 | a > b | 檢查是否a大於b |
| >= | 大於或等於 | a >= b | 檢查是否a大於或等於b |
| < | 小於 | a < b | 檢查是否a小於b |
| <= | 小於或等於 | a <= b | 檢查是否a小於或等於b |
| == | 等於 | a == b | 檢查是否a等於b |
| != | 不等於 | a != b | 檢查是否a不等於b |
x = 10 > 8
print(x) # 印出True
y = 10 == 10
print(y) # 印出Truex = 10 <= 5
print(x) # 印出False
y = 20 != 10
print(y) # 印出False運算子邏輯運算子
三種邏輯運算子
❶且(and) ❷或(or) ❸非(not)
| 運算子 | 意義 | 範例 | 結果 |
|---|---|---|---|
| not | 傳回原來比較結果的相反值 | not(3>5) not(5>3) |
True False |
| and | 兩個結果都成立:True 否則:False |
(5>3) and (9>6) (5>3) and (9<6) (5<3) and (9>6) (5<3) and (9<6) |
True False False False |
| or | 兩個比較結果都不成立:False 其餘情況:True |
(5>3) and (9>6) (5>3) and (9<6) (5<3) and (9>6) (5<3) and (9<6) |
True True True False |
邏輯運算子
選擇結構
- 「流程控制」的一種
- 依「決策結果」執行不同「程式區塊」
- 「條件判斷」(conditional) 或「判斷式結構」
選擇結構程式結構(1/18)
重複結構

循序結構
選擇結構


依序執行
二選一
多選一, 視情況而定
依序逐行執行
重複執行, 視情況而定
重複執行
選擇結構循序結構(2/18)
book = "程式設計"
print("書名: %10s 價格: %5d" % (book, 350))
# 5d: 整數共佔5位, 不足5位前面補空白, 超過則全數印出
# 10s: 字串共佔10位, 不足前面補空白, 超過則全數印出
price = 56.6
print('價格為 %8.2f元' % price)
# 8.2f:含小數點共8位,小數點後兩位top = float(input('輸入梯形上底:'))
bottom = float(input('輸入梯形下底:'))
height = float(input('輸入梯形高度:'))
area = (top + bottom) * height / 2 # 先乘除後加減
print('面積是: %10.1f' % area)
一行一行依序執行
一行一行依序執行
選擇結構 單向選擇結構—if敘述(3/18)
前一行程式
條件判斷
程式碼區塊
程式往下執行
True
False
選擇結構條件判斷(4/18)

if
if
else
else
條件判斷
條件判斷
選擇結構if敘述(5/18)
if(條件判斷): # 注意結尾的冒號
程式碼1 # 需縮排4格
程式碼2 # 同樣縮排距離:同一區塊
....
後續程式碼 # 不需也不能縮排 age = 18
if age < 20:
print('年齡太小')
print('需滿20歲,才能購買酒類')
print('此處為if區塊外程式碼')執行時2選1
- 1→2→3,4→5 或是
- 1→2→5
if 敘述語法
age = 18
if age < 20:
print('年齡太小') # 錯誤,只縮3格
print('需滿20歲,才能購買酒類')
print('此處為if區塊外程式碼')注意縮排的格數
格數代表層次:0, 4, 8..., 不會有其他格數
選擇結構 程式區塊與縮排(6/18)
: 加上 「縮排」代表一組「程式區塊」
if(分數>=60):
grade = "及格"
總分 += 分數程式區塊
冒號
縮排
下一行程式
英文 = int(input('輸入英文分數:'))
grade = "不及格"
if(英文>=60):
grade = "及格"
print("英文科: %d分,等第:%s" % (英文, grade))
print("英文科: %d分,等第:%s" % (英文, grade))
總分 += 英文程式區塊範例
程式區塊
選擇結構 程式區塊與縮排(7/18)
縮排方式:
- 可用「空白鍵」 或「 Tab鍵」
- 通常用4個空白鍵
- 不用混用「空白鍵」 或「 Tab鍵」
- 可以很多層(第一層4個, 第二層8個...)
選擇結構 單向選擇結構(8/18)
# ch5_1.py
age = input("請輸入年齡: ")
if (int(age) < 20):
print("你年齡太小")
print("需年滿20歲才可以購買菸酒")請輸入年齡: 18 你年齡太小 需年滿20歲才可以購買菸酒
請輸入年齡: 21
# ch5_2.py
print("輸出絕對值")
num = input("請輸入任意整值: ")
x = int(num)
if (int(x) < 0):
x = abs(x)
print("絕對值是 %d" % int(x))輸出絕對值 請輸入任意整值: 98 絕對值是 98
輸出絕對值 請輸入任意整值: -30 絕對值是 30
選擇結構 if敘述更多範例(9/18)
英文 = int(input("輸入英文分數"))
grade = "不及格"
總分 = 0
if(英文>=60):
grade = "及格"
print("英文科: %d分,等第:%s" % (英文, grade))
print("英文科: %d分,等第:%s" % (英文, grade))
總分 += 英文
print("總分: %d" % 總分)程式區塊範例
輸入英文分數50
英文科: 50分,等第:不及格
總分: 50
執行結果1: 輸入50
執行結果2: 輸入60
輸入英文分數60
英文科: 60分,等第:及格
英文科: 60分,等第:及格
總分: 60
及格時,如何能只印一次?
選擇結構 練習(10/18)
...
if(字串變數=="比對內容"):
...字串比對提示
範例練習
當輸入正確的通關密碼"1234"時,印出 "歡迎光臨!"
若輸入不正確, 印出 "密碼錯誤"
選擇結構if-else敘述(11/18)
雙向選擇結構: 處理兩種狀況
if(條件判斷): # 注意結尾的冒號
程式區塊1 # 需縮排4格,區塊可以不止一行
else:
程式區塊2 # 需縮排4格,區塊可以不止一行
後續程式碼 # 不需縮排選擇結構 雙向選擇結構—if-else敘述(12/18)
前一行程式
條件判斷一
程式碼區塊一
程式往下執行
True
False
程式碼區塊二
選擇結構 if-else敘述(13/18)
雙向選擇結構
- 例:「若週末天氣好的話,我們就去打球,否則去看電影」
- 測試條件:(週末天氣好)
- 判斷結果:True ☛ 打球
- 判斷結果:False ☛ 看電影

if
else
條件判斷
選擇結構 if-else敘述(14/18)
# ch5_3.py
age = input("請輸入年齡: ")
if (int(age) < 20):
print("你年齡太小")
print("需年滿20歲才可以購買菸酒")
else:
print("歡迎購買菸酒")請輸入年齡: 18 你年齡太小 需年滿20歲才可以購買菸酒
請輸入年齡: 21 歡迎購買菸酒
# ch5_4.py
print("奇數偶數判斷")
num = input("請輸入任意整值: ")
rem = int(num) % 2
if (rem == 0):
print("%d 是偶數" % int(num))
else:
print("%d 是奇數" % int(num))奇數偶數判斷 請輸入任意整值: 5 5 是奇數
奇數偶數判斷 請輸入任意整值: 10 10 是偶數
選擇結構 if-else敘述(15/18)
...
if(字串變數=="比對內容"):
...字串比對提示
範例練習
當輸入正確的通關密碼"aB#12345"時,印出 "歡迎光臨!"
否則印出"密碼錯誤!"
注意: 大小寫字母不同
選擇結構 更多範例(16/18)

total = int(input("輸入總金額,超過2000元打9折:"))
if total>=2000:
print('金額 %d, 打9折後: %8.2f' % (total, total*0.9))
else:
print('金額 %d' % total)輸入總金額,超過2000元打9折:600
金額 600
輸入總金額,超過2000元打9折:2300
金額 2300, 打9折後: 2070.00
雙向選擇
選擇結構 單向雙向綜合練習(17/18)
練習
- 輸入成績,小於60分顯示"不及格"
- 60~80分顯示"甲等",81分以上顯示"優等"
- 101分以上顯示"超出範圍"
...
if(score<60):
print('不及格')
if(score>=60) and (score<=80):
print('....')
if(score>80) and (score<=100):
print('....')
if(score>100):
print('超出範圍') 綜合使用提示
可視需要使用多次單向或多向
選擇結構 單向雙向綜合練習(18/18)
練習
- 輸入飲料購買數量,小於10件不打折
- 10~20件:95折
- 超過20件:9折
- 輸出總價(假設飲料單價為50元)
選擇結構多向
- 更多可能的執行路徑
- if-elif-else
- if, elif:都需跟著判斷式
- elif 可以有很多個
選擇結構 多向選擇: if-elif-else(1/8)
多向選擇
- 小於60分:"不及格"
- 60~80分:"甲等"
- 81分以上:"優等"
- 101分以上:"超出範圍"
多向選擇
- 小於10件:不打折
- 10~20件:95折
- 超過20件:9折
4種選擇
3種選擇
if(條件式1):
程式區塊1
elif(條件式2):
程式區塊2
else:
程式區塊3
後續程式碼多向選擇: if-elif-else語法
if(條件式1):
程式區塊1
elif(條件式2):
程式區塊2
elif(條件式3):
程式區塊3
else:
程式區塊4
後續程式碼4種選擇
3種選擇
選擇結構 if-elif-else (2/8)
多向選擇
- 小於60分:"不及格"
- 60~80分:"甲等"
- 81分以上:"優等"
- 101分以上:"超出範圍"
score = int(input('輸入成績:'))
if score<60:
print('不及格')
elif score<=80:
print('甲等')
elif score<=100:
print('優等')
else:
print('超出範圍')選擇結構 多向選擇結構(3/8)

...
if score<60:
print('不及格')
elif score<=80:
print('甲等')
......
if score<60:
print('不及格')
elif score>=60 and score<=80:
print('甲等')
...不需要檢驗>=60,因為第2行已檢驗過
選擇結構 if-elif-else範例(4/8)
# ch5_5.py
print("計算最終成績")
score = input("請輸入分數: ")
sc = int(score)
if (sc >= 90):
print(" A")
elif (sc >= 80):
print(" B")
elif (sc >= 70):
print(" C")
elif (sc >= 60):
print(" D")
else:
print(" F")
輸入分數,輸出分數等級:
90~100: A
80~89: B
70~79: C
60~69: D
59以下: F
選擇結構 if-elif-else範例(5/8)
# ch5_6.py
print("計算票價")
age = input("請輸入年齡: ")
age = int(age)
ticket = 100
if age >= 80 or age <= 6:
ticket = ticket * 0.2
print("票價是: %d" % ticket)
elif age >= 60 or age <= 12:
ticket = ticket * 0.5
print("票價是: %d" % ticket)
else:
print("票價是: %d" % ticket)收費標準:全票100元之外,
- 2折:小於等於6歲 或 大於等於80歲
- 5折:7~12歲 或 60~79歲
輸入歲數,程式計算票價
# ch5_6_1.py
print("計算票價")
age = input("請輸入年齡: ")
age = int(age)
ticket = 100
if (age >= 80) or (age <= 6):
ticket = ticket * 0.2
print("票價是: %d" % ticket)
elif (age >= 60) or (age <= 12):
ticket = ticket * 0.5
print("票價是: %d" % ticket)
else:
print("票價是: %d" % ticket)
選擇結構 if-elif-else範例(6/8)
# ch5_7.py
print("判斷輸入字元類別")
ch = input("請輸入字元: ")
if ord(ch) >= ord("A") and ord(ch) <= ord("Z"):
print("這是大寫字元")
elif ord(ch) >= ord("a") and ord(ch) <= ord("z"):
print("這是小寫字元")
elif ord(ch) >= ord("0") and ord(ch) <= ord("9"):
print("這是數字")
else:
print("這是特殊字元")
輸入字元,輸出該字元是大寫字母、小寫字母、數字、或特殊字元
ord()函式: 回傳字元的unicode編碼值
選擇結構 多向選擇結構(7/8)
練習實作題2
分別輸入X座標、Y座標,請判斷該座標位於第幾象限
- X>0, Y>0:第一象限
- X<0, Y>0:第二象限
- X<0, Y<0:第三象限
- X>0, Y<0:第四象限
- X=0 或 Y=0:位於座標軸上
選擇結構 多向選擇結構(8/8)
練習
請使用選擇敘述撰寫程式,讓使用者輸入一個西元年份,然後判斷它是否為閏年(leap year)或平年。
閏年判斷規則為:每四年一閏,每百年不閏,
但每四百年也一閏
巢狀判斷式
- 判斷式內包含判斷式(if-else敘述內有另一個if-else敘述)
- 外層/內層判斷式

巢狀if(1/4)
if(條件判斷一): # 注意結尾的冒號
if(條件判斷A): # 縮排4格
程式區塊A # 需縮排8格,區塊可以不止一行
else: # 縮排4格
程式區塊B # 縮排8格
else:
程式區塊二 # 需縮排4格,區塊可以不止一行
後續程式碼 # 不需縮排巢狀if語法
注意縮排的格數,內層需全部往內多縮4格
巢狀if範例(2/4)
# ch5_8.py
print("判斷輸入年份是否潤年")
year = input("請輸入年分: ")
rem4 = int(year) % 4
rem100 = int(year) % 100
rem400 = int(year) % 400
if rem4 == 0: # 被4整除
if rem100 != 0 or rem400 == 0: # 且 (不是100倍數 或 是400倍數)
print("%s 是潤年" % year)
else:
print("%s 不是潤年" % year)
else:
print("%s 不是潤年" % year)測試輸入的某一年是否為閏年
閏年判斷規則為:每四年一閏,每百年不閏,但每四百年也一閏
範例: 百貨公司折扣
- 1萬以上~29,999: 95折
- 3萬以上~49,999: 9折
- 5萬以上~99,999: 85折
- 10萬以上: 8折
money = int(input("請輸入購物金額:"))
if(money >= 10000):
if(money >= 100000):
print(money * 0.8, end=" 元\n") #八折
elif(money >= 50000):
print(money * 0.85, end=" 元\n") #八五折
elif(money >= 30000):
print(money * 0.9, end=" 元\n") #九折
else:
print(money * 0.95, end=" 元\n") #九五折
else:
print(money, end=" 元\n") #未打折巢狀if範例(3/4)
範例
- 輸入a,b,c三組數字
- 利用巢狀判斷式,找出最大數
a = int(input('輸入數字a:'))
b = int(input('輸入數字b:'))
c = int(input('輸入數字c:'))
if a>b:
if a>c:
print('最大的數字是:a')
elif a != c:
print('最大的數字是:c')
else:
print('最大的數字是:a與c')
elif a != b:
if b>c:
print('最大的數字是:b')
elif b != c:
print('最大的數字是:c')
else:
print('最大的數字是:b與c')
else:
if a>c:
print('最大的數字是:a,b')
elif a != c:
print('最大的數字是:c')
else:
print('最大的數字是:a,b,c')巢狀if範例(4/4)
x = None
print(x)
print(type(x))尚未設定的變數值None
# ch5_9.py
flag = None
if flag == None:
print("尚未定義flag")
None
<class 'NoneType'>
可用來檢查變數是否已有值
Python程式設計
By Leuo-Hong Wang
Python程式設計
Lesson 4: 程式的流程控制-使用if
- 1,947