🔄 Python 迴圈語法實務解說~邱允文

 

🔄 Python 迴圈語法實務解說

以下針對 Python 程式語言中的迴圈語法 (for 迴圈與 while 迴圈),提供詳細的步驟解說、案例分析和提示詞範例。


1. 📋 for 迴圈:疊代式迴圈 (Iterative Loop)

for 迴圈用於遍歷任何可迭代物件(Iterable)中的元素,例如:列表 (List)元組 (Tuple)字串 (String)字典 (Dictionary)範圍 (Range)

📌 步驟詳解

  1. 定義結構: 使用關鍵字 for,後接一個迴圈變數(Loop Variable)。

  2. 指定來源: 使用關鍵字 in,後接你想要遍歷的可迭代物件

  3. 執行區塊: 迴圈每執行一次,迴圈變數會自動被賦予可迭代物件中的下一個元素值,然後執行縮排(通常是 4 個空格)內的程式碼區塊。

  4. 自動終止: 當所有元素都被遍歷完畢後,迴圈會自動終止。

  5. 搭配 range() 常用 range(start, stop, step) 函式來產生一個數字序列,方便進行計數或固定次數的重複操作。

💡 案例分析 (3 個)

案例 1:遍歷字典的鍵值對 (.items())

  • 目的: 遍歷一個儲存國家與首都的字典,同時取得鍵(國家)和值(首都)。

  • 細節講解:

    • 使用 .items() 方法將字典轉換為一個包含 (鍵, 值) 元組的可迭代視圖。

    • for 語句中,同時定義兩個變數 countrycapital 來接收解包後的 (鍵, 值)。

    • 透過 f-string 格式化輸出,展示鍵與值的對應關係。

  • 程式碼:

    Python
    capitals = {"Japan": "Tokyo", "France": "Paris", "Germany": "Berlin"}
    for country, capital in capitals.items():
        print(f"The capital of {country} is {capital}.")
    
    • 輸出細節: 依序輸出 "The capital of Japan is Tokyo."、"The capital of France is Paris."、"The capital of Germany is Berlin."。

案例 2:使用 range() 配合步長進行倒數

  • 目的: 從 10 開始,以 2 為步長倒數到 0(包含 0)。

  • 細節講解:

    • range(10, -1, -2) 的參數分別是:起始值 10終止值 -1(不包含,所以會數到 0)、步長 -2(表示遞減)。

    • 這展示了 range() 不僅可以遞增,也可以透過負數步長實現遞減操作。

  • 程式碼:

    Python
    for countdown in range(10, -1, -2):
        if countdown == 0:
            print("LIFT OFF!")
        else:
            print(countdown)
    
    • 輸出細節: 依序輸出 108642,最後輸出 LIFT OFF!

案例 3:遍歷列表並使用 enumerate() 追蹤索引

  • 目的: 遍歷一個待辦事項列表,並印出每個事項的編號(索引)和內容。

  • 細節講解:

    • 使用內建函式 enumerate(todo_list),它會產生 (索引, 元素) 的元組。

    • for 語句中,使用 indexitem 來接收索引和元素。

    • 因為索引從 0 開始,所以輸出時使用 index + 1 來呈現使用者友善的編號。

  • 程式碼:

    Python
    todo_list = ["Buy groceries", "Finish report", "Call plumber"]
    for index, item in enumerate(todo_list):
        print(f"Task #{index + 1}: {item}")
    
    • 輸出細節: 依序輸出 "Task #1: Buy groceries"、"Task #2: Finish report"、"Task #3: Call plumber"。

💡 提示詞 (Prompt) 範例

Prompt 範例:

Python 語法:for 迴圈

請生成一個包含 3 個 獨立案例的 for 迴圈程式碼。這 3 個案例需涵蓋以下情境:

  1. 遍歷一個包含五個元素的元組,並將每個元素的字串轉換為大寫後輸出。

  2. 使用 range() 函式計算 之間所有奇數的總和。

  3. 遍歷一個數字列表,並使用 break 關鍵字,在列表的總和超過 50 時立即終止迴圈,並印出當時的總和。


2. 📝 while 迴圈:條件式迴圈 (Conditional Loop)

while 迴圈會在給定的布林條件True 時,重複執行程式碼區塊,直到條件評估為 False。它更適用於不知道迴圈需要執行多少次,只知道終止條件的情況。

📌 步驟詳解

  1. 初始化: 在迴圈開始前,必須先初始化一個或多個控制變數

  2. 定義條件: 使用關鍵字 while,後接一個布林表達式作為執行條件。

  3. 執行與更新: 只要條件為 True,就會執行縮排內的程式碼。至關重要的是,在迴圈體內必須有語句能使控制變數發生變化,最終導致條件變為 False,以避免無限迴圈

  4. 終止: 條件一旦評估為 False,迴圈立即終止。

💡 案例分析 (3 個)

案例 1:從數字中提取位數

  • 目的: 計算一個正整數 (num) 有多少個位數。

  • 細節講解:

    • 條件 num > 0 確保迴圈持續執行,直到數字被分解完畢。

    • num = num // 10 使用整數除法將數字的最低位數移除(例如:)。

    • count += 1 每次移除一位數,計數器加一。

  • 程式碼:

    Python
    num = 87654
    count = 0
    while num > 0:
        num = num // 10
        count += 1
    print(f"The number has {count} digits.")
    
    • 輸出細節: 輸出 "The number has 5 digits."。

案例 2:使用者密碼重試機制

  • 目的: 模擬密碼輸入,最多允許 3 次嘗試。

  • 細節講解:

    • 使用 attempts < 3 作為迴圈條件,控制最大嘗試次數。

    • 如果密碼不正確,attempts 會增加,直到達到 3 次終止迴圈。

    • 如果密碼正確,使用 break 提前終止迴圈,並執行 else 區塊(但此處沒有 else)。

  • 程式碼:

    Python
    correct_password = "OpenSesame"
    attempts = 0
    while attempts < 3:
        user_input = input("Enter password: ")
        if user_input == correct_password:
            print("Login Successful!")
            break
        else:
            attempts += 1
            print(f"Incorrect password. Attempts left: {3 - attempts}")
    if attempts == 3:
        print("Access denied.")
    
    • 輸出細節: 若使用者輸入錯誤兩次,第三次正確,會輸出 "Incorrect password...", "Incorrect password...", "Login Successful!"。

3. 使用 else 區塊(當迴圈自然結束時執行)

  • 目的: 尋找列表中第一個大於 100 的數字。如果整個列表都沒有,則印出特定訊息。

  • 細節講解:

    • while 迴圈後的 else 區塊在迴圈條件自然變為 False(即 i 達到列表長度)時執行。

    • 如果迴圈是透過 break 語句終止的(即找到了目標數字),那麼 else 區塊將會被跳過

  • 程式碼:

    Python
    data = [10, 50, 90, 150, 200]
    i = 0
    while i < len(data):
        if data[i] > 100:
            print(f"Found first number > 100 at index {i}: {data[i]}")
            break
        i += 1
    else:
        print("No number greater than 100 found in the list.")
    
    • 輸出細節: 輸出 "Found first number > 100 at index 3: 150"。如果列表是 [10, 50, 90],則輸出 "No number greater than 100 found in the list."。

💡 提示詞 (Prompt) 範例

Prompt 範例:

Python 語法:while 迴圈

請生成一個包含 3 個 獨立案例的 while 迴圈程式碼。這 3 個案例需涵蓋以下情境:

  1. 使用 while 迴圈計算 (n=6) 的費波那契數列(Fibonacci Sequence)並印出前 6 項。

  2. 使用 while 迴圈從 開始,不斷除以 ,直到結果小於或等於 ,並記錄總共除了多少次。

  3. 創建一個包含 while 迴圈和其後 else 區塊的案例,用來檢查一個列表是否包含特定字串 ("STOP")。如果找到了,使用 break 終止;如果整個列表遍歷完畢都沒找到,則執行 else 區塊印出「未發現指令」。

留言