Chuyển tới nội dung chính

BÀI GIẢNG: VÒNG LẶP WHILE TRONG PYTHON


MỤC TIÊU BÀI HỌC

Sau bài học này, học viên có thể:

  • Hiểu cấu trúc và nguyên lý hoạt động của vòng lặp while
  • Phân biệt được whilefor, biết khi nào nên dùng while
  • Sử dụng thành thạo break, continue, else trong vòng lặp while
  • Tránh được lỗi vòng lặp vô hạn (infinite loop)
  • Áp dụng while để giải các bài toán thực tế: đếm, nhập liệu, kiểm tra điều kiện, menu chương trình

1. VÒNG LẶP WHILE LÀ GÌ?

while là vòng lặp lặp lại một khối lệnh khi điều kiện còn đúng (True). Khi điều kiện sai (False), vòng lặp dừng lại.

Khác với for (thường dùng khi biết trước số lần lặp), while phù hợp khi không biết trước sẽ lặp bao nhiêu lần — số lần lặp phụ thuộc vào một điều kiện xảy ra trong lúc chạy chương trình.

Cú pháp

while điều_kiện:
# khối lệnh được lặp lại
# (phải có gì đó làm điều kiện thay đổi, nếu không sẽ lặp vô hạn)

Ví dụ đơn giản: đếm từ 1 đến 5

so = 1
while so <= 5:
print(so)
so = so + 1

Kết quả:

1
2
3
4
5

Giải thích các bước:

  1. Kiểm tra so <= 5 → đúng → chạy print(so) → tăng so lên 1
  2. Quay lại kiểm tra điều kiện, lặp lại cho đến khi so = 6 → điều kiện sai → dừng vòng lặp

2. LỖI THƯỜNG GẶP: VÒNG LẶP VÔ HẠN

Nếu quên cập nhật biến điều kiện, vòng lặp sẽ chạy mãi mãi (chương trình bị "treo").

# LỖI: vòng lặp vô hạn vì "so" không bao giờ thay đổi
so = 1
while so <= 5:
print(so)
# quên dòng so = so + 1

Lưu ý: Khi viết while, luôn tự hỏi: "Điều kiện này sẽ trở thành False khi nào? Dòng lệnh nào làm điều đó xảy ra?"

Nếu lỡ chạy phải vòng lặp vô hạn, có thể nhấn Ctrl + C (hoặc nút Stop) để dừng chương trình.


3. SO SÁNH whilefor

Đặc điểmforwhile
Dùng khiBiết trước số lần lặpKhông biết trước số lần lặp
Ví dụ điển hìnhDuyệt qua list, rangeChờ người dùng nhập đúng, chạy đến khi đạt điều kiện
Nguy cơ lặp vô hạnHiếm khi xảy raDễ xảy ra nếu quên cập nhật điều kiện
# for: biết trước lặp 5 lần
for i in range(5):
print(i)

# while: lặp đến khi người dùng nhập đúng, không biết trước bao nhiêu lần
mat_khau = ""
while mat_khau != "123456":
mat_khau = input("Nhập mật khẩu: ")
print("Đăng nhập thành công!")

4. VÒNG LẶP while True KẾT HỢP break

Một mẫu rất phổ biến: lặp mãi mãi (while True) và dùng break để thoát ra khi cần.

while True:
lenh = input("Nhập 'thoat' để dừng: ")
if lenh == "thoat":
break
print("Bạn vừa nhập:", lenh)

print("Chương trình đã kết thúc.")
  • while True → điều kiện luôn đúng, nên nếu không có break, chương trình sẽ chạy mãi
  • break → thoát ngay lập tức ra khỏi vòng lặp, bất kể điều kiện

5. continue — BỎ QUA MỘT LẦN LẶP

continue khiến chương trình bỏ qua phần còn lại của lần lặp hiện tại, quay lại kiểm tra điều kiện ngay.

Ví dụ: chỉ in số chẵn từ 1 đến 10

so = 0
while so < 10:
so = so + 1
if so % 2 != 0:
continue # bỏ qua số lẻ, không in
print(so)

Kết quả: 2 4 6 8 10


6. else TRONG VÒNG LẶP WHILE

Python cho phép thêm else sau while. Khối else chạy khi vòng lặp kết thúc bình thường (điều kiện trở thành False), nhưng không chạy nếu vòng lặp bị thoát bằng break.

so = 1
while so <= 3:
print("Đang lặp:", so)
so = so + 1
else:
print("Vòng lặp đã kết thúc bình thường")
so = 1
while so <= 3:
if so == 2:
break
print("Đang lặp:", so)
so = so + 1
else:
print("Dòng này sẽ KHÔNG được in vì bị break")

7. CÁC BÀI TOÁN ỨNG DỤNG THỰC TẾ

7.1. Kiểm tra dữ liệu nhập vào hợp lệ

tuoi = int(input("Nhập tuổi của bạn: "))
while tuoi < 0 or tuoi > 120:
print("Tuổi không hợp lệ, vui lòng nhập lại!")
tuoi = int(input("Nhập tuổi của bạn: "))

print("Tuổi hợp lệ:", tuoi)

7.2. Tính tổng các số cho đến khi người dùng nhập 0

tong = 0
so = int(input("Nhập một số (nhập 0 để dừng): "))
while so != 0:
tong = tong + so
so = int(input("Nhập một số (nhập 0 để dừng): "))

print("Tổng các số đã nhập:", tong)

7.3. Đếm số chữ số của một số nguyên

n = 123456
dem = 0
while n > 0:
n = n // 10
dem = dem + 1

print("Số có", dem, "chữ số")

7.4. Tìm ước chung lớn nhất (Euclid) bằng while

a = 36
b = 24
while b != 0:
a, b = b, a % b

print("ƯCLN là:", a)

7.5. Chương trình đoán số (number guessing game)

import random

so_bi_mat = random.randint(1, 100)
so_lan_doan = 0

while True:
doan = int(input("Đoán một số từ 1-100: "))
so_lan_doan = so_lan_doan + 1

if doan < so_bi_mat:
print("Bạn đoán thấp hơn số bí mật!")
elif doan > so_bi_mat:
print("Bạn đoán cao hơn số bí mật!")
else:
print("Chính xác! Bạn đã đoán đúng sau", so_lan_doan, "lần.")
break

7.6. Chương trình menu lặp lại (mẫu thường gặp)

while True:
print("\n===== MENU =====")
print("1. Xem thông tin")
print("2. Cài đặt")
print("0. Thoát")
chon = input("Chọn chức năng: ")

match chon:
case "1":
print("Đây là thông tin chương trình")
case "2":
print("Đây là màn hình cài đặt")
case "0":
print("Tạm biệt!")
break
case _:
print("Lựa chọn không hợp lệ, vui lòng chọn lại!")

8. LỖI THƯỜNG GẶP KHI DÙNG WHILE

LỗiNguyên nhânCách khắc phục
Vòng lặp vô hạnQuên cập nhật biến điều kiệnLuôn đảm bảo có dòng lệnh làm điều kiện thay đổi
Sai logic điều kiệnDùng = (gán) thay vì == (so sánh)Kiểm tra kỹ toán tử so sánh trong điều kiện
break/continue đặt sai vị tríĐặt ngoài vòng lặp hoặc sai khối ifĐảm bảo break/continue nằm đúng bên trong while
Nhầm else của while với else của ifelse của vòng lặp có ý nghĩa khácNhớ: else của while chỉ chạy khi KHÔNG bị break

9. BÀI TẬP THỰC HÀNH

  1. Viết chương trình dùng while in ra các số từ 10 xuống 1 (đếm ngược).
  2. Viết chương trình yêu cầu người dùng nhập liên tục các số, dừng lại khi nhập số âm, sau đó in ra tổng và trung bình cộng các số đã nhập (số dương).
  3. Viết chương trình kiểm tra một số có phải là số nguyên tố hay không, sử dụng while.
  4. Viết chương trình mô phỏng máy ATM đơn giản: cho phép người dùng nhập mã PIN tối đa 3 lần, nếu sai cả 3 lần thì khóa tài khoản (in ra thông báo và dừng chương trình).
  5. Viết chương trình in ra dãy Fibonacci gồm 10 số đầu tiên bằng vòng lặp while.