Vòng lặp lồng nhau không chỉ là một khái niệm lý thuyết mà còn là công cụ thiết yếu trong nhiều ứng dụng thực tế của Python. Bạn muốn biết cách duyệt ma trận, tạo ra các mô hình phức tạp, hay xử lý dữ liệu có nhiều lớp cấu trúc? Bài viết này sẽ giúp bạn hiểu rõ hơn về vòng lặp lồng nhau với các ví dụ minh họa để bạn áp dụng vào công việc của mình một cách nhanh chóng.
Vòng lặp lồng nhau trong Python là gì?
Vòng lặp lồng nhau (Nested Loops) trong Python được hiểu là một cấu trúc khi bạn viết một hoặc nhiều vòng lặp nằm bên trong một vòng lặp khác. Vòng lặp chính được xem là vòng lặp ngoài (outer loop), còn các vòng lặp nằm bên trong được gọi là vòng lặp trong (inner loop).
Ngôn ngữ lập trình Python cho phép sử dụng một vòng lặp bên trong một vòng lặp khác. Vòng lặp là một khối mã thực thi các chỉ thị cụ thể một cách lặp đi lặp lại. Có hai loại vòng lặp là for
và while
. Chúng ta có thể tạo ra các vòng lặp lồng nhau bằng cả hai loại này.
Bạn có thể đặt bất kỳ loại vòng lặp nào vào bên trong bất kỳ loại vòng lặp nào khác. Ví dụ: vòng lặp for
có thể nằm trong vòng lặp while
và ngược lại.
Vòng lặp for lồng nhau trong Python
Vòng lặp for
chứa một hoặc nhiều vòng lặp for
khác bên trong được gọi là vòng lặp for
lồng nhau. Vòng lặp for
thường được dùng để duyệt qua các phần tử của một dãy (sequence), ví dụ như list
, tuple
hoặc string
, và thực hiện cùng một thao tác lên mỗi phần tử đó.
Cú pháp của vòng lặp for lồng nhau
Cú pháp của một câu lệnh vòng lặp for lồng nhau trong Python như sau:
for bien_lap_ngoai in day_ngoai:
for bien_lap_trong in day_trong:
cac_cau_lenh(s)
cac_cau_lenh(s)
Lưu ý: Đoạn code trên chỉ mô tả cú pháp tổng quát của vòng lặp for lồng nhau, chứ không phải một ví dụ cụ thể để chạy.
Giải thích code:
- Vòng lặp ngoài
for bien_lap_ngoai in day_ngoai:
: Lặp qua các phần tử trong dãyday_ngoai
. - Vòng lặp trong
for bien_lap_trong in day_trong:
: Nằm bên trong vòng lặp ngoài và lặp qua các phần tử của dãyday_trong
. cac_cau_lenh(s)
: Các câu lệnh được thực thi bên trong vòng lặp trong, hoặc bên trong vòng lặp ngoài sau khi vòng lặp trong hoàn tất.
Ví dụ về vòng lặp for lồng nhau
Chương trình sau đây sử dụng vòng lặp for
lồng nhau để duyệt qua các danh sách months
(tháng) và days
(ngày).
months = ["jan", "feb", "mar"]
days = ["sun", "mon", "tue"]
for x in months:
for y in days:
print(x, y)
print("Tạm biệt!")
Khi đoạn mã trên được thực thi, kết quả sẽ hiển thị như sau:
jan sun
jan mon
jan tue
feb sun
feb mon
feb tue
mar sun
mar mon
mar tue
Tạm biệt!
Giải thích code:
months = ["jan", "feb", "mar"]
: Khởi tạo một danh sáchmonths
chứa tên viết tắt của các tháng.days = ["sun", "mon", "tue"]
: Khởi tạo một danh sáchdays
chứa tên viết tắt của các ngày trong tuần.for x in months:
: Vòng lặpfor
ngoài sẽ duyệt qua từng phần tử trong danh sáchmonths
. Trong mỗi lần lặp, phần tử đang được xét sẽ được gán cho biếnx
.for y in days:
: Vòng lặpfor
trong (lồng vào vòng lặp ngoài) sẽ duyệt qua từng phần tử trong danh sáchdays
. Với mỗi lần lặp của vòng lặp ngoài, vòng lặp trong sẽ chạy hết tất cả các phần tử của danh sáchdays
. Mỗi phần tử đang được xét được gán cho biếny
.print(x, y)
: In ra cặp giá trị củax
(từ danh sáchmonths
) vày
(từ danh sáchdays
) trên cùng một dòng, tạo thành một cặp tháng-ngày.print("Tạm biệt!")
: Khi hai vòng lặpfor
kết thúc thì câu lệnh này sẽ được thực thi, báo hiệu rằng chương trình đã hoàn thành.
Vòng lặp while lồng nhau trong Pythom
Vòng lặp while
chứa một hoặc nhiều vòng lặp while
khác bên trong được gọi là vòng lặp while
lồng nhau. Vòng lặp while
được dùng để lặp lại một khối mã cho đến khi biểu thức boolean được chỉ định trở thành TRUE
(ĐÚNG). Số lần lặp có thể không xác định trước được, phụ thu ộc vào giá trị của biểu thức điều kiện.
Cú pháp của vòng lặp while lồng nhau
Cú pháp cho một câu lệnh vòng lặp while
lồng nhau trong Python như sau:
while biểu_thức:
while biểu_thức:
câu_lệnh(các_câu_lệnh)
câu_lệnh(các_câu_lệnh)
Ví dụ về vòng lặp while lồng nhau trong Python
Chương trình dưới đây sử dụng vòng lặp while
lồng nhau để tìm các số nguyên tố từ 2 đến 25:
i = 2
while(i < 25):
j = 2
while(j <= (i/j)):
if not(i%j): break
j = j + 1
if (j > i/j) : print (i, "là số nguyên tố")
i = i + 1
print ("Tạm biệt!")
Khi thực thi đoạn code trên, kết quả hiển thị như sau:
2 là số nguyên tố
3 là số nguyên tố
5 là số nguyên tố
7 là số nguyên tố
11 là số nguyên tố
13 là số nguyên tố
17 là số nguyên tố
19 là số nguyên tố
23 là số nguyên tố
Tạm biệt!
Giải thích code:
i = 2
: Khởi tạo biếni
với giá trị ban đầu là 2. Biếni
sẽ được dùng để duyệt qua các số từ 2 đến 24.while(i < 25):
: Đây là vòng lặpwhile
ngoài. Vòng lặp này tiếp tục thực hiện cho đến khii
không còn nhỏ hơn 25.j = 2
: Bên trong vòng lặp ngoài, biếnj
được khởi tạo với giá trị là 2. Biếnj
sẽ dùng để kiểm tra xem sối
có phải là số nguyên tố hay không.while(j <= (i/j)):
: Đây là vòng lặpwhile
bên trong, vòng lặp này dùng để kiểm tra tính chia hết củai
cho các số từ 2 đến căn bậc 2 củai
. Vòng lặp tiếp tục cho đến khij
lớn hơni/j
if not(i%j): break
: Câu lệnhif
này kiểm tra xemi
có chia hết choj
hay không. Nếu chia hết (tức là phần dư bằng 0), thìnot(i%j)
sẽ trở thànhTrue
và lệnhbreak
sẽ được thực hiện, thoát khỏi vòng lặp trong (vòng lặpwhile
vớij
).j = j + 1
: Nếui
không chia hết choj
, biếnj
sẽ tăng lên 1.if (j > i/j) : print (i, "là số nguyên tố")
: Sau khi kết thúc vòng lặp trong, nếuj > i/j
, có nghĩa là không có số nào nhỏ hơn căn bậc 2 củai
mài
chia hết cho số đó, vậy thìi
là số nguyên tố, nên ta in kết quải
ra màn hình.i = i + 1
: Kết thúc vòng lặp trong (nếu có hoặc không có lệnhbreak
), ta tăng giá trịi
lên 1 để kiểm tra số tiếp theo.print ("Tạm biệt!")
: Câu lệnh này in ra “Tạm biệt!” sau khi vòng lặp ngoài kết thúc.
Lời kết
Vậy là chúng ta đã cùng nhau tìm hiểu chi tiết về vòng lặp lồng nhau trong Python. Hy vọng những kiến thức này sẽ giúp bạn hiểu rõ hơn về cách thức hoạt động và ứng dụng linh hoạt của vòng lặp này trong việc giải quyết các bài toán lập trình phức tạp. Mong rằng thông tin này hữu ích và có thể giúp bạn nâng cao kỹ năng lập trình Python của mình.