Python 提供了 while 和 for 兩種迴圈控制敘述,搭配 range() 函式可以有效率地處理重複性的任務。while 迴圈根據條件判斷執行,而 for 迴圈則適用於迭代序列元素。理解這兩種迴圈的特性及搭配使用,是 Python 程式設計的基礎。透過 break 和 continue 陳述式,可以更精細地控制迴圈流程,例如提前結束迴圈或跳過特定迭代。這些控制流程對於提升程式碼效率和可讀性至關重要,尤其在處理複雜邏輯或大量資料時更能展現其價值。
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)
內容解密:
num = int(input("請輸入一個數字:")):讀取使用者輸入的數字並轉換為整數。fact = 1和ans = 1:初始化變數fact和ans為 1,其中fact用於計數,ans用於儲存階乘結果。while fact <= num::當fact小於或等於num時,執行迴圈內的程式碼。ans = ans * fact:計算階乘,將當前fact的值乘以ans。fact = fact + 1:將fact加 1,進入下一次迴圈。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("程式結束")
內容解密:
for i in range(1, 6)::使用range(1, 6)生成從 1 到 5 的序列,並迭代每個值賦給i。print(i):印出當前迭代的值。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 中的 for 和 while 迴圈提供了強大的迴圈控制功能,本文將探討這些迴圈的使用方法及其應用。
程式範例:計算特定數字的總和
首先,我們來看一個計算 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)
程式碼解析:
- 初始化變數
sum_of_numbers為 0,用於儲存符合條件的數字的總和。 - 使用
for迴圈遍歷 1 到 20 之間的數字。 - 在迴圈內,使用條件判斷檢查當前數字是否能被 2、3 或 5 整除。如果能,則跳過該數字;如果不能,則印出該數字並將其加到
sum_of_numbers中。 - 最後,印出所有符合條件的數字的總和。
程式範例:找出四個數字中的最大數
接下來,我們來看看如何從使用者輸入的四個數字中找出最大數。
num1 = int(input("請輸入第一個數字:"))
num2 = int(input("請輸入第二個數字:"))
num3 = int(input("請輸入第三個數字:"))
num4 = int(input("請輸入第四個數字:"))
numbers = [num1, num2, num3, num4]
max_number = max(numbers)
print("最大數字 =", max_number)
程式碼解析:
- 使用
input函式取得使用者輸入的四個數字,並將其轉換為整數。 - 將這四個數字存入一個列表
numbers中。 - 使用
max函式找出列表中的最大數字。 - 印出最大數字。
三角數的計算
三角數是指從 1 加到某個給定數字的總和。以下是一個計算三角數的程式範例。
n = int(input("請輸入一個數字:"))
triangular_number = sum(range(1, n + 1))
print(n, "的三角數是", triangular_number)
程式碼解析:
- 使用
input函式取得使用者輸入的數字,並將其轉換為整數。 - 使用
sum和range函式計算從 1 到該數字的總和,即三角數。 - 印出三角數。
費氏數列的產生
費氏數列是一種著名的數列,其特點是每個數字都是前兩個數字的總和。以下是一個產生費氏數列的程式範例。
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))
程式碼解析:
- 定義一個函式
fibonacci,用於產生費氏數列。 - 在函式內,初始化一個列表
fib_sequence,包含費氏數列的前兩個數字 0 和 1。 - 使用
while迴圈不斷追加新的數字到fib_sequence中,直到達到指定的項數。 - 傳回產生的費氏數列。
###巢狀迴圈的應用
巢狀迴圈是指在一個迴圈內包含另一個迴圈。以下是一個使用巢狀迴圈來顯示乘法表的程式範例。
print("乘法表:")
for i in range(1, 11):
for j in range(1, 6):
print(f"{i*j:4d}", end=" ")
print()
程式碼解析:
- 使用兩個巢狀的
for迴圈,外層迴圈控制行數,內層迴圈控制每行的輸出。 - 在內層迴圈中,計算並印出乘法表的內容,使用格式化輸出使得表格對齊。
星號圖案的顯示
以下是一個使用巢狀迴圈來顯示星號圖案的程式範例。
print("星號圖案:")
for i in range(5, 0, -1):
for j in range(i):
print("*", end=" ")
print()
程式碼解析:
- 使用兩個巢狀的
for迴圈,外層迴圈控制行數,內層迴圈控制每行的星號數量。 - 在內層迴圈中,印出星號,並在每行結束後換行。
break敘述的使用
break敘述用於立即終止迴圈。以下是一個簡單的例子。
for i in range(10):
if i == 5:
break
print(i)
程式碼解析:
- 在這個例子中,當
i等於 5 時,break敘述會被執行,導致迴圈立即終止。 - 因此,只有 0 到 4 的數字會被印出。
Python 迴圈控制敘述深度解析
在 Python 程式設計中,迴圈控制敘述扮演著至關重要的角色。break 和 continue 是兩種主要的迴圈控制敘述,它們能夠精確控制迴圈的執行流程。本文將探討這兩種敘述的用法、原理及實際應用案例。
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
程式碼解析:
- 使用
for迴圈迭代數字從 1 到 100。 - 當
i等於 11 時,執行break,立即終止迴圈。 - 列印結果為 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 不是質數
程式碼解析:
- 輸入一個數字並檢查是否為質數。
- 使用
for迴圈檢查從 2 到num-1是否能整除num。 - 若能整除,則設定
flag = 0,並使用break終止迴圈。 - 根據
flag值判斷並列印結果。
continue 敘述詳解
continue 與 break 相反,它用於跳過當前迭代中剩餘的程式碼,直接進入下一次迭代。
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
程式碼解析:
- 使用
for迴圈迭代數字從 1 到 10。 - 當
i等於 5 時,執行continue,跳過列印操作,直接進入下一次迭代。
程式範例:移除字串中的空白
str1 = input("請輸入字串:")
print("輸入的字串是:", str1)
print("移除空白後的字串:")
for i in str1:
if i == " ":
continue
print(i, end="")
輸出結果:
請輸入字串:Hello World
輸入的字串是: Hello World
移除空白後的字串:
HelloWorld
程式碼解析:
- 輸入一個字串並迭代每個字元。
- 若字元是空白,則執行
continue,跳過列印操作。 - 最終輸出移除空白的字串。
break 與 continue 的比較
| 特性 | break | continue |
|---|---|---|
| 功能 | 終止當前迴圈 | 跳過當前迭代剩餘程式碼 |
| 控制流程 | 跳出迴圈,執行後續陳述式 | 直接進入下一次迭代 |
| 對迴圈的影響 | 終止迴圈 | 不終止迴圈 |
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
程式碼解析:
- 使用
for迴圈迭代 $X$ 從0到5。 - 對每個 $X$ 值,計算 $T = X^2 + X +41$。
- 分別根據 $i$ 的值列印對應的 $D2$、$D1$、$T$ 和 $X$。
迴圈控制陳述(Loop Control Statements)
總覽
迴圈是指重複執行一組陳述固定次數的過程。迭代則是指在迴圈內的一次陳述執行。Python支援兩種迴圈控制陳述:for迴圈和while迴圈。while迴圈是條件控制的迴圈,而for迴圈則是計數控制的迴圈,用於固定次數的執行。
關鍵術語
- while迴圈:條件控制迴圈
- for迴圈:計數控制迴圈
- range():產生整數列表
- 巢狀迴圈:迴圈內的迴圈
- break陳述:立即終止迴圈
- continue陳述:跳過當前迭代,繼續下一次迭代
複習題
多選題
for count in range(5):的迴圈會執行幾次?- a. 5次
- b. 4次
- c. 6次
- d. 3次
答案:a. 5次
以下程式的輸出結果是什麼?
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)
內容解密:
- 初始化
count為35。 for迴圈遍歷range(0,10),即從0到9。- 在每次迭代中,
count減1。 - 當
x等於2時,break陳述終止迴圈。 - 在
x為0和1時,印出count的值。
練習題
請將以下的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。
- 初始化
程式設計作業
編寫一個程式,要求輸入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的冪。
- 定義函式
編寫一個程式,顯示以下的表格。
公斤 克 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迴圈計算並印出對應的克數。
- 定義函式