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
whilevàfor, biết khi nào nên dùngwhile - Sử dụng thành thạo
break,continue,elsetrong vòng lặpwhile - 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:
- Kiểm tra
so <= 5→ đúng → chạyprint(so)→ tăngsolên 1 - 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 while VÀ for
| Đặc điểm | for | while |
|---|---|---|
| Dùng khi | Biết trước số lần lặp | Không biết trước số lần lặp |
| Ví dụ điển hình | Duyệt qua list, range | Chờ người dùng nhập đúng, chạy đến khi đạt điều kiện |
| Nguy cơ lặp vô hạn | Hiếm khi xảy ra | Dễ 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ãibreak→ 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ỗi | Nguyên nhân | Cách khắc phục |
|---|---|---|
| Vòng lặp vô hạn | Quên cập nhật biến điều kiện | Luôn đảm bảo có dòng lệnh làm điều kiện thay đổi |
| Sai logic điều kiện | Dù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 if | else của vòng lặp có ý nghĩa khác | Nhớ: else của while chỉ chạy khi KHÔNG bị break |
9. BÀI TẬP THỰC HÀNH
- Viết chương trình dùng
whilein ra các số từ 10 xuống 1 (đếm ngược). - 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).
- 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. - 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).
- 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.