迴圈#

Python 提供 forwhile 兩種迴圈。for 用來遍歷可迭代物件,while 在條件成立時持續執行。


for 迴圈#

for 迴圈用來 逐一遍歷 可迭代的物件(串列、字串、range 等):

1
2
3
4
5
6
7
8
9
fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(fruit)

# 輸出:
# apple
# banana
# cherry

遍歷字串#

1
2
3
4
5
6
7
8
9
for char in "Python":
    print(char)

# P
# y
# t
# h
# o
# n

range() 函式#

range() 產生一個整數序列,常搭配 for 迴圈使用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# range(stop):從 0 到 stop-1
for i in range(5):
    print(i)   # 0 1 2 3 4

# range(start, stop):從 start 到 stop-1
for i in range(2, 6):
    print(i)   # 2 3 4 5

# range(start, stop, step):指定步長
for i in range(0, 10, 2):
    print(i)   # 0 2 4 6 8

# 負步長(倒數)
for i in range(5, 0, -1):
    print(i)   # 5 4 3 2 1

enumerate() 同時取索引與值#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
fruits = ["apple", "banana", "cherry"]

for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

# 0: apple
# 1: banana
# 2: cherry

# 指定起始索引
for i, fruit in enumerate(fruits, start=1):
    print(f"第 {i} 個:{fruit}")

# 第 1 個:apple
# 第 2 個:banana
# 第 3 個:cherry

zip() 同時遍歷多個序列#

1
2
3
4
5
6
7
8
9
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]

for name, score in zip(names, scores):
    print(f"{name}{score} 分")

# Alice:85 分
# Bob:92 分
# Charlie:78 分

while 迴圈#

while 迴圈在條件為 True 時持續執行:

1
2
3
4
5
6
7
count = 0

while count < 5:
    print(count)
    count += 1

# 0 1 2 3 4

常見用法:等待使用者輸入#

1
2
3
4
5
6
7
while True:
    answer = input("請輸入 'yes' 繼續:")
    if answer == "yes":
        break
    print("請重新輸入")

print("繼續執行...")

breakcontinueelse#

break:中斷迴圈#

1
2
3
4
5
6
for i in range(10):
    if i == 5:
        break
    print(i)

# 0 1 2 3 4

continue:跳過本次迭代#

1
2
3
4
5
6
for i in range(10):
    if i % 2 == 0:
        continue  # 跳過偶數
    print(i)

# 1 3 5 7 9

else:迴圈正常結束後執行#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# for...else:for 迴圈沒有被 break 中斷時,執行 else
for i in range(5):
    print(i)
else:
    print("迴圈正常結束")

# 有 break 時,else 不執行
target = 7
for i in range(10):
    if i == target:
        print(f"找到 {target}!")
        break
else:
    print(f"找不到 {target}")

巢狀迴圈#

迴圈可以 巢狀 (迴圈內有迴圈):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i} × {j} = {i * j}")
    print("---")

# 1 × 1 = 1
# 1 × 2 = 2
# 1 × 3 = 3
# ---
# 2 × 1 = 2
# ...

九九乘法表#

1
2
3
4
for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i}×{j}={i*j:2d}", end="  ")
    print()

串列推導式(List Comprehension)#

串列推導式的核心是 for 迴圈,語法借用了本章的迴圈概念,所以在這裡先認識它的樣子:

1
2
3
4
5
6
7
8
# 傳統 for 迴圈
squares = []
for i in range(1, 6):
    squares.append(i ** 2)

# 串列推導式:把 for 迴圈「壓縮」進方括號
squares = [i ** 2 for i in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

完整語法說明(篩選條件、if-else 轉換、巢狀推導式)請見 CH06:串列


常用迴圈技巧#

累加與計算#

1
2
3
4
5
6
7
8
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

total = sum(numbers)
average = total / len(numbers)
print(f"總和:{total},平均:{average}")

# 找最大值與最小值
print(f"最大值:{max(numbers)},最小值:{min(numbers)}")

使用 any()all()#

1
2
3
4
5
6
7
8
9
scores = [85, 92, 78, 60, 95]

# any():有任何一個滿足條件就回傳 True
has_perfect = any(s == 100 for s in scores)
print(has_perfect)  # False

# all():所有都滿足條件才回傳 True
all_pass = all(s >= 60 for s in scores)
print(all_pass)  # True

反轉與排序#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# 排序(不修改原串列)
sorted_nums = sorted(numbers)
print(sorted_nums)  # [1, 1, 2, 3, 4, 5, 6, 9]

# 由大到小
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc)  # [9, 6, 5, 4, 3, 2, 1, 1]

# 反轉
for num in reversed(numbers):
    print(num, end=" ")