Trong Python, việc sử dụng vòng lặp là điều không thể thiếu để xử lý các tác vụ lặp đi lặp lại một cách hiệu quả. Vòng lặp while
trong Python đóng vai trò quan trọng trong việc tự động hóa các quy trình. Bài viết này sẽ cung cấp kiến thức nền tảng để bạn nắm vững cách vòng lặp while
hoạt động, từ đó có thể áp dụng linh hoạt trong các dự án thực tế.
Vòng lặp while trong Python là gì?
Vòng lặp while
trong Python cho phép thực thi lặp đi lặp lại một hoặc một khối lệnh, miễn là điều kiện boolean được chỉ định vẫn đúng (true). Vòng lặp này bắt đầu bằng từ khóa while
, theo sau là một biểu thức boolean và dấu hai chấm (:
). Sau đó là một khối các câu lệnh được thụt vào.
Ở đây, statement(s)
có thể là một câu lệnh đơn hoặc một khối các câu lệnh có cùng mức thụt lề. Điều kiện có thể là bất kỳ biểu thức nào và true
là bất kỳ giá trị nào khác không (khác 0). Ngay khi biểu thức trở thành false
, luồng điều khiển chương trình sẽ chuyển đến dòng ngay sau vòng lặp.
Nếu biểu thức không bao giờ chuyển thành false
, vòng lặp sẽ tiếp tục chạy không ngừng, trừ khi bị dừng một cách cưỡng bức. Một vòng lặp như vậy được gọi là vòng lặp vô hạn, và đây là một tình huống không mong muốn trong chương trình máy tính.
Cú pháp của vòng lặp While trong Python
Cú pháp của một vòng lặp while trong ngôn ngữ lập trình Python như sau:
while biểu_thức:
câu_lệnh(các_câu_lệnh)
Lưu ý: Trong Python, tất cả các câu lệnh được thụt lề cùng một số lượng khoảng trắng sau một cấu trúc lập trình sẽ được coi là một phần của cùng một khối mã. Python sử dụng thụt lề làm phương pháp nhóm các câu lệnh.
Giải thích code:
- Vòng lặp
while
bắt đầu bằng từ khóawhile
. - Theo sau
while
là mộtbiểu_thức
(một điều kiện, kết quả phải làTrue
hoặcFalse
). - Các
câu_lệnh
được thụt vào cùng cấp bên dướiwhile
sẽ được thực thi liên tục khibiểu_thức
vẫn làTrue
.
Flowchart của vòng lặp while
Dưới đây là sơ đồ luồng mình họa cho cách thức hoạt động của vòng lặp while
Ví dụ 1
Ví dụ dưới đây minh họa cách vòng lặp while hoạt động. Vòng lặp sẽ tiếp tục thực thi các lệnh bên trong cho đến khi giá trị của biến count trở thành 5.
count = 0
while count < 5:
count += 1
print ("Lần lặp thứ {}".format(count))
print ("Kết thúc vòng lặp while")
Khi thực thi mã này, bạn sẽ nhận được kết quả sau:
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
Kết thúc vòng lặp while
Giải thích code:
count = 0
: Câu lệnh này khởi tạo biếncount
và gán giá trị ban đầu bằng 0. Biếncount
được sử dụng như một biến đếm để theo dõi số lần lặp.while count < 5:
: Đây là câu lệnh bắt đầu vòng lặpwhile
. Vòng lặp sẽ tiếp tục thực thi các lệnh bên trong chừng nào điều kiệncount < 5
vẫn đúng.count += 1
: Câu lệnh này tăng giá trị của biếncount
lên 1 sau mỗi lần lặp. Tương đương vớicount = count + 1
print ("Lần lặp thứ {}".format(count))
: Câu lệnh này in ra màn hình thông báo số thứ tự của lần lặp hiện tại.print ("Kết thúc vòng lặp while")
: Khi điều kiệncount < 5
trở thành sai (tứccount
đạt giá trị bằng 5), vòng lặpwhile
kết thúc và câu lệnh này sẽ được thực hiện. Nó thông báo rằng vòng lặp đã kết thúc.
Ví dụ 2
Dưới đây là một ví dụ khác về cách sử dụng vòng lặp while
. Trong mỗi lần lặp, chương trình sẽ yêu cầu người dùng nhập dữ liệu. Vòng lặp sẽ tiếp tục thực hiện cho đến khi người dùng nhập vào một chuỗi không phải là số. Hàm isnumeric(
) sẽ trả về giá trị True
nếu đầu vào là một số nguyên, ngược lại hàm sẽ trả về giá trị False
.
var = '0'
while var.isnumeric() == True:
var = "test"
if var.isnumeric() == True:
print ("Bạn đã nhập", var)
print ("Kết thúc vòng lặp while")
Khi chạy đoạn code trên, màn hình sẽ hiển thị kết quả tương tự như sau:
enter a number..10
Bạn đã nhập test
enter a number..100
Bạn đã nhập test
enter a number..543
Bạn đã nhập test
enter a number..qwer
Kết thúc vòng lặp while
Giải thích code:
var = '0'
: Khởi tạo biếnvar
và gán chovar
một giá trị ban đầu là chuỗi ‘0’.- while var.isnumeric() == True:: Đây là điều kiện để vòng lặp tiếp tục. Vòng lặp
while
sẽ tiếp tục thực hiện các câu lệnh bên trong cho đến khi biếnvar
không còn là chuỗi số nữa (tức là hàmvar.isnumeric()
trả vềFalse
). - var = “test”: Trong vòng lặp này biến
var
được gán bằng chuỗi “test” cho dù người dùng có nhập giá trị nào đi nữa. Do vậy,if var.isnumeric() == True
luôn sai do “test” không phải là chuỗi số nên câu lệnhprint
sẽ không bao giờ được chạy. - if var.isnumeric() == True: print (“Bạn đã nhập”, var): Câu lệnh này kiểm tra var có phải là chuỗi số hay không? Nếu
var
là chuỗi số thì in ra dòng chữ “Bạn đã nhập…” cùng với giá trị người dùng đã nhập - print (“Kết thúc vòng lặp while”): Câu lệnh này được thực hiện khi vòng lặp
while
kết thúc, tức khivar
không còn là số nữa.
Vòng lặp while vô hạn trong Python
Một vòng lặp trở thành vòng lặp vô hạn khi điều kiện kiểm tra không bao giờ đạt giá trị False
. Bạn cần phải cẩn trọng khi sử dụng vòng lặp while
, vì có khả năng điều kiện của vòng lặp không bao giờ chuyển thành False
, dẫn đến vòng lặp chạy không bao giờ kết thúc. Trường hợp này được gọi là vòng lặp vô hạn.
Vòng lặp vô hạn có thể hữu ích trong lập trình client/server, khi mà server cần chạy liên tục để các chương trình client có thể giao tiếp bất cứ khi nào cần.
Ví dụ về vòng lặp while vô hạn
Hãy xem xét ví dụ dưới đây để hiểu rõ hơn về cách hoạt động của vòng lặp vô hạn trong Python:
var = 1
while var == 1: # Đây là vòng lặp vô hạn
num = int(input("Nhập một số: "))
print("Bạn đã nhập: ", num)
print("Tạm biệt!")
Khi chạy đoạn mã này, bạn sẽ thấy kết quả tương tự như sau trên màn hình:
Nhập một số: 20
Bạn đã nhập: 20
Nhập một số: 29
Bạn đã nhập: 29
Nhập một số: 3
Bạn đã nhập: 3
Nhập một số: 11
Bạn đã nhập: 11
Nhập một số: 22
Bạn đã nhập: 22
Nhập một số: Traceback (most recent call last):
File “examples\test.py”, line 5, in <module>
num = int(input(“Nhập một số: “))
KeyboardInterrupt
Giải thích code:
var = 1
: Khởi tạo biếnvar
với giá trị ban đầu là 1.- while var == 1:: Đây là nơi tạo ra vòng lặp vô hạn. Điều kiện kiểm tra
var == 1
luôn đúng (vì giá trị củavar
không bao giờ thay đổi trong vòng lặp). Do đó, các câu lệnh bên trong vòng lặpwhile
sẽ được thực thi liên tục, không có điểm dừng. num = int(input("Nhập một số: "))
: Hiển thị một thông báo yêu cầu người dùng nhập vào một số và chuyển đổi số đó sang dạng số nguyên rồi gán cho biếnnum
.print ("Bạn đã nhập: ", num)
: In ra màn hình số mà người dùng vừa nhập.print("Tạm biệt!")
: Câu lệnh này không bao giờ được thực hiện vì vòng lặp không bao giờ kết thúc (trừ khi có tác động từ bên ngoài – bấm tổ hợp Ctrl+C).
Vòng Lặp while-else trong Python
Python hỗ trợ việc sử dụng mệnh đề else
kết hợp với vòng lặp while
. Khi else được sử dụng với while
, khối lệnh bên trong else
sẽ được thực thi khi điều kiện của while
trở thành false
, trước khi luồng điều khiển chương trình chuyển đến các câu lệnh tiếp theo bên ngoài vòng lặp.
Flowchart vòng lặp while với mệnh đề else
Sơ đồ dưới đây thể hiện cách sử dụng mệnh đề else
kết hợp với vòng lặp whil
e.
Ví dụ về vòng lặp while với mệnh đề else
Ví dụ sau minh họa việc kết hợp mệnh đề else
với câu lệnh while
. Cho đến khi giá trị của biến count
nhỏ hơn 5, chương trình sẽ in ra số lần lặp. Khi count
đạt giá trị 5, điều kiện của while
trở thành false
và câu lệnh in trong khối else
được thực thi, trước khi luồng điều khiển được chuyển sang các câu lệnh tiếp theo trong chương trình chính.
count = 0
while count < 5:
count += 1
print ("Lần lặp thứ {}".format(count))
else:
print ("Vòng lặp while đã kết thúc. Bây giờ đang ở trong khối else")
print ("Kết thúc chương trình")
Khi chạy đoạn code này, màn hình sẽ hiển thị kết quả như sau:
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 while đã kết thúc. Bây giờ đang ở trong khối else
Kết thúc chương trình
Giải thích code:
count = 0
: Khởi tạo biếncount
với giá trị ban đầu là 0. Biến này đóng vai trò bộ đếm số lần lặp.while count < 5:
: Vòng lặpwhile
sẽ tiếp tục thực thi các lệnh bên trong nếu điều kiệncount <
5 vẫn đúng.count += 1
: Tăng giá trị củacount
lên 1 sau mỗi lần lặp, tương đương vớicount = count + 1
.print ("Lần lặp thứ {}".format(count))
: In ra thông báo số lần lặp hiện tại.else:
: Khi điều kiệncount < 5
không còn đúng (tứccount
đạt giá trị bằng 5), khối lệnh trongelse
sẽ được thực thi.print ("Vòng lặp while đã kết thúc. Bây giờ đang ở trong khối else")
: Thông báo cho biết vòng lặpwhile
đã kết thúc và chương trình đang thực thi các câu lệnh trong khối else.print ("Kết thúc chương trình")
: In ra thông báo cuối cùng, cho thấy chương trình đã hoàn tất việc thực thi.
Các khối lệnh đơn trong Python
Tương tự như cú pháp của câu lệnh if
, nếu mệnh đề while
của bạn chỉ bao gồm một câu lệnh duy nhất, bạn có thể đặt câu lệnh đó trên cùng một dòng với tiêu đề while
.
Ví dụ về các khối lệnh đơn trong Python
Ví dụ dưới đây minh họa cách sử dụng mệnh đề while
một dòng:
flag = 0
while (flag): print ("Cờ này đúng là true!")
print ("Tạm biệt!")
Khi bạn chạy đoạn mã này, kết quả sẽ hiển thị như sau:
Tạm biệt!
Hãy thử thay đổi giá trị của flag
thành 1
và chạy lại chương trình trên. Nếu bạn làm như vậy, chương trình sẽ rơi vào vòng lặp vô hạn và bạn cần nhấn tổ hợp phím CTRL+C để thoát.
Giải thích code:
flag = 0
: Khởi tạo biến flag bằng 0.while (flag): print ("Cờ này thực sự đúng!")
: Nếuflag
có giá trị khác 0 (tức làtrue
), câu lệnhprint
sẽ được thực hiện. Vìflag = 0
, điều kiện sai và vòng lặp không được chạy.print ("Tạm biệt!")
: Câu lệnh này in ra thông báo sau khi vòng lặpwhile
đã kết thúc hoặc không thực hiện.- Giải thích trường hợp vòng lặp vô hạn: Khi bạn thay đổi
flag
thành1
, điều này tương đương với giá trịTru
e. Vòng lặpwhile (flag)
lúc này sẽ trở thành một vòng lặp vô hạn, vì điều kiệnflag
luôn luôn đúng, và câu lệnhprin
t sẽ tiếp tục chạy. Để thoát khỏi vòng lặp vô hạn bạn phải tắt chương trình một cách cưỡng ép (ví dụ nhấn CTRL + C).
Lời kết
Chúng ta vừa cùng nhau khám phá chi tiết về vòng lặp while trong Python, từ cú pháp cơ bản đến những ứng dụng thực tế. Hy vọng những kiến thức này sẽ giúp bạn hiểu rõ hơn cách sử dụng vòng lặp để giải quyết các bài toán lặp trong lập trình.