Điểm dừng không thuộc dãy
`range(4)` tạo lần lượt `0, 1, 2, 3`; có bốn giá trị. `range(2, 5)` tạo `2, 3, 4`: bắt đầu ở 2 và dừng **trước** 5. Với dạng hai đối số đang học, bước tăng mặc định là 1; `range(5, 2)` rỗng vì không có số nào đi từ 5 lên trước 2 bằng bước tăng 1.
Trong `for k in range(2, 5):`, mỗi lượt `k` nhận một giá trị trong dãy đó; khối thụt vào chạy tương ứng ba lần. Nếu cần các số từ 1 đến 5 **kể cả 5**, viết `range(1, 6)`.
Bài luyện
`range(2, 5)` đưa vào vòng for các giá trị nào?
Bắt đầu 2, dừng trước 5.
5 là điểm dừng không được lấy.
Dạng hai đối số không bắt đầu từ 0 ở đây.
Bước mặc định là tăng 1, không giảm.
Lời giải
Dạng `range(start, stop)` lấy từ start đến trước stop. Với 2 và 5, dãy là 2, 3, 4.
Bài luyện
Muốn `for` chạy với các số 1, 2, 3, 4, 5, dùng vùng nào?
range(5) bắt đầu từ 0 và kết thúc ở 4.
range(1,5) không có 5.
Dừng trước 6 nên lấy đủ 1 đến 5.
range(5,1) rỗng theo bước tăng mặc định.
Lời giải
Để gồm số 5, điểm dừng cần là 6. `range(1, 6)` cho 1, 2, 3, 4, 5.
Cộng theo từng lượt
Mã sau bắt đầu `tong = 0`, sau đó cộng k lần lượt bằng 1, 2, 3, 4. Biến `tong` sau từng lượt là 1, 3, 6, 10. Lệnh in nằm **ngoài** vòng lặp nên chỉ in một lần:
```python
tong = 0
for k in range(1, 5):
tong = tong + k
print(tong)
```
Nếu thụt lệnh `print(tong)` vào vòng lặp, nó sẽ in bốn kết quả trung gian thay vì chỉ kết quả cuối. Đọc lề trước khi đếm số dòng được in.
Bài luyện
Mã tính tổng trong bài in số nào khi `print(tong)` ở ngoài vòng for?
4 là số hạng cuối, chưa là tổng.
6 là tổng sau ba lượt, chưa hết.
1 + 2 + 3 + 4 = 10.
Chuỗi trung gian chỉ in nếu print ở trong vòng lặp.
Lời giải
`range(1,5)` cho 1, 2, 3, 4; cộng dồn từ 0 được 10. Lệnh print ngoài vòng lặp in một lần số 10.
Đang học