Khi chưa biết trước số lượt
Ta có thể muốn nhân đôi một số cho tới khi đạt mốc. Số lượt phụ thuộc điều kiện hiện tại, nên while diễn đạt tự nhiên nhiệm vụ này.
Kiểm tra trước mỗi lượt
while kiểm tra điều kiện trước khi chạy khối lệnh; điều kiện sai ngay từ đầu thì không chạy lượt nào. Các giá trị liên quan cần được cập nhật để điều kiện có thể trở thành sai. break thoát vòng lặp đang chứa nó; continue bỏ phần còn lại của lượt hiện tại để chuyển sang lượt kế tiếp. Dùng continue thiếu cẩn thận có thể bỏ qua bước cập nhật.
Nhân đôi đến mốc
```python
x = 3
count = 0
while x < 20:
x *= 2
count += 1
print(x, count)
```
Các giá trị x sau lượt lần lượt là 6, 12, 24; count là 3. Tại x = 24, điều kiện 24 < 20 sai nên dừng. Kết quả cuối không bắt buộc bằng đúng 20.
Thử vận dụng
x = 10; while x < 5: ... chạy khối lặp bao nhiêu lượt?
Đúng: không có lượt nào.
while không bắt buộc chạy một lần.
Số 5 là cận so sánh, không phải số lượt.
Giá trị x không phải số lượt lặp.
Lời giải
Điều kiện được kiểm tra trước và sai ngay, nên không vào khối lặp.
Duyệt chữ số
```python
n = 507
s = 0
while n > 0:
s += n % 10
n //= 10
print(s)
```
Ta lấy các chữ số từ phải: 7, 0, 5; n giảm 507 → 50 → 5 → 0. Tổng là 12. Bài đang xét n nguyên không âm; trường hợp n = 0 cho tổng 0 dù vòng lặp không chạy.
Ví dụ xem cách làm
Đoạn x = 1; while x < 4: print(x) thiếu việc gì để lần lượt in 1, 2, 3 rồi dừng?
Lời giải
Cần thêm x += 1 trong khối lặp sau print. Nếu không đổi x, điều kiện x < 4 luôn đúng.
Ví dụ xem cách làm
Áp dụng đoạn cộng chữ số cho n = 204. Hãy ghi các giá trị n sau mỗi lần chia nguyên và tổng cuối.
Lời giải
n lần lượt 20, 2, 0. Các chữ số được lấy là 4, 0, 2 nên tổng 6.
Những điều cần nhớ
Ghi điều kiện trước lượt, thay đổi trong lượt và giá trị lúc dừng. Điều kiện dừng không có nghĩa kết quả phải bằng đúng một mốc.
Đang học