Chuyển đến nội dung chính
Mô-đun 2 · Bài học 2 trong tổng số 46/36 trong khóa học~8 min
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

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Khố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:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Vò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ì đó:

Python
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:

Python
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ập thể dục#python.m2.l2.e1
Nỗ lực: 0Đang tải…

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).

Đang tải trình chỉnh sửa…
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

tập thể dục#python.m2.l2.e2
Nỗ lực: 0Đang tải…

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`.

Đang tải trình chỉnh sửa…
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

tập thể dục#python.m2.l2.e3
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử