迴圈
Python 程式設計:深入解析「迴圈結構」 (for, while)
1. 什麼是迴圈?為什麼需要它?
想像一下,你需要列印出 1 到 100 的所有數字。如果沒有迴圈,你可能需要寫 100 次的 print() 指令,這顯然非常沒有效率。迴圈(Loop) 的目的就是為了解決這類重複性的工作。
在 Python 中,主要有兩種迴圈結構:
for迴圈:用來遍歷集合物件中的第一個至最後一個元素。搭配 range 物件,可以遍歷固定間隔值的整數。
Python 中有許多集合物件。例:while迴圈:只要指定的值為True,就持續執行。
str, list, set, tupple, map, range ...。2. for 迴圈:遍歷指定的集合物件
for 迴圈的核心概念是「複製出集合物件中的每一個元素來做指定的運算」。
語法樣式
for 變數 in 集合物件:
程式區塊範圍內,集合物件中的每一個元素,會從第一個至最後一個依序複製給變數
2.1 for 迴圈的常見用法
2.1.1 遍歷字串物件(str)
message = "Python"
for i in message:
print(i, sep="-")
# 輸出:
# P-y-t-h-o-n
2.1.2 使用 range() 函數建立 range 物件
當你需要一群固定間隔的整數時,range() 是你最好的朋友。它會產生一個不可變的數字集合,非常節省記憶體。
range() 主要有三種呼叫方式:
-
range(stop)指派一個大於 0 的正整數給
stop,環境會建立一個range物件。物件中會包含從0開始,直到stop - 1的連續整數。# 產生 0, 1, 2, 3, 4 for i in range(5): print(i, end=' ') # 輸出: 0 1 2 3 4 -
range(start, stop)指派兩個整數給
start與stop,正負值均可,但start必須小於stop,環境會建立一個range物件。物件中會包含從start開始,直到stop - 1的連續整數。# 產生 2, 3, 4, 5 for i in range(2, 6): print(i, end=' ') # 輸出: 2 3 4 5# 產生 -5, -4, -3, -2 for i in range(-5, -1): print(i, end=' ') # 輸出: -5 -4 -3 -2 -
range(start, stop, step)指派兩個整數給
start與stop,正負值均可。但如果start小於stop,就必須指派一個正值給step,環境會建立一個range物件。物件中會包含從start開始,直到stop - 1間隔為step的整數。如果start大於stop,就必須指派一個負值給step,環境會建立一個range物件。物件中會包含從start開始,直到stop + 1間隔為step的整數。# 印出 1 到 10 之間的所有奇數 (間隔值為 2) for i in range(1, 11, 2): print(i, end=' ') # 輸出: 1 3 5 7 9 # 從 5 倒數到 1 (間隔值為 -1) for i in range(5, 0, -1): print(i, end=' ') # 輸出: 5 4 3 2 1
練習 2.1.2.01 數字總和
給定 1 個大於 0 的正整數,運算出從 1 至該整數(含)之間所有數字的和並輸出 例 1 輸入:10輸出:55例 2 輸入:100輸出:5050例 3 輸入:1000輸出:500500
練習 2.1.2.02 乘方值
給定 2 個大於等於 0 的正整數。假設為 a, b。 運算出 a 的 b 次方的值並輸出。 例 1 輸入:2 5輸出:32說明: 2 的 5 次方值為 32。 例 2 輸入:3 0輸出:1例 3 輸入:0 5輸出:0
練習 2.1.2.03 奇數和與偶數和的差的絶對值
給定 1 個大於 0 的正整數。 分別運算出從 1 至該整數(含/若該整數為奇數)之間所有奇數的和 與從 2 至該整數(含/若該整數為偶數)之間所有偶數的和, 再運算出這兩個和的差的絶對值並輸出。 例 1 輸入:5輸出:3說明: 奇數=>1 3 5->9 偶數=>2 4->6 9-6 = 3 例 2 輸入:8輸出:4奇數=>1 3 5 7->16 偶數=>2 4 6 8->20 20-16=4 例 3 輸入:123輸出:61
練習 2.1.2.04 列印5的倍數
給定 2 個整數假設為 m, n ,m 不一定小於 n。 請由小到大,列印出 m 與 n 之間的所有 5 的倍數(含/若 m 或 n 為 5 的倍數)。 輸出的數字若一個以上用空格間隔。 若沒有數字可以輸出時,輸出 None. 例 1 輸入:2 15輸出:5 10 15例 2 輸入:13 2輸出:5 10例 3 輸入:5 20輸出:5 10 15 20例 4 輸入:5 5輸出:5例 5 輸入:6 9輸出:None
練習 2.1.2.05 有幾個因數
給定 1 個正整數。輸出該整數有幾個因數。 例 1 輸入:2輸出:2說明: 1 2 例 2 輸入:6輸出:4說明: 1 2 3 6 例 3 輸入:7輸出:2例 4 輸入:32輸出:6
2.1.3 巢狀迴圈 (Nested Loops)
範例: 列印九九乘法表
for i in range(1, 10): # 控制第一個數字 (從 1 到 9)
for j in range(1, 10): # 控制第二個數字 (從 1 到 9)
print(i, "*", j, "=", i*j, sep ="", end="\t")
print() # 換行
3. while
while 迴圈會不斷地執行,直到它的值為False時停止。
語法樣式:
while 布林值:
要重複執行的程式碼
while 迴圈的區塊內必須有能改變值的程式碼,否則會變成無窮迴圈!
3.1.1 以計數器為條件的迴圈
count = 0
while count < 5:
print(count)
count += 1 # 這是改變條件的關鍵
3.1.2 非以計數器為條件的迴圈
command = ""
while command.lower() != "quit":
command = input("請輸入指令 (輸入 'quit' 結束): ")
if command.lower() != "quit":
print(f"你輸入了: {command}")
print("程式結束。")
練習 3.1.2.01 2 的幾次方(2為底數的對數)
給定 1 個大於等於 1 的正整數,而且一定是 2 的某一個次方的值。 請運算並輸出它是 2 的幾次方。 例 輸入:16輸出:4例 輸入:256輸出:8例 輸入:1輸出:0
4. 迴圈控制敍述
有時候我們需要在迴圈執行到一半時改變它的正常流程。
4.1 break:立即終止迴圈
break 會完全跳出當前所在的迴圈。
numbers = [10, 25, 30, -5, 40, -12]
for num in numbers:
print(f"正在檢查: {num}")
if num < 0:
print(f"找到了第一個負數: {num}")
break # 找到了,跳出迴圈
4.2 continue:跳過本次,進入下次
continue 會立即結束本次迭代,直接開始下一次迭代。
numbers = [10, -2, 5, -8, 20]
total = 0
for num in numbers:
if num < 0:
continue # 如果是負數,跳過本次,檢查下一個
total += num
print(f"正數的總和是: {total}") # 輸出: 35
4.3 else 子句 in Loops
當迴圈正常結束(沒有被 break 中斷)時,else 區塊會被執行。
範例: 檢查一個數字是否為質數。
num_to_check = 13
for i in range(2, num_to_check):
if num_to_check % i == 0:
print(f"{num_to_check} 不是質數,可被 {i} 整除。")
break
else:
# 如果 for 迴圈從未被 break
print(f"{num_to_check} 是質數。")
5. 總結:for vs while
| 特性 | for 迴圈 | while 迴圈 |
|---|---|---|
| 核心概念 | 遍歷 (Iteration) | 條件 (Condition) |
| 適用時機 | 已知要重複的確切次數,或處理序列中的每一個元素。 | 不知道要重複幾次,只知道停止的條件。 |
| 常見範例 | 處理串列、執行 n 次任務。 | 使用者輸入驗證、遊戲主迴圈。 |
| 潛在風險 | (較少) | 容易造成無窮迴圈。 |


留言
張貼留言