Bài học theo mô-đun (2/4)
vòng lặp while
Vòng lặp while lặp lại một khối miễn là điều kiện vẫn đúng. sử dụng
while khi bạn không biết trước mình sẽ cần bao nhiêu lần lặp:
số vòng phụ thuộc vào điều gì đó thay đổi bên trong vòng lặp.
Cú pháp
n = 1
while n < 1000:
n = n * 2
n # 1024Khối thụt lề được thực hiện lặp đi lặp lại. Trước mỗi lần lặp Python đánh giá điều kiện: ngay khi nó trở thành sai, vòng lặp sẽ kết thúc và việc thực thi tiếp tục sau khối.
Các mẫu phổ biến
Bộ đếm thủ công — tương đương với for cổ điển ở các ngôn ngữ khác:
i = 0
while i < 5:
print(i)
i = i + 1Vòng lặp vô hạn + điều kiện thoát nội bộ — hữu ích khi điều kiện là đánh giá sau khi làm điều gì đó:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break thoát ngay lập tức từ vòng lặp trong cùng (chúng ta sẽ thấy nó ở phần tiếp theo
bài học).
Sai lầm kinh điển: vòng lặp vô hạn
Nếu biến trong điều kiện không thay đổi bên trong vòng lặp, thì
chương trình không bao giờ kết thúc. Đây là lỗi số một với while:
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!Trong bài tập của chúng tôi có thời gian chờ thực thi, do đó vòng lặp vô hạn sẽ thất bại bằng một thông báo rõ ràng thay vì đóng băng trình duyệt. Nhưng trong sản xuất một vòng lặp vô hạn là một lỗi nghiêm trọng.
Rủi ro vòng lặp vô hạn và điều kiện chấm dứt
Vòng lặp while thực thi miễn là điều kiện của nó được đánh giá là Đúng. Nếu bạn quên cập nhật các biến ảnh hưởng đến điều kiện, vòng lặp của bạn sẽ chạy vô tận, làm đóng băng thời gian chạy. Luôn đảm bảo rằng thân vòng lặp tiến tới điều kiện thoát.
Hãy tự mình thử
Tìm số nguyên nhỏ nhất `n >= 1` sao cho 2**n vượt quá một triệu. Gán nó cho `kết quả` và đánh giá nó (phải là 20).
Hiển thị gợi ý
2**20 = 1.048.576 là số đầu tiên vượt quá 1.000.000.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Bắt đầu từ `n = 1000`, giảm một nửa n bằng phép chia số nguyên (n // 2) cho đến khi nó trở thành 0. Đếm số lần lặp trong `bước`. Đánh giá `các bước`.
Hiển thị gợi ý
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: mười bước.
Giải pháp khả dụng sau 3 lần thử
Thử thách bổ sung
Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.
Hiển thị gợi ý
The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.
Giải pháp khả dụng sau 3 lần thử