Kiểm điều kiện trước mỗi lượt
`while` chạy khối thụt vào **khi điều kiện còn đúng**. Trước lượt đầu và sau mỗi lượt, Python kiểm lại điều kiện. Nếu điều kiện sai ngay từ đầu thì khối không chạy lần nào.
```python
k = 2
while k < 10:
print(k, end=" ")
k = k + 3
```
Các lượt in 2, 5, 8; sau đó k thành 11 và `11 < 10` sai, nên dừng. Lệnh cập nhật `k = k + 3` giúp vòng lặp tiến tới điều kiện sai. Bỏ dòng này sẽ làm k mãi bằng 2 và vòng lặp không dừng theo điều kiện đã viết.
Bài luyện
Mã `while k < 10` bắt đầu k = 2 và mỗi lượt tăng 3 sẽ in gì?
k lần lượt 2,5,8; sau đó 11 không còn <10.
11 không thỏa điều kiện trước lượt in.
Mỗi lượt tăng 3, không tăng 1.
Điều kiện 2<10 đúng ở đầu.
Lời giải
Các giá trị thỏa `k < 10` là 2, 5, 8. Sau lượt in 8, k thành 11; điều kiện sai nên không in 11.
Bài luyện
Nếu bỏ dòng `k = k + 3` mà giữ mã còn lại, điều gì xảy ra?
Không có bước nào làm điều kiện sai sau một lượt.
Điều kiện 2<10 vẫn đúng.
k không đổi, điều kiện luôn đúng nên lặp không kết thúc.
Python không tự đổi cấu trúc lặp.
Lời giải
Khi k giữ giá trị 2, `k < 10` luôn đúng. Vòng while tiếp tục in 2 vì mã không cập nhật trạng thái để dừng.
Theo dõi k và tổng ở mốc dừng
Muốn cộng các số chẵn 2, 4, 6, 8, 10, đặt k ban đầu bằng 2 và tăng 2 sau mỗi lượt:
```python
k = 2
tong = 0
while k <= 10:
tong = tong + k
k = k + 2
print(tong)
```
Sau năm lượt, tổng là 30 và k thành 12. Điều kiện `12 <= 10` sai nên lệnh in ngoài vòng cho `30`. Nếu đổi thành `k < 10`, số 10 không được cộng và tổng chỉ 20. Nhìn dấu `<` hay `<=` để kiểm đúng mốc cuối.
Bài luyện
Chương trình cộng chẵn trong bài in bao nhiêu?
20 là khi bỏ mốc 10.
2+4+6+8+10 = 30.
12 là k sau lượt cuối, không phải tong.
5 là số lượt, không phải tổng.
Lời giải
Điều kiện `k <= 10` cho các lượt k = 2, 4, 6, 8, 10. Cộng dồn được 30 rồi dừng khi k = 12.
Bài luyện
Nếu đổi điều kiện thành `while k < 10` trong mã cộng chẵn, tổng còn bao nhiêu?
Vẫn còn các số 2,4,6,8.
2+4+6+8 = 20.
30 cần tính cả 10.
Không có số nào khác được cộng.
Lời giải
`k < 10` chỉ đúng với 2, 4, 6, 8. Số 10 bị loại tại mốc biên, nên tổng là 20.
Đang học