Python的選擇結構

以下為此單元簡報。

https://drive.google.com/file/d/1cDoVaSLLuxw8WKkZLao_Gryt2PZo_yAl/view?usp=sharing

以下為本單元的教學影片(放置於YouTube上),以下兩種方式擇一。

(A)以YouTube播放清單方式觀看影片,如下。

https://www.youtube.com/playlist?list=PLOk9WKoJdjHbzn_34Fu03o9nCY0ysfRNC

(B)以超連結方式觀看個別影片,如下。

Python3-1選擇結構簡介

Python3-2單向選擇結構

Python3-3 Python縮行注意事項

Python3-4 雙向選擇結構

Python3-5 多向選擇結構

程式的三個主要結構為循序結構選擇結構重複結構循序結構為程式有從第一行開始逐行執行的特性,第一行執行完畢後執行第二行,第二行執行完畢後執行第三行,直到程式執行結束;選擇結構為若條件測試的結果為真,則做條件測試為真的動作,否則執行條件測試為假的動作,例如:若成績大於等於60分,則輸出及格,否則輸出不及格。重複結構讓電腦重複執行某個區塊的程式多次,電腦適合做重複的工作,例如:求1+2+3+…+1000,使用重複結構可在很短時間內重複執行相加的程式,直到求出加總的結果,重複結構將於下一章介紹。善用這三種結構可以寫出解決問題的程式。

日常生活中也有許多選擇結構的對話,「若明天天氣好的話,我們就去游泳,否則就待在家裡」,程式語言提供選擇結構的程式結構,讓使用者可以於程式中使用,邏輯上的語意為「若測式條件成立,則執行條件成立的動作,否則執行條件不成立的動作」,許多問題的解決過程,都會遇到選擇結構,如登入系統時需要驗證帳號和密碼,正確則可登入系統,否則跳到登入畫面,重新輸入帳號與密碼。

(A)單向選擇結構

單向選擇結構是最簡單的選擇結構,日常生活上經常用到,例如:「若週末天氣好的話,我們就去打球」。單向選擇結構只做測試條件為真時,執行條件為真的動作,只有一個方向的選擇,因此稱做單向選擇結構。

 Python程式撰寫時注意事項:

(1)條件成立要做的動作有哪些,可能不只一行程式,那到底有幾行,Python程式碼以縮行表示執行的範圍。

(2)條件成立要做什麼,需要執行的每一行程式碼都要縮相同的空白鍵(space)個數,通常使用4個空白鍵,所以「if條件判斷 :」後面接的條件成立的動作,每一行都需要以4個空白鍵開頭,表示執行的範圍,與C或C++語言慣用以一對大括號「{}」表示執行的範圍有很大的不同之處。

(3)Tab也可用於表示縮行,但是空白鍵與Tab鍵不要混用,整個程式只能從頭到尾選擇其中一種進行縮行。

有了這樣的概念後,我們就舉個實例進行說明。

(A-1)判斷及格

寫一個程式判斷所輸入成績是否及格,成績及格則顯示「很好,請繼續保持下去」。

(a)解題想法

可以使用單向選擇結構撰寫程式,判斷成績是否及格,及格就顯示「很好,請繼續保持下去」。

(b)程式碼與解說

1

2

3

程式碼

score = int(input('請輸入一個成績?'))

if score >= 60:

       print('很好,請繼續保持下去')

執行結果

輸入成績「60」,結果顯示在螢幕。

請輸入一個成績?60

很好,請繼續保持下去

解說

第1行:於螢幕顯示「請輸入一個成績?」,允許使用者輸入成績,並經由int函式轉換成整數,指定給變數score。

第2到3行:使用條件判斷(if)對score做判斷,若大於等於60分,就輸出「很好,請繼續保持下去」。

(B)雙向選擇結構

雙向選擇結構比起單向選擇結構更複雜一些,日常生活上屬於雙向選擇的對話,例如:「若週末天氣好的話,我們就出去打球,否則去看電影」。雙向選擇結構為當測試條件為真時,執行測試條件為真的動作;否則做測試條件為假的動作。有兩個方向的選擇,因此稱做雙向選擇結構。

 (B-1)滿2000打九折

採買物品時,有時會遇到店家為了刺激消費,會使用滿額折扣,如:滿2000打九折,未滿2000則不打折,請寫一個程式幫助店家計算顧客所需付出的金額。

(a)解題想法

可以使用雙向選擇結構撰寫程式,判斷購買金額是否在2000元以上,若購買金額在2000元以上,輸出購買金額乘以0.9;否則依照原價輸出。

(b)程式碼與解說

1

2

3

4

5

程式碼

cost = int(input('請輸入購買金額?'))

if cost >= 2000:

      print(cost * 0.9)

else:

      print(cost)

執行結果

輸入購買金額「2000」,結果顯示在螢幕。

請輸入購買金額?2000

1800.0

 

解說

第1行:於螢幕顯示「請輸入購買金額?」,允許使用者這輸入購買金額,並經由int函式轉換成整數,指定給變數cost。

第2到5行:條件判斷(if)對cost做判斷,大於等於2000就將該數值打九折(第2到3行),否則該數值不打折(第4到5行)。

(B-2)判斷奇偶數(ch4\4-2-2-判斷奇偶數.py)

請寫一個程式判斷輸入的值是奇數還是偶數,通常會以求除以2的餘數,若餘數為0表示輸入的數為偶數,否則輸入的數為奇數。

(a)解題想法

可以使用雙向選擇結構撰寫程式,判斷輸入值除以2的餘數,若餘數為0,則輸出該數為偶數;否則輸出該數為奇數。

(b)程式碼與解說

1

2

3

4

5

程式碼

num = int(input('請輸入一個整數?'))

if num%2:

      print(num, '為奇數')

else:

      print(num, '為偶數')

執行結果

輸入一個數字「13」,顯示結果在螢幕上。

請輸入一個整數?13

13為奇數

 

解說

第1行:於螢幕顯示「請輸入一個整數?」,允許使用者這輸入整數,並經由int函式轉換成整數,指定為變數num。

第2到5行:利用條件判斷(if)對num做判斷,取2的餘數,若餘數不為0則顯示變數num的值與「為奇數」(第2到3行),否則餘數為0,則變數num的值與「為偶數」(第4到5行)。

(C)多向選擇結構

除了單向選擇與雙向選擇外,更廣義的選擇結構是多向選擇,意即選擇結構中還可以加入選擇結構,單向選擇與雙向選擇為多向選擇結構的特例,多向選擇結構讓程式有無限可能執行的路徑與狀態。

我們可以使用多個if-elif-else來達成多項選擇結構,以成績與評語對應關係為例,介紹多項選擇結構,例如:假設成績與評語有對應關係,若成績大於等於80分,評語為「非常好」;否則若成績大於等於60分,也就是小於80分且大於等於60分,評語為「不錯喔」;否則評語為「要加油」,也就是小於60分,這就是多向選擇結構。

多項選擇結構可以使用多個if-elif-else串接起來,以下說明多項選擇結構語法。

多向選擇結構語法

if  條件判斷1:

    條件判斷1成立的敘述

elif  條件判斷2:

    條件判斷2成立的敘述

else:

    條件判斷2不成立的敘述

程式範例(分數與評語)

if score >= 80:

      print('非常好')

elif score >= 60:

      print('不錯喔')

else:

      print('要加油')

 (C-1) 分數與評語

寫一個程式若成績大於等於80分,評語為「非常好」,否則若成績大於等於60分,評語為「不錯喔」,否則評語為「要加油」,將以上敘述表示為表格,如下。

(a)解題想法

可以使用多向選擇結構撰寫程式,若成績是否大於等於80,則顯示「非常好」,否則若成績大於等於60,則顯示「不錯喔」,否則顯示「要加油」。

 (b)程式碼與解說

1

2

3

4

5

6

7

程式碼

score = int(input('請輸入一個成績?'))

if score >= 80:

      print('非常好')

elif score >= 60:

      print('不錯喔')

else:

      print('要加油')

執行結果

輸入成績「60」,結果顯示在螢幕。

請輸入一個成績?60

不錯喔

解說

第1行:於螢幕顯示「請輸入一個成績?」,允許使用者輸入成績,並經由int函式轉換成整數,指定為變數score。

第2到7行:條件判斷(if)對score做判斷,若大於等於80分就輸出「非常好」(第2到3行),否則若大於等於60分就輸出「不錯喔」(第4到5行),否則輸出「要加油」(第6到7行)。

 

(C-2) 郵資計算

某快遞公司以重量為計算郵資的依據,重量與郵資計算如下表,請寫一個程式協助快遞人員計算郵資,快遞人員只要輸入重量,程式自動計算郵資。

(a)解題想法

可以使用多向選擇結構撰寫程式,若重量小於等於5公斤,則顯示「50」,否則若重量小於等於10公斤,則顯示「70」,若重量小於等於15公斤,則顯示「90」,若重量小於等於20公斤,則顯示「110」,否則顯示「超過20公斤無法寄送」。

(b)程式碼與解說

1

2

3

4

5

6

7

8

9

10

11

程式碼

w = float(input('請輸入物品重量?'))

if w <= 5:

      print('所需郵資為50元')

elif w <= 10:

      print('所需郵資為70元')

elif w <= 15:

      print('所需郵資為90元')

elif w <= 20:

      print('所需郵資為110元')

else:

      print('超過20公斤無法寄送')

執行結果

請輸入重量「10」,螢幕輸出所需郵資。

請輸入物品重量?10

所需郵資為70元

 

解說

第1行:於螢幕顯示「請輸入物品重量?」,允許使用者物品重量,並經由float函式轉換成浮點數,指定給變數w。

第2到3行判斷w是否小於等於5,若是則顯示「所需郵資為50元」

第4到5行:否則若w是否小於等於10(隱含成績大於5),若是則顯示「所需郵資為70元」

第6到7行:否則若w是否小於等於15(隱含成績大於10),若是則顯示「所需郵資為90元」

第8到9行:否則若w是否小於等於20(隱含成績大於15),若是則顯示「所需郵資為110元」

第10行到11行::否則(隱含重量大於20)顯示「超過20公斤無法寄送」。