Home
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

4

Local AI

--

Uedu Code

--

Taipei AQI 46 · Taichung AQI 76 · Tainan AQI 67 · Kaohsiung AQI 64
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 07

流程控制:條件判斷

縮排、if/elif/else 與條件運算式
Interaction實作 25 minute(s)

Learning Objectives

  • Python 程式設計風格:敘述、註解,以及縮排的重要性
  • 條件判斷式 if、if-else、if-elif-else 與巢狀 if 的用法
  • 條件運算式(x if C else y)

讓程式做選擇

到目前為止,程式都是從第一行依序執行到最後一行。真實的問題常常要看情況決定: 分數不到 60 要提醒、年齡決定票價、輸入的數字是不是偶數。這就是條件判斷。

從本課開始,我們把程式寫成 .py 腳本檔,而不只是在互動式環境一行一行輸入。寫腳本有幾個基本規則:

規則 說明
一列一個敘述 用分號 ; 可以把多個敘述寫在同一列,但不建議常用
多列接續 一列太長可以用 \ 接到下一列;在 ( )、[ ]、{ } 裡面則可以直接換行
註解 # 之後到列尾都是註解,習慣在 # 後空一格;Python 沒有多列註解,要每列各自加 #
pass 空敘述,什麼都不做;語法上需要一個區塊、但還沒想好要寫什麼時使用

第一支腳本:ex7_1.py

這是投影片的 ex7_1.py,再加上分號與多列接續的寫法。程式會讀到預先準備的輸入 Amy,你可以在下方改成自己的名字再跑一次。

縮排:Python 用空白表示區塊

很多語言用大括號 { } 包住一組敘述,Python 則是用縮排:

  • 以關鍵字開頭、以冒號 : 結尾的那一列(例如 if、else、for),下一列開始要縮排,縮排的部分就是它的程式碼區塊。
  • 同一個區塊的每一列,縮排的空格數必須完全一樣;縮排回到原本的位置,區塊就結束了。
  • PEP 8 建議:每一層縮排用 4 個空白,不要用 Tab。
  • 不可以沒有理由縮排:只有冒號的下一列才能開始縮排。
if True:
    print('Answer')
    print('True')
else:
    print('Answer')
  print('False')      # 空格數和上一列不同:IndentationError

Python 不是自由格式的語言,空白有意義。縮排錯誤是初學者最常遇到的錯誤之一。

if 敘述:ifstmt1.py

輸入的分數是 45。注意執行箭頭:條件成立時進入第 5 行;第 7 行沒有縮排,不屬於 if,所以一定會執行。把下方的輸入改成 80 再跑一次,看箭頭怎麼跳過第 5 行。

條件不一定要是 True / False

if 後面可以放任何值,Python 會把它當成真或假來判斷。以下這些都視為假:

False、None、0、0.0、空字串 ""、空串列 []、空元組 ()、空字典 {}、空集合 set()

除此以外都視為真。所以 if name: 就是「name 不是空字串的話」的簡潔寫法。

哪些值是假?

選 not,再點不同的 A,看哪些值是假值(not A 會是 True)。再切到 and、or,回想 Module 04:寫在 if 後面的複合條件也是這樣算的。

if-else 敘述:ifstmt2.py

輸入 72。if 和 else 兩個區塊只會執行其中一個。後半段示範條件是 0 的情況:0 是假值,所以區塊被跳過。

if-elif-else 敘述:ifstmt3.py

輸入 16。Python 由上往下逐一檢查條件,找到第一個成立的就執行它,其餘全部跳過。想一想:如果把 age < 18 和 age < 13 的順序對調,輸入 10 會印出什麼?

想一想:縮排與真假值

1.

下面的程式執行後會怎樣?

if True:
    print("Answer")
    print("True")
else:
    print("Answer")
  print("False")
2.

下面的程式會印出什麼?

items = []
if items:
    print("A")
else:
    print("B")
第 1 次作答

巢狀 if

輸入 9。外層先判斷是不是偶數,內層再判斷能不能被 3 整除;每多一層 if,就多縮排一層。試著改輸入 12、8、7,讓箭頭走到四個不同的出口。

條件運算式:x if C else y

當 if-else 只是要「依條件決定一個值」時,可以寫成一列的條件運算式(又稱三元運算子):

result = x if C else y      # C 成立得到 x,否則得到 y

它等於下面四列:

if C:
    result = x
else:
    result = y

條件運算式是所有 Python 運算子中優先順序最低的(只比 lambda 和 := 高)。 另外,if 區塊只有一個敘述時,也可以寫在同一列:if var == 50: print('Value is 50')(單一敘述套件)。

條件運算式:ifstmt4.py

輸入 26(超過 23)。第 4 行先算 h >= 24,成立就得到 h % 24,否則保持原本的 h。

追蹤條件判斷

1.

下面的程式會印出什麼?

score = 85
if score >= 60:
    print("C")
elif score >= 80:
    print("B")
else:
    print("F")
2.

下面的程式會印出什麼?

x = 7
print("odd" if x % 2 else "even")
3.

下面的程式會印出什麼?

n = 10
if n > 5:
    if n > 20:
        print("A")
    else:
        print("B")
else:
    print("C")
4.

下面的程式會印出什麼?

h = 30
h = h % 24 if h >= 24 else h
print(h)
第 1 次作答

實作:分數轉等第

程式會讀入一個分數(下方輸入是 78)。請完成兩個 TODO:用 if-elif-else 決定等第(90 以上 A、80 以上 B、70 以上 C、60 以上 D、其他 F),再用條件運算式印出「及格」或「不及格」。完成後可以改輸入的分數多試幾次。

你的輸出
預期輸出

重點精華回顧

  • Python 腳本的特性:一列一個敘述;# 是註解;冒號結尾的下一列要縮排,同一個區塊的縮排必須一致(建議 4 個空白)。
  • if:條件成立才執行區塊;if-else:二選一;if-elif-else:由上往下,只執行第一個成立的區塊。
  • 條件可以是任何值:0、None、空字串、空容器都是假,其他都是真。
  • 巢狀 if:if 的區塊裡還有 if,每多一層就多縮排一層。
  • 條件運算式 x if C else y:依條件得到兩個值之一,適合取代只為了指派一個值的 if-else。
這一課完成了!
Next lesson:流程控制:迴圈
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。