甲居工作室

6.Python 邏輯判斷 (if、elif、else / match、case)

日期:2024/04/07

6.Python 邏輯判斷 (if、elif、else / match、case)

本章先分享一個故事:
媽媽:兒子阿!下班後買十個肉包回來,如果看到賣西瓜的就買一個。
請問工程師兒子會買幾個肉包呢?
A: 10個
B: 1個

是的, A 與 B 都算是正確,主要看你對這句話的定義是什麼?
在程式的世界中我們可以撰寫明確的判斷式來避免相關問題。

6.1 if、elif、else

透過ifelseelif 這三種語法來協助我們實現條件判斷和流程控制。

if 判斷

  1. if condition: # 條件式
  2. statement # 如果條件成立,執行這裡的程式碼
  • condition:需要被評估的條件。如果條件為真,則執行if塊中的程式碼。

if-else 判斷 / 二元決策 (Binary decision)

  1. num = 10
  2. if num > 0:
  3. print('這是一個正數')
  4. else:
  5. print('這不是一個正數')
  • 我們宣告了一個變數num,並使用if語句檢查它是否大於0。如果是,則顯示這是一個正數;否則顯示這不是一個正數

if-elif-else 判斷 / 鏈狀條件 (Chained conditionals)

  1. num = 10
  2. if num > 0:
  3. print('這是一個正數')
  4. elif num == 0:
  5. print('這是零')
  6. else:
  7. print('這是一個負數')
  • 我們宣告了一個變數num,並使用if語句檢查它的正負。如果是大於 0 則顯示這是一個正數;如果等於 0 則顯示這是零;否則顯示這是一個負數
  • elif:else if 的縮寫
  • 當然實際使用上 elif可以多個進行多重條件判斷。

巢狀條件 (Nested conditionals)

  1. score = 85
  2. if score >= 60:
  3. if score >= 90:
  4. print("成績優良")
  5. else:
  6. print("成績尚可")
  7. else:
  8. print("考試成績不合格")

此程式會先判斷分數是否大於等於 60 分,則會判斷是否大於等於 90 分,如為 True 則會顯示成績優良False則會顯示成績尚可。如果小於 60 分則顯示考試成績不合格

6.2 match、case (Python 3.10+)

基本語法

  1. match expression:
  2. case pattern1:
  3. # 對應 pattern1 的代碼
  4. case pattern2:
  5. # 對應 pattern2 的代碼
  6. ...
  7. case pattern_n:
  8. # 對應 pattern_n 的代碼
  9. case _:
  10. # 當所有 pattern 都不匹配時執行的代碼(可選)
  • match:用於開始模式匹配的關鍵字。
  • expression:要進行匹配的表達式。
  • case:用於指定每個模式和相應代碼的關鍵字。
  • pattern:用於定義每個模式的關鍵字,可以是值、變量、字面量、常量等。
  • _:代表通配符,表示所有其他情況。
  1. personality = str(input('輸入 16 型人格:'))
  2. match personality:
  3. case 'ISTJ':
  4. print('你是安靜、嚴謹、實事求是的 ISTJ 類型人格。')
  5. case 'ISFJ':
  6. print('你是溫暖、體貼、負責任的 ISFJ 類型人格。')
  7. case 'INFJ':
  8. print('你是理想主義者、寧靜、獨立的 INFJ 類型人格。')
  9. case 'INTJ':
  10. print('你是自信、果斷、理智的 INTJ 類型人格。')
  11. case 'ISTP':
  12. print('你是寧靜、冷靜、邏輯分析的 ISTP 類型人格。')
  13. case 'ISFP':
  14. print('你是和藹、富於想象力、適應性強的 ISFP 類型人格。')
  15. case 'INFP':
  16. print('你是理想主義者、深情、富於想象力的 INFP 類型人格。')
  17. case 'INTP':
  18. print('你是冷靜、冷漠、慎思明辨的 INTP 類型人格。')
  19. case 'ESTP':
  20. print('你是行動主義者、實際、直接的 ESTP 類型人格。')
  21. case 'ESFP':
  22. print('你是熱情、有趣、樂於助人的 ESFP 類型人格。')
  23. case 'ENFP':
  24. print('你是熱情、創造力、好奇的 ENFP 類型人格。')
  25. case 'ENTP':
  26. print('你是聰明、機智、具有創造力的 ENTP 類型人格。')
  27. case 'ESTJ':
  28. print('你是傳統主義者、安靜、忠誠的 ESTJ 類型人格。')
  29. case 'ESFJ':
  30. print('你是熱情、負責任、愛與被愛的 ESFJ 類型人格。')
  31. case 'ENFJ':
  32. print('你是熱情、鼓舞人心、有創意的 ENFJ 類型人格。')
  33. case 'ENTJ':
  34. print('你是果斷、自信、具有領導能力的 ENTJ 類型人格。')
  35. case _:
  36. print('請輸入正確的16型人格。')

6.3 回家作業

題目描述:

設計一個程式,用於計算用電度數所對應的電價。程式會根據當前的季節和用電度數來計算。
規則如下:

用電度數範圍夏季電價 (元/度)非夏季電價 (元/度)
120度以下1.681.68
121~330度2.452.16
331~500度3.703.03
501~700度5.044.14
701~1000度6.245.07
1001度以上8.466.63

要求:

  1. 提示使用者輸入當前季節(夏季或非夏季)和用電度數。
  2. 根據輸入的季節和用電度數計算電價。
  3. 顯示計算結果。

延伸閱讀

7.Python迴圈 (for loop / while loop)

在Python中,for 迴圈是一種用於迭代序列(如列表、元組或字串)或其他可迭代對象(如字典)中的元素的迭代工具。它能夠按照指定的順序遍歷容器中的元素,並在每次迭代中執行特定的操作。

Read more

8. Python 函式 (Function)

寫程式碼時有一個非常重要的觀念是 DRY (Don’t repeat yourself),避免重複撰寫程式碼,除了可讀性低,也不容易維護。

Read more