Python - Vòng Lặp Lồng Nhau

Xin chào, các bạn nhà lập trình đam mê! Hôm nay, chúng ta sẽ đi mạo hiểm vào thế giới thú vị của các vòng lặp lồng nhau trong Python. Là người dạy máy tính bạn thân thiện, tôi rất hứng thú để hướng dẫn các bạn trong chuyến hành trình này. Hãy tin tôi, bằng khi kết thúc bài học này, các bạn sẽ lặp như một chuyên gia!

Python - Nested Loops

Các Vòng Lặp Lồng Nhau Là Gì?

Trước khi bước vào phần sâu, hãy bắt đầu với những khái niệm cơ bản. Tưởng tượng bạn đang tổ chức tủ quần áo của mình. Bạn đi qua từng giá ( đó là một vòng lặp), và cho mỗi giá, bạn sắp xếp lại tất cả các món đồ trên đó ( đó là một vòng lặp bên trong vòng lặp đầu tiên). Đó chính là điều gì các vòng lặp lồng nhau trong lập trình - các vòng lặp bên trong các vòng lặp khác!

Vòng Lặp Lồng Nhau For trong Python

Hãy bắt đầu với vòng lặp for, nó như một người bạn thân thiện đáng tin cậy trong thế giới Python.

Cấu Trúc Cơ Bản

Dưới đây là cấu trúc chung của một vòng lặp lồng nhau for:

for outer_variable in outer_sequence:
# Thân vòng lặp ngoài
for inner_variable in inner_sequence:
# Thân vòng lặp trong

Ví Dụ Đơn Giản: Bảng Nhân

Hãy tạo một bảng nhân đơn giản để hiểu rõ hơn:

for i in range(1, 6):
for j in range(1, 6):
print(f"{i} x {j} = {i*j}", end="\t")
print()  # Chuyển đến dòng mới sau mỗi hàng

Mã này sẽ đầu ra:

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

Hãy phân tích nó:

  1. Vòng lặp ngoài (for i in range(1, 6)) chạy 5 lần, đại diện cho các hàng.
  2. Cho mỗi lần lặp của vòng lặp ngoài, vòng lặp trong (for j in range(1, 6)) chạy 5 lần, đại diện cho các cột.
  3. Chúng ta in mỗi kết quả nhân, sử dụng end="\t" để thêm một khoảng tab thay vì một dòng mới.
  4. Sau mỗi hàng (lần lặp vòng lặp ngoài), chúng ta in một dòng trống để chuyển đến hàng tiếp theo.

Ví Dụ Thực Tế: Thực Đoàn Ghế

Tưởng tượng bạn là một giáo viên (như tôi!) sắp xếp ghế cho lớp học. Hãy tạo một sơ đồ thực đoàn:

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

seat_number = 0
for row in range(1, rows + 1):
print(f"Hàng {row}:")
for seat in range(1, seats_per_row + 1):
if seat_number < len(students):
print(f"  Ghế {seat}: {students[seat_number]}")
seat_number += 1
else:
print(f"  Ghế {seat}: Trống")
print()  # Dòng trống giữa các hàng

Điều này sẽ đầu ra:

Hàng 1:
Ghế 1: Alice
Ghế 2: Bob

Hàng 2:
Ghế 1: Charlie
Ghế 2: David

Hàng 3:
Ghế 1: Eve
Ghế 2: Trống

Trong ví dụ này:

  1. Vòng lặp ngoài lặp qua từng hàng.
  2. Vòng lặp trong gán sinh viên vào các ghế trong mỗi hàng.
  3. Chúng ta sử dụng biến seat_number để theo dõi sinh viên mà bạn sẽ gán tiếp theo.
  4. Nếu chúng ta sử dụng hết sinh viên, chúng ta đánh dấu các ghế còn lại là "Trống".

Vòng Lặp Lồng Nhau while trong Python

Bây giờ, hãy gặp với vòng lặp while - vòng lặp while lồng nhau. Nó như một giám sát cẩn thận kiểm tra điều kiện.

Cấu Trúc Cơ Bản

Dưới đây là cách một vòng lặp lồng nhau while thường trông như thế nào:

while outer_condition:
# Thân vòng lặp ngoài
while inner_condition:
# Thân vòng lặp trong

Ví Dụ: Đỉnh Số

Hãy tạo một đỉnh số để thấy vòng lặp lồng nhau while hoạt động:

row = 1
while row <= 5:
col = 1
while col <= row:
print(col, end=" ")
col += 1
print()  # Chuyển đến dòng mới
row += 1

Điều này sẽ đầu ra:

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

Hãy phân tích nó:

  1. Vòng lặp while ngoài kiểm soát số hàng (từ 1 đến 5).
  2. Cho mỗi hàng, vòng lặp while trong in ra các số từ 1 đến số hàng hiện tại.
  3. Chúng ta tăng col trong vòng lặp trong và row trong vòng lặp ngoài.

Ví Dụ Thực Tế: Kiểm Tra Tồn Kho

Tưởng tượng bạn đang quản lý một cửa hàng nhỏ. Bạn cần kiểm tra tồn kho thường xuyên. Hãy mô hình hóa điều này với các vòng lặp lồng nhau while:

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

days = 1
while days <= 3:  # Kiểm tra trong 3 ngày
print(f"Ngày {days} Kiểm Tra Tồn Kho:")
for fruit, quantity in inventory.items():
while quantity > 0:
print(f"Kiểm tra {fruit}...")
quantity -= 10  # Mô hình hóa bán 10 đơn vị mỗi kiểm tra
if quantity <= 20:
print(f"Cảnh báo tồn kho thấp cho {fruit}! Chỉ còn {quantity} lại.")
break  # Dừng kiểm tra trái cây này nếu tồn kho thấp
inventory[fruit] = quantity  # Cập nhật tồn kho
print(f"Kết thúc ngày {days} Tồn Kho: {inventory}\n")
days += 1

Điều này sẽ đầu ra gần như như thế này:

Ngày 1 Kiểm Tra Tồn Kho:
Kiểm tra apples...
Kiểm tra apples...
Kiểm tra apples...
Cảnh báo tồn kho thấp cho apples! Chỉ còn 20 lại.
Kiểm tra bananas...
Cảnh báo tồn kho thấp cho bananas! Chỉ còn 20 lại.
Kiểm tra oranges...
Kiểm tra oranges...
Cảnh báo tồn kho thấp cho oranges! Chỉ còn 20 lại.
Kết thúc ngày 1 Tồn Kho: {'apples': 20, 'bananas': 20, 'oranges': 20}

Ngày 2 Kiểm Tra Tồn Kho:
Kiểm tra apples...
Cảnh báo tồn kho thấp cho apples! Chỉ còn 10 lại.
Kiểm tra bananas...
Cảnh báo tồn kho thấp cho bananas! Chỉ còn 10 lại.
Kiểm tra oranges...
Cảnh báo tồn kho thấp cho oranges! Chỉ còn 10 lại.
Kết thúc ngày 2 Tồn Kho: {'apples': 10, 'bananas': 10, 'oranges': 10}

Ngày 3 Kiểm Tra Tồn Kho:
Kiểm tra apples...
Cảnh báo tồn kho thấp cho apples! Chỉ còn 0 lại.
Kiểm tra bananas...
Cảnh báo tồn kho thấp cho bananas! Chỉ còn 0 lại.
Kiểm tra oranges...
Cảnh báo tồn kho thấp cho oranges! Chỉ còn 0 lại.
Kết thúc ngày 3 Tồn Kho: {'apples': 0, 'bananas': 0, 'oranges': 0}

Trong ví dụ này:

  1. Vòng lặp while ngoài mô hình hóa việc kiểm tra tồn kho trong 3 ngày.
  2. Chúng ta sử dụng một vòng lặp for để lặp qua mỗi loại trái cây trong tồn kho.
  3. Vòng lặp while trong mô hình hóa việc kiểm tra và bán mỗi loại trái cây cho đến khi tồn kho thấp hoặc hết hàng.
  4. Chúng ta sử dụng break để dừng việc kiểm tra loại trái cây nếu số lượng giảm xuống 20 hoặc dưới.

Kết Luận

Xin chúc mừng! Bạn vừa đã nắm vững kỹ năng của các vòng lặp lồng nhau trong Python. Hãy nhớ, các vòng lặp lồng nhau là công cụ mạnh mẽ, nhưng hãy sử dụng chúng một cách khôn ngoan. Chúng có thể làm cho mã của bạn chạy chậm hơn nếu không sử dụng hiệu quả.

Như với tất cả các khái niệm lập trình, thực hành là chìa khóa để thành thạo. Thử tạo các tình huống vòng lặp lồng nhau của riêng bạn - có thể là bàn cờ chess, hoặc lịch học hàng tuần. Các khả năng là vô hạn!

Hãy tiếp tục lập trình, học hỏi, và quan trọng nhất, hãy thích thú với nó! Chờ đợi buổi tiếp theo, đây là người dạy máy tính bạn thân thiện kính chào. Chúc các bạn lặp như một chuyên gia!

Credits: Image by storyset