Python - 嵌套循環

你好,有抱負的程式設計師!今天,我們將深入探討 Python 中嵌套循環的奇妙世界。作為你友善的鄰居電腦老師,我非常高興能引導你完成這次學習之旅。相信我,在上完這堂課後,你將能像專家一樣熟练使用循環!

Python - Nested Loops

嵌套循環是什麼?

在我們深入之前,先從基礎開始。想象一下你在整理衣櫥。你經過每一層架(這是一個循環),然後對每一層架上的所有物品進行排序(這是另一個循環,在第一個循環內)。在編程中,嵌套循環基本上就是這樣——循環中還有循環!

Python 嵌套 for 迴圈

讓我們從 for 迴圈開始,它在 Python 的世界裡就像一個可靠的老朋友。

基本結構

以下是嵌套 for 迴圈的一般結構:

for 外部變量 in 外部序列:
# 外部迴圈主體
for 內部變量 in 內部序列:
# 內部迴圈主體

簡單示例:乘法表

讓我們創建一個簡單的乘法表來更好地理解這一點:

for i in range(1, 6):
for j in range(1, 6):
print(f"{i} x {j} = {i*j}", end="\t")
print()  # 在每一行後移動到下一行

此代碼將輸出:

1 x 1 = 1    1 x 2 = 2    1 x 3 = 3    1 x 4 = 4    1 x 5 = 5
2 x 1 = 2    2 x 2 = 4    2 x 3 = 6    2 x 4 = 8    2 x 5 = 10
3 x 1 = 3    3 x 2 = 6    3 x 3 = 9    3 x 4 = 12   3 x 5 = 15
4 x 1 = 4    4 x 2 = 8    4 x 3 = 12   4 x 4 = 16   4 x 5 = 20
5 x 1 = 5    5 x 2 = 10   5 x 3 = 15   5 x 4 = 20   5 x 5 = 25

讓我們來解析一下:

  1. 外部迴圈(for i in range(1, 6))運行 5 次,代表行。
  2. 對外部迴圈的每次迭代,內部迴圈(for j in range(1, 6))運行 5 次,代表列。
  3. 我們打印出每個乘法結果,使用 end="\t" 來添加一個制表符而不是新行。
  4. 在每一行(外部迴圈迭代)之後,我們打印一個空行以移動到下一行。

實際示例:座位安排

想象你是一位老師(像我一樣!),正在為一班學生安排座位。讓我們創建一個座位表:

students = ["Alice", "Bob", "Charlie", "David", "Eve"]
rows = 3
seats_per_row = 2

seat_number = 0
for row in range(1, rows + 1):
print(f"Row {row}:")
for seat in range(1, seats_per_row + 1):
if seat_number < len(students):
print(f"  Seat {seat}: {students[seat_number]}")
seat_number += 1
else:
print(f"  Seat {seat}: Empty")
print()  # 行與行之間的空行

這將輸出:

Row 1:
Seat 1: Alice
Seat 2: Bob

Row 2:
Seat 1: Charlie
Seat 2: David

Row 3:
Seat 1: Eve
Seat 2: Empty

在這個例子中:

  1. 外部迴圈迭代每一行。
  2. 內部迴圈為每行的座位分配學生。
  3. 我們使用一個 seat_number 變量來跟蹤下一個要分配的學生。
  4. 如果學生分配完畢,我們將剩下的座位標記為“Empty”。

Python 嵌套 while 迴圈

現在,讓我們來認識一下 while 迴圈的表親——嵌套 while 迴圈。它就像一個警覺的守衛,不斷檢查一個條件。

基本結構

以下是嵌套 while 迴圈通常的樣子:

while 外部條件:
# 外部迴圈主體
while 內部條件:
# 內部迴圈主體

示例:數字金字塔

讓我們創建一個數字金字塔來看看嵌套 while 迴圈的運作:

row = 1
while row <= 5:
col = 1
while col <= row:
print(col, end=" ")
col += 1
print()  # 移動到下一行
row += 1

這將輸出:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

讓我們來解析一下:

  1. 外部的 while 迴圈控制行數(從 1 到 5)。
  2. 為了每行,內部的 while 迴圈打印從 1 到當前行數的數字。
  3. 我們在內部迴圈中增加 col,在外部迴圈中增加 row

實際示例:庫存檢查

想象你正在管理一家小店。你需要經常檢查庫存。讓我們用嵌套 while 迴圈來模擬這一過程:

inventory = {
"apples": 50,
"bananas": 30,
"oranges": 40
}

days = 1
while days <= 3:  # 檢查 3 天
print(f"Day {days} Inventory Check:")
for fruit, quantity in inventory.items():
while quantity > 0:
print(f"Checking {fruit}...")
quantity -= 10  # 模擬每次檢查銷售 10 單位
if quantity <= 20:
print(f"Low stock alert for {fruit}! Only {quantity} left.")
break  # 如果庫存低於 20,則停止檢查此水果
inventory[fruit] = quantity  # 更新庫存
print(f"End of Day {days} Inventory: {inventory}\n")
days += 1

這將輸出類似以下內容:

Day 1 Inventory Check:
Checking apples...
Checking apples...
Checking apples...
Low stock alert for apples! Only 20 left.
Checking bananas...
Low stock alert for bananas! Only 20 left.
Checking oranges...
Checking oranges...
Low stock alert for oranges! Only 20 left.
End of Day 1 Inventory: {'apples': 20, 'bananas': 20, 'oranges': 20}

Day 2 Inventory Check:
Checking apples...
Low stock alert for apples! Only 10 left.
Checking bananas...
Low stock alert for bananas! Only 10 left.
Checking oranges...
Low stock alert for oranges! Only 10 left.
End of Day 2 Inventory: {'apples': 10, 'bananas': 10, 'oranges': 10}

Day 3 Inventory Check:
Checking apples...
Low stock alert for apples! Only 0 left.
Checking bananas...
Low stock alert for bananas! Only 0 left.
Checking oranges...
Low stock alert for oranges! Only 0 left.
End of Day 3 Inventory: {'apples': 0, 'bananas': 0, 'oranges': 0}

在這個例子中:

  1. 外部的 while 迴圈模擬檢查庫存 3 天。
  2. 我們使用一個 for 迴圈來迭代庫存中的每種水果。
  3. 內部的 while 迴圈模擬檢查和銷售每種水果,直到庫存低於或等於 20 為止。
  4. 我們使用 break 在庫存低於 20 時停止檢查該水果。

總結

恭喜你!你剛剛掌握了 Python 中嵌套循環的技巧。請記住,嵌套循環是強大的工具,但必須明智地使用。如果使用不當,它們可能會導致你的代碼運行變慢。

像所有編程概念一樣,練習是關鍵。嘗試創建自己的嵌套循環情景——也許是一個棋盤設置,或者是一個學校的週課表。可能性是無窮的!

繼續編程,繼續學習,最重要的是,玩得開心!直到下次,這是你友善的鄰居電腦老師的簽名。開心循環!

Credits: Image by storyset