Vòng lặp for trong lập trình Python, cho phép thực hiện lặp đi lặp lại một khối code. Mặc dù quen thuộc, nhiều người vẫn chưa biết đến for-else, một cấu trúc kết hợp for với một khối else đặc biệt. Bài viết này sẽ giúp bạn khám phá cơ chế hoạt động và cách ứng dụng hiệu quả của for-else, mở rộng kỹ năng lập trình Python của bạn.
Vòng lặp for-else trong Python là gì?
Vòng lặp for-else
trong Python là một cấu trúc điều khiển đặc biệt, vòng lặp này mang đến một cách thức thú vị để thực thi một đoạn mã nào đó chỉ khi vòng lặp for
đã hoàn thành công việc của mình một cách trọn vẹn, không bị gián đoạn giữa chừng.
Vòng lặp for
sẽ kết thúc một cách bình thường khi đã hoàn thành việc duyệt qua tất cả các phần tử. Ngược lại, vòng lặp có thể bị kết thúc sớm nếu gặp lệnh break
. Lệnh break
giống như một “cửa thoát hiểm” giúp chúng ta dừng vòng lặp ngay lập tức khi một điều kiện nào đó được đáp ứng.
Flowchart của vòng lặp for-else trong Python
Flowchart dưới đây sẽ giúp bạn hình dung luồng hoạt động của vòng lặp for-else
một cách trực quan hơn:
Cú pháp của vòng lặp for-else trong Python
Dưới đây là cú pháp của vòng lặp for
với khối else
tùy chọn:
for variable_name in iterable:
# Các câu lệnh bên trong vòng lặp
.
.
.
else:
# Các câu lệnh bên trong mệnh đề else
.
.
Ví dụ về vòng lặp for-else trong Python
Đoạn mã sau minh họa cách kết hợp mệnh đề else
với một câu lệnh for
trong Python. Vòng lặp sẽ in ra số lần lặp cho đến khi biến count
nhỏ hơn 6. Khi count
đạt đến 6, câu lệnh in trong khối else
sẽ được thực thi trước khi quyền điều khiển được chuyển sang câu lệnh tiếp theo trong chương trình chính.
for count in range(6):
print ("Lần lặp thứ {}".format(count))
else:
print ("Vòng lặp for đã kết thúc. Bây giờ ở trong khối else")
print ("Kết thúc vòng lặp for")
Kết quả khi chạy đoạn code trên:
Lần lặp thứ 0
Lần lặp thứ 1
Lần lặp thứ 2
Lần lặp thứ 3
Lần lặp thứ 4
Lần lặp thứ 5
Vòng lặp for đã kết thúc. Bây giờ ở trong khối else
Kết thúc vòng lặp for
Giải thích chi tiết:
for count in range(6):
: Vòng lặpfor
sẽ chạy 6 lần, với biếncount
lần lượt nhận các giá trị từ 0 đến 5 (dorange(6)
tạo ra dãy số từ 0 đến 5).print ("Lần lặp thứ {}".format(count))
: Trong mỗi lần lặp, dòng này sẽ in ra số lần lặp hiện tại.else:
: Vì vòng lặp for đã chạy hết tất cả các giá trị trongrange(6)
mà không gặp lệnhbreak
, nên khốielse
sẽ được thực thi.print ("Vòng lặp for đã kết thúc. Bây giờ ở trong khối else")
: Câu lệnh này trong khốielse
sẽ được in ra khi vòng lặpfor
kết thúc một cách tự nhiên.print ("Kết thúc vòng lặp for")
: Sau khi khốielse
(hoặc nếu không có khốielse
), chương trình sẽ tiếp tục thực hiện các câu lệnh tiếp theo, trong trường hợp này là dòng in cuối cùng.
Cấu trúc for-else khi không có lệnh break
Như đã đề cập trước đó, khối else
chỉ được thực thi khi vòng lặp kết thúc một cách bình thường, tức là khi không sử dụng lệnh break
.
Trong ví dụ dưới đây, chúng ta sẽ sử dụng vòng lặp for-else
mà không có lệnh break
:
for i in ['T', 'P']:
print(i)
else:
# Lệnh trong khối else của vòng lặp
# Không có lệnh break trong vòng lặp for, do đó phần else sẽ được thực thi ngay sau đó
print("Khối else của vòng lặp For đã được thực thi thành công")
Khi chạy chương trình trên, bạn sẽ nhận được kết quả sau:
T
P
Khối else của vòng lặp For đã được thực thi thành công
Giải thích chi tiết:
for i in ['T', 'P']:
: Vòng lặpfor
bắt đầu duyệt qua từng phần tử trong danh sách['T', 'P']
.print(i)
: Trong mỗi lần lặp, biếni
sẽ nhận giá trị của phần tử hiện tại trong danh sách, và dòng lệnh này sẽ in giá trị đó ra màn hình.else:
: Sau khi vòng lặpfor
đã duyệt qua tất cả các phần tử trong danh sách một cách trọn vẹn (tức là không có lệnhbreak
nào khiến vòng lặp dừng sớm), thì khối lệnh bên trongelse
sẽ được thực thi.print("Khối else của vòng lặp For đã được thực thi thành công")
: Vì không có lệnhbreak
nào trong vòng lặpfor
, vòng lặp đã hoàn thành nhiệm vụ duyệt qua tất cả các phần tử. Do đó, dòng lệnh này trong khốielse
sẽ được thực hiện, và bạn thấy dòng chữ “Khốielse
của vòng lặpFor
đã được thực thi thành công” được in ra.
Cấu trúc for-else với Llệnh break
Trong trường hợp vòng lặp bị chấm dứt một cách bị ép (bằng cách sử dụng lệnh break
), thì khối lệnh else
sẽ bị trình thông dịch “ngó lơ” và do đó, việc thực thi khối lệnh này sẽ bị bỏ qua.
Chương trình dưới đây minh họa cách mà điều kiện else
hoạt động khi có lệnh break
.
for i in ['T','P']:
print(i)
break
else:
# Khối else của vòng lặp
# Bị kết thúc sau lần lặp đầu tiên do lệnh break trong vòng lặp for
print("Khối else của vòng lặp đã được thực thi thành công")
Khi chạy chương trình trên, kết quả sẽ như sau:
T
Giải thích chi tiết:
- Ở lần lặp đầu tiên, biến
i
sẽ nhận giá trị là'T'
. - Lệnh
print(i)
sẽ in ra chữT
. - Ngay sau đó, chúng ta gặp lệnh
break
. Lệnh này giống như một “nút dừng khẩn cấp” cho vòng lặp. Khibreak
được thực thi, vòng lặp sẽ dừng lại ngay lập tức, không cần biết còn phần tử nào trong danh sách hay không. - Vì vòng lặp
for
bị dừng lại một cách “đột ngột” bởi lệnhbreak
, nó không hoàn thành việc duyệt qua tất cả các phần tử một cách bình thường. - Do đó, khối lệnh
else
(khối lệnh chỉ được thực thi khi vòng lặpfor
chạy hết tất cả các phần tử mà không gặpbreak
) sẽ không được thực thi.
Vòng lặp for-else với break và điều kiện if trong Python
Trong Python, bạn có thể kết hợp vòng lặp for với mệnh đề else, tạo thành cấu trúc for-else. Cấu trúc này hoạt động khá thú vị khi kết hợp thêm lệnh break và các điều kiện if.
Cụ thể như sau:
- Vòng lặp
for
sẽ duyệt qua các phần tử trong một tập hợp (ví dụ: một list, một string, …). - Bên trong vòng lặp
for
, bạn có thể sử dụng các khối lệnhif
để kiểm tra một điều kiện nào đó trên từng phần tử. - Nếu trong quá trình duyệt, lệnh
break
được thực thi (thường là khi một điều kiệnif
thỏa mãn), vòng lặp sẽ bị dừng lại ngay lập tức. - Ngược lại, nếu vòng lặp
for
chạy hết tất cả các phần tử mà không gặp lệnhbreak
nào, thì khối lệnh trong mệnh đềelse
sẽ được thực thi.
Để làm rõ hơn, hãy xem xét đoạn code sau:
def positive_or_negative():
for i in [5, 6, 7]:
if i >= 0:
print("Positive number")
else:
print("Negative number")
break
else:
print("Loop-else Executed")
positive_or_negative()
Khi chạy đoạn code này, bạn sẽ thấy kết quả sau:
Positive number
Positive number
Positive number
Loop-else Executed
Giải thích chi tiết:
- Hàm
positive_or_negative()
: Chúng ta định nghĩa một hàm để dễ dàng gọi và thử nghiệm. - Vòng lặp
for i in [5, 6, 7]:
: Vòng lặp này sẽ duyệt qua từng phần tử trong danh sách[5, 6, 7]
, lần lượt gán giá trị cho biếni
. - Điều kiện
if i >= 0:
: Nếu giá trị củai
lớn hơn hoặc bằng 0, câu lệnhprint("Positive number")
sẽ được thực hiện. Ngược lại, nếui
nhỏ hơn 0, đoạn code trong khốielse
(dướiif
) sẽ được thực thi. - Khối
else
trong vòng lặpfor
: Khốielse
này chỉ chạy khi vòng lặpfor
đã duyệt qua tất cả phần tử mà không gặp lệnhbreak
. - Lệnh
break
: Nếu trong quá trình vòng lặp có điều kiện nào đó làm cho lệnhbrea
k được gọi, thì vòng lặp sẽ bị dừng lại ngay lập tức, và khốielse
sẽ không chạy.
Lời kết
Vậy là chúng ta đã cùng nhau khám phá chi tiết về vòng lặp for-else trong Python, một lệnh giúp xử lý các tình huống đặc biệt trong lập trình. Hy vọng qua bài viết này, bạn đã hiểu rõ cách hoạt động và ứng dụng của nó. Hãy thử áp dụng vào các dự án thực tế của bạn để nâng cao kỹ năng lập trình Python