返回文章列表

Python 迴圈控制敘述詳解

本文探討 Python 的迴圈控制敘述,包含 `while` 迴圈、`for` 迴圈和 `range()` 函式的應用,並搭配例項程式碼講解其用法,涵蓋階乘計算、序列生成、迭代、反序輸出、質數判斷、字串處理等,同時也說明 `break` 和 `continue` 的使用方式及差異。

程式語言 Python

Python 提供了 whilefor 兩種迴圈控制敘述,搭配 range() 函式可以有效率地處理重複性的任務。while 迴圈根據條件判斷執行,而 for 迴圈則適用於迭代序列元素。理解這兩種迴圈的特性及搭配使用,是 Python 程式設計的基礎。透過 breakcontinue 陳述式,可以更精細地控制迴圈流程,例如提前結束迴圈或跳過特定迭代。這些控制流程對於提升程式碼效率和可讀性至關重要,尤其在處理複雜邏輯或大量資料時更能展現其價值。

Python 迴圈控制敘述詳解

在 Python 程式設計中,迴圈控制敘述扮演著重要的角色。本篇文章將探討 while 迴圈、for 迴圈以及 range() 函式的應用,並透過例項程式碼來闡述其用法。

使用 while 迴圈解決問題

程式 5.6:計算數字的階乘

num = int(input("請輸入一個數字:"))
fact = 1
ans = 1
while fact <= num:
    ans = ans * fact
    fact = fact + 1
print("數字", num, "的階乘是:", ans)

內容解密:

  1. num = int(input("請輸入一個數字:")):讀取使用者輸入的數字並轉換為整數。
  2. fact = 1ans = 1:初始化變數 factans 為 1,其中 fact 用於計數,ans 用於儲存階乘結果。
  3. while fact <= num::當 fact 小於或等於 num 時,執行迴圈內的程式碼。
  4. ans = ans * fact:計算階乘,將當前 fact 的值乘以 ans
  5. fact = fact + 1:將 fact 加 1,進入下一次迴圈。
  6. print("數字", num, "的階乘是:", ans):輸出計算出的階乘結果。

輸出範例:

請輸入一個數字:6
數字 6 的階乘是: 720

使用 range() 函式生成序列

range() 函式是 Python 中的內建函式,用於生成一個整數序列。其基本語法為 range(begin, end, step),其中 begin 是起始值,end 是結束值(不包含),step 是步長。

範例 1:生成從 1 到 5 的整數序列

print(list(range(1, 6)))

內容解密:

  • range(1, 6) 生成從 1 到 5 的整數序列。
  • 使用 list() 將生成的序列轉換為列表輸出。

輸出:

[1, 2, 3, 4, 5]

使用 for 迴圈迭代序列

for 迴圈用於迭代序列中的每個元素。語法為 for var in sequence:,其中 var 是迭代變數,sequence 是要迭代的序列。

程式 5.8:使用 for 迴圈印出數字 1 到 5

for i in range(1, 6):
    print(i)
print("程式結束")

內容解密:

  1. for i in range(1, 6)::使用 range(1, 6) 生成從 1 到 5 的序列,並迭代每個值賦給 i
  2. print(i):印出當前迭代的值。
  3. print("程式結束"):迴圈結束後印出結束訊息。

輸出:

1
2
3
4
5
程式結束

更多 for 迴圈的應用

程式 5.10:印出數字 1 到 10 的反序

print("數字 1 到 10 的反序是:")
for i in range(10, 0, -1):
    print(i, end=" ")
print("\n程式結束")

內容解密:

  • range(10, 0, -1) 生成從 10 到 1 的反序序列。
  • print(i, end=" ") 以空格分隔印出每個數字。

輸出:

數字 1 到 10 的反序是:
10 9 8 7 6 5 4 3 2 1 
程式結束

迴圈控制敘述深入解析

在程式設計中,迴圈控制敘述扮演著舉足輕重的角色,它使得程式能夠重複執行特定的指令,直到滿足特定的條件為止。Python 中的 forwhile 迴圈提供了強大的迴圈控制功能,本文將探討這些迴圈的使用方法及其應用。

程式範例:計算特定數字的總和

首先,我們來看一個計算 1 到 20 之間不能被 2、3 或 5 整除的數字的總和的程式範例。

sum_of_numbers = 0
print("1 到 20 之間不能被 2、3 或 5 整除的數字:")
for i in range(1, 21):
    if i % 2 == 0 or i % 3 == 0 or i % 5 == 0:
        continue
    print(i)
    sum_of_numbers += i
print("總和 =", sum_of_numbers)

程式碼解析:

  1. 初始化變數 sum_of_numbers 為 0,用於儲存符合條件的數字的總和。
  2. 使用 for 迴圈遍歷 1 到 20 之間的數字。
  3. 在迴圈內,使用條件判斷檢查當前數字是否能被 2、3 或 5 整除。如果能,則跳過該數字;如果不能,則印出該數字並將其加到 sum_of_numbers 中。
  4. 最後,印出所有符合條件的數字的總和。

程式範例:找出四個數字中的最大數

接下來,我們來看看如何從使用者輸入的四個數字中找出最大數。

num1 = int(input("請輸入第一個數字:"))
num2 = int(input("請輸入第二個數字:"))
num3 = int(input("請輸入第三個數字:"))
num4 = int(input("請輸入第四個數字:"))

numbers = [num1, num2, num3, num4]
max_number = max(numbers)

print("最大數字 =", max_number)

程式碼解析:

  1. 使用 input 函式取得使用者輸入的四個數字,並將其轉換為整數。
  2. 將這四個數字存入一個列表 numbers 中。
  3. 使用 max 函式找出列表中的最大數字。
  4. 印出最大數字。

三角數的計算

三角數是指從 1 加到某個給定數字的總和。以下是一個計算三角數的程式範例。

n = int(input("請輸入一個數字:"))
triangular_number = sum(range(1, n + 1))
print(n, "的三角數是", triangular_number)

程式碼解析:

  1. 使用 input 函式取得使用者輸入的數字,並將其轉換為整數。
  2. 使用 sumrange 函式計算從 1 到該數字的總和,即三角數。
  3. 印出三角數。

費氏數列的產生

費氏數列是一種著名的數列,其特點是每個數字都是前兩個數字的總和。以下是一個產生費氏數列的程式範例。

def fibonacci(n):
    fib_sequence = [0, 1]
    while len(fib_sequence) < n:
        fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])
    return fib_sequence

n = int(input("請輸入要產生的費氏數列的項數:"))
print(fibonacci(n))

程式碼解析:

  1. 定義一個函式 fibonacci,用於產生費氏數列。
  2. 在函式內,初始化一個列表 fib_sequence,包含費氏數列的前兩個數字 0 和 1。
  3. 使用 while 迴圈不斷追加新的數字到 fib_sequence 中,直到達到指定的項數。
  4. 傳回產生的費氏數列。

###巢狀迴圈的應用

巢狀迴圈是指在一個迴圈內包含另一個迴圈。以下是一個使用巢狀迴圈來顯示乘法表的程式範例。

print("乘法表:")
for i in range(1, 11):
    for j in range(1, 6):
        print(f"{i*j:4d}", end=" ")
    print()

程式碼解析:

  1. 使用兩個巢狀的 for 迴圈,外層迴圈控制行數,內層迴圈控制每行的輸出。
  2. 在內層迴圈中,計算並印出乘法表的內容,使用格式化輸出使得表格對齊。

星號圖案的顯示

以下是一個使用巢狀迴圈來顯示星號圖案的程式範例。

print("星號圖案:")
for i in range(5, 0, -1):
    for j in range(i):
        print("*", end=" ")
    print()

程式碼解析:

  1. 使用兩個巢狀的 for 迴圈,外層迴圈控制行數,內層迴圈控制每行的星號數量。
  2. 在內層迴圈中,印出星號,並在每行結束後換行。

break敘述的使用

break敘述用於立即終止迴圈。以下是一個簡單的例子。

for i in range(10):
    if i == 5:
        break
    print(i)

程式碼解析:

  1. 在這個例子中,當 i 等於 5 時,break敘述會被執行,導致迴圈立即終止。
  2. 因此,只有 0 到 4 的數字會被印出。

Python 迴圈控制敘述深度解析

在 Python 程式設計中,迴圈控制敘述扮演著至關重要的角色。breakcontinue 是兩種主要的迴圈控制敘述,它們能夠精確控制迴圈的執行流程。本文將探討這兩種敘述的用法、原理及實際應用案例。

break 敘述詳解

break 敘述用於立即終止當前迴圈的執行,無論是 for 迴圈還是 while 迴圈。當程式執行到 break 時,會直接跳出迴圈,繼續執行迴圈後的程式碼。

break 在 while 迴圈中的運作原理

while 測試布林運算式:
    迴圈主體
    if 條件:
        break
    迴圈主體
    陳述式

break 在 for 迴圈中的運作原理

for 變數 in 序列:
    迴圈主體
    if 條件:
        break
    迴圈主體
    陳述式

程式範例:使用 break 列印數字

print("1 到 10 的數字如下:")
for i in range(1, 100, 1):
    if i == 11:
        break
    else:
        print(i, end=" ")

輸出結果:

1 到 10 的數字如下:
1 2 3 4 5 6 7 8 9 10 

程式碼解析:

  1. 使用 for 迴圈迭代數字從 1 到 100。
  2. i 等於 11 時,執行 break,立即終止迴圈。
  3. 列印結果為 1 到 10 的數字。

程式範例:判斷質數

num = int(input("請輸入數字:"))
flag = 1
for i in range(2, num):
    if num % i == 0:
        flag = 0
        break
if flag == 1:
    print(num, "是質數")
else:
    print(num, "不是質數")

輸出結果(測試案例):

# 測試案例1:
請輸入數字:23
23 是質數

# 測試案例2:
請輸入數字:12
12 不是質數

程式碼解析:

  1. 輸入一個數字並檢查是否為質數。
  2. 使用 for 迴圈檢查從 2 到 num-1 是否能整除 num
  3. 若能整除,則設定 flag = 0,並使用 break 終止迴圈。
  4. 根據 flag 值判斷並列印結果。

continue 敘述詳解

continuebreak 相反,它用於跳過當前迭代中剩餘的程式碼,直接進入下一次迭代。

continue 在 while 迴圈中的運作原理

while 測試布林運算式:
    迴圈主體
    if 條件:
        continue
    迴圈主體
    陳述式

continue 在 for 迴圈中的運作原理

for 變數 in 序列:
    迴圈主體
    if 條件:
        continue
    迴圈主體
    陳述式

程式範例:使用 continue 列印數字

for i in range(1, 11, 1):
    if i == 5:
        continue
    print(i, end=" ")

輸出結果:

1 2 3 4 6 7 8 9 10 

程式碼解析:

  1. 使用 for 迴圈迭代數字從 1 到 10。
  2. i 等於 5 時,執行 continue,跳過列印操作,直接進入下一次迭代。

程式範例:移除字串中的空白

str1 = input("請輸入字串:")
print("輸入的字串是:", str1)
print("移除空白後的字串:")
for i in str1:
    if i == " ":
        continue
    print(i, end="")

輸出結果:

請輸入字串:Hello World
輸入的字串是: Hello World 
移除空白後的字串:
HelloWorld

程式碼解析:

  1. 輸入一個字串並迭代每個字元。
  2. 若字元是空白,則執行 continue,跳過列印操作。
  3. 最終輸出移除空白的字串。

break 與 continue 的比較

特性breakcontinue
功能終止當前迴圈跳過當前迭代剩餘程式碼
控制流程跳出迴圈,執行後續陳述式直接進入下一次迭代
對迴圈的影響終止迴圈不終止迴圈

Charles Babbage 公式生成質數

查爾斯·巴貝奇(Charles Babbage)提出了一個公式用於生成質數:$T = X^2 + X + 41$。以下是一個 Python 程式,用於計算 $X$ 從 0 到 5 的 $T$ 值,並列印相關結果。

print('{}\t{}\t{}\t{}'.format('D2', 'D1', 'T', 'X'))
print('
---
-
---
-
---
-
---
-
---
-
---
---
')
for i in range(0, 6):
    x = i
    T = (x*x) + x + 41
    if i == 0:
        print('\t\t{}\t{}'.format(T, i))
    elif i > 0 and i < 2:
        a = ((x-1)*(x-1) + (x-1) + 41)
        print('\t{}\t{}\t{}'.format(T - a, T, i))
    else:
        a = ((x-1)*(x-1) + (x-1) + 41)
        b = ((x-2)*(x-2) + (x-2) + 41)
        c = (T - a) - (a - b)
        print('{}\t{}\t{}\t{}'.format(c, T - a, T, i))

輸出結果:

D2      D1      T       X
---
-
---
-
---
-
---
-
---
-
---
---
                41      0
        2       43      1
        4       47      2
2       6       53      3
2       8       61      4
2       10      71      5

程式碼解析:

  1. 使用 for 迴圈迭代 $X$ 從0到5。
  2. 對每個 $X$ 值,計算 $T = X^2 + X +41$。
  3. 分別根據 $i$ 的值列印對應的 $D2$、$D1$、$T$ 和 $X$。

迴圈控制陳述(Loop Control Statements)

總覽

迴圈是指重複執行一組陳述固定次數的過程。迭代則是指在迴圈內的一次陳述執行。Python支援兩種迴圈控制陳述:for迴圈和while迴圈。while迴圈是條件控制的迴圈,而for迴圈則是計數控制的迴圈,用於固定次數的執行。

關鍵術語

  • while迴圈:條件控制迴圈
  • for迴圈:計數控制迴圈
  • range():產生整數列表
  • 巢狀迴圈:迴圈內的迴圈
  • break陳述:立即終止迴圈
  • continue陳述:跳過當前迭代,繼續下一次迭代

複習題

多選題

  1. for count in range(5): 的迴圈會執行幾次?

    • a. 5次
    • b. 4次
    • c. 6次
    • d. 3次

    答案:a. 5次

  2. 以下程式的輸出結果是什麼?

    count = 35
    for x in range(0,10):
        count = count - 1
        if x == 2:
            break
        print(count)
    
    • a. 35
    • b. 32
    • c. 35, 34, 33
    • d. 34, 33, 32

    答案:c. 35, 34, 33

程式碼解析

count = 35
for x in range(0,10):
    count = count - 1
    if x == 2:
        break
    print(count)

內容解密:

  1. 初始化 count 為35。
  2. for 迴圈遍歷 range(0,10),即從0到9。
  3. 在每次迭代中,count 減1。
  4. x 等於2時,break 陳述終止迴圈。
  5. x 為0和1時,印出 count 的值。

練習題

  1. 請將以下的for迴圈轉換成while迴圈。

    for i in range(50,0,-2):
        print(i,end=' ')
    

    程式碼實作

    i = 50
    while i > 0:
        print(i, end=' ')
        i -= 2
    

    內容解密:

    • 初始化 i 為50。
    • i 大於0時,印出 i 的值,並將 i 減2。

程式設計作業

  1. 編寫一個程式,要求輸入n,並印出一系列5的冪,從5^0到5^n,每行一個數字。

    程式碼實作

    def print_powers_of_five(n):
        if n < 0:
            print("輸入的數字必須是正整數。")
            return
    
        for i in range(n + 1):
            print(5 ** i)
    
    n = int(input("請輸入一個正整數: "))
    print_powers_of_five(n)
    

    內容解密:

    • 定義函式 print_powers_of_five(n),檢查 n 是否為負數。
    • 使用 for 迴圈計算並印出5的冪。
  2. 編寫一個程式,顯示以下的表格。

    公斤      克
    1       1000
    2       2000
    3       3000
    

    程式碼實作

    def print_table():
        print("公斤\t克")
        for i in range(1,4):
            print(f"{i}\t{i * 1000}")
    
    print_table()
    

    內容解密:

    • 定義函式 print_table(),印出表格標題。
    • 使用 for 迴圈計算並印出對應的克數。