
Vòng Lặp While (While Loops) trong Python
1. Vấn đề của chương trình hiện tại
Ứng dụng chuyển đổi “days → hours” hiện có một hạn chế lớn:
- Người dùng nhập 1 lần → chương trình chạy → SAU ĐÓ kết thúc.
- Nếu muốn tính tiếp, bạn phải chạy lại chương trình từ đầu, rất bất tiện.
Ta muốn chương trình chạy liên tục, cho phép người dùng nhập nhiều giá trị, cho đến khi họ muốn dừng.
2. Giới thiệu While Loop
While loop dùng để làm gì?
- Dùng để lặp lại một đoạn code nhiều lần.
- Điều kiện phải là biểu thức boolean (True/False).
- Khi điều kiện True → tiếp tục chạy
- Khi điều kiện False → dừng vòng lặp
Cú pháp:
while condition:
# code lặp lại3. Chạy chương trình vô hạn với while True
Để chương trình chạy mãi cho đến khi người dùng tự tắt:
while True:
user_input = input("Nhập số ngày: ")
validate_and_execute()Trueviết hoa chữ T (boolean)
- Vòng lặp sẽ không bao giờ dừng trừ khi:
- Người dùng tắt app
- Hoặc ta chủ động dùng
break
4. Cho phép người dùng thoát chương trình (gõ "exit")
Ta thay điều kiện lặp vô hạn bằng điều kiện kiểm tra input:
while user_input != "exit":
user_input = input("Nhập số ngày hoặc 'exit' để thoát:\n")
validate_and_execute()👉 Ý nghĩa:
- Nếu nhập "exit" → điều kiện sai → vòng lặp dừng
- Nếu nhập gì khác → điều kiện đúng → tiếp tục chạy
5. Vì sao phải tạo biến user_input trước vòng lặp?
Nếu viết ngay:
while user_input != "exit":→ Python báo lỗi vì user_input chưa được tạo khi điều kiện được kiểm tra.
Cách sửa:
user_input = "" # giá trị bất kỳ, miễn không phải "exit"
while user_input != "exit":
user_input = input("Nhập giá trị: ")6. Tích hợp While Loop vào chương trình hoàn chỉnh
Dưới đây là chương trình đúng chuẩn, chạy liên tục, có kiểm tra lỗi bằng try/except:
def days_to_hours(num_days):
return num_days * 24
def validate_and_execute():
try:
number_of_days = int(user_input)
if number_of_days > 0:
result = days_to_hours(number_of_days)
print(f"{number_of_days} ngày = {result} giờ")
elif number_of_days == 0:
print("Số 0 không hợp lệ!")
else:
print("Số âm không hợp lệ!")
except ValueError:
print("Input không phải số hợp lệ!")
# --- chạy liên tục ---
user_input = "" # để tránh lỗi biến chưa khai báo
while user_input != "exit":
user_input = input("Nhập số ngày hoặc gõ 'exit' để thoát:\n")
if user_input != "exit":
validate_and_execute()7. Tóm tắt kiến thức quan trọng
While loop
- Lặp lại code khi điều kiện đúng
- Dừng khi điều kiện sai
- Cú pháp giống if nhưng có tính lặp
Kiểm tra điều kiện
- Dùng toán tử
!=(not equal to)
- Điều kiện → boolean True/False
Vòng lặp vô hạn
while True:
- Thường dùng kết hợp với
break
Input + while
- Phải khởi tạo biến trước vòng lặp
- Vòng lặp kiểm tra lại input sau mỗi lần nhập
EXERCISES (with Answers)
Exercise 1 — Basic Counter Loop
Yêu cầu:
Dùng while để in số từ 1 → 5.
Answer:
i = 1
while i <= 5:
print(i)
i += 1Exercise 2 — Sum Until User Types “stop”
Yêu cầu:
- Người dùng nhập số liên tục
- Nếu nhập “stop” → dừng
- Cộng tất cả số đã nhập
Answer:
total = 0
user_input = ""
while user_input != "stop":
user_input = input("Nhập số hoặc 'stop': ")
if user_input.isdigit():
total += int(user_input)
print("Tổng =", total)Exercise 3 — Repeat until valid
Yêu cầu:
- Yêu cầu người dùng nhập 1 số nguyên dương
- Lặp lại cho đến khi nhập đúng
- Dùng while + try/except
Answer:
while True:
try:
x = int(input("Nhập số nguyên dương: "))
if x > 0:
print("Bạn nhập:", x)
break
else:
print("Số phải lớn hơn 0!")
except ValueError:
print("Không phải số!")Exercise 4 — Build your own calculator loop
Yêu cầu:
Lặp lại chương trình:
- nhập số a
- nhập số b
- in a + b
- cho phép gõ “exit” để dừng
Answer:
user_input = ""
while user_input != "exit":
user_input = input("Nhập a hoặc 'exit': ")
if user_input == "exit":
break
a = int(user_input)
b = int(input("Nhập b: "))
print("Tổng =", a + b)Exercise 5 — Days-to-hours with loop (your own version)
Yêu cầu:
Viết lại toàn bộ chương trình days → hours, dùng while loop, không copy code mẫu.
Answer (gợi ý cơ bản):
while True:
user_input = input("Nhập số ngày hoặc 'exit': ")
if user_input == "exit":
break
try:
d = int(user_input)
if d > 0:
print(d * 24, "giờ")
else:
print("Số phải > 0!")
except ValueError:
print("Không phải số hợp lệ!")