Duyệt theo chỉ số khi cần vị trí
Với `so = [4, 7, 2]`, `range(len(so))` cho 0, 1, 2. Ở mỗi lượt, `so[i]` là giá trị tại chỉ số i. Mã sau in hai phần tử ở vị trí chẵn 0 và 2:
```python
so = [4, 7, 2]
for i in range(len(so)):
if i % 2 == 0:
print(so[i], end=" ")
```
Kết quả là `4 2`. Điều kiện đang xét **chỉ số** chẵn, không xét giá trị chẵn; giá trị 7 ở chỉ số 1 bị bỏ. Muốn xét số chẵn trong danh sách, phải kiểm `so[i] % 2 == 0`.
Bài luyện
Với `so = [4, 7, 2]`, mã kiểm `i % 2 == 0` trong bài in gì?
Chỉ số 0 và 2 là chẵn, mang giá trị 4 và 2.
Chỉ số 1 bị bỏ.
Thứ tự list không đổi.
Chỉ số 0 cũng thỏa.
Lời giải
`i` lần lượt 0, 1, 2; chỉ 0 và 2 thỏa điều kiện, nên in `so[0]=4` rồi `so[2]=2`.
Bài luyện
Nếu muốn in các **giá trị chẵn** của `so`, điều kiện nào cần dùng trong vòng lặp theo chỉ số?
Điều đó xét chỉ số.
so[i] là giá trị đang xét.
Độ dài list không cho biết từng giá trị.
Chỉ số bằng len vượt phạm vi.
Lời giải
Muốn kiểm giá trị, lấy `so[i]` rồi xét số dư khi chia 2. Điều kiện `so[i] % 2 == 0` chọn 4 và 2.
Tạo list mới bằng cách thêm từng phần tử
`A.append(x)` thêm **một phần tử x vào cuối A** và làm A dài thêm 1; nó sửa chính A. Nhiệm vụ: tạo list các số chẵn nhỏ hơn 8 từ vùng 0–7:
```python
A = []
for k in range(8):
if k % 2 == 0:
A.append(k)
print(A)
```
Kết quả là `[0, 2, 4, 6]`. Nếu đổi `range(8)` thành `range(0)`, không có lượt nào và A vẫn rỗng. Khi tính trung bình của list nhập vào ở bài khác, cần kiểm `len(A) > 0` trước phép chia; list rỗng không có trung bình số học theo công thức tổng/số phần tử.
Bài luyện
Sau mã dùng append trong bài, `A` là gì?
range(8) cho 0–7 và các số chẵn là 0,2,4,6.
8 không thuộc range(8).
Điều kiện lọc số lẻ.
Có bốn số được thêm.
Lời giải
Vòng for xét 0 đến 7. Bốn giá trị có số dư chia 2 bằng 0 là 0, 2, 4, 6; append đưa chúng vào A theo thứ tự.
Bài luyện
Nếu `A = []`, phép tính `sum(A) / len(A)` sẽ gặp điều gì?
len(A) bằng 0 nên không chia được.
Biểu thức là phép chia, không trả list.
Mẫu số len(A) là 0.
Mã không có lệnh nhập.
Lời giải
`sum([])` bằng 0 nhưng `len([])` cũng bằng 0. Phép `0 / 0` gây `ZeroDivisionError`; phải kiểm list không rỗng trước khi tính trung bình.
Đang học