Trả lời nhanh
Lệnh for trong Python dùng để lặp khi đã biết trước số lần lặp. Cú pháp: for i in range(n): rồi viết khối lệnh thụt lề bên dưới. Biến i lần lượt nhận các giá trị 0, 1, …, n – 1. Còn range(start, stop) cho các giá trị từ start đến stop – 1, tức là không bao giờ lấy giá trị stop.
1. Vì sao cần lệnh lặp for?
Giả sử em phải in dòng chữ “Chào bạn” 100 lần. Viết 100 lệnh print thì rất dài và dễ sai. Lệnh lặp cho phép em viết một lần, máy tính tự thực hiện nhiều lần.
Khi số lần lặp biết trước (đếm đủ 30 học sinh, chạy 5 vòng sân, duyệt các số từ 1 đến 100…), ta dùng lệnh for. Khi chưa biết trước số lần lặp, ta sẽ dùng lệnh while ở bài sau.
2. Cú pháp lệnh lặp for
for i in range(n):
khối lệnh
ilà biến chạy (có thể đặt tên khác nhưk,j…).range(n)tạo vùng giá trị gồm n số nguyên: 0, 1, 2, …, n – 1.- Dòng
forphải kết thúc bằng dấu hai chấm:. - Khối lệnh phải thụt vào cùng một mức (thường 4 dấu cách). Chỉ những lệnh thụt lề mới nằm trong vòng lặp.
Mỗi vòng lặp, Python gán cho i giá trị tiếp theo của vùng giá trị rồi chạy khối lệnh. Hết giá trị thì thoát vòng lặp và chạy lệnh đầu tiên không thụt lề phía sau.

3. Lệnh range() và ba cách viết
| Cách viết | Vùng giá trị | Số phần tử |
|---|---|---|
range(5) |
0, 1, 2, 3, 4 | 5 |
range(2, 7) |
2, 3, 4, 5, 6 | 7 – 2 = 5 |
range(1, 11) |
1, 2, …, 10 | 10 |
range(4, 4) |
rỗng (không lặp lần nào) | 0 |
Mẹo nhớ: giá trị đầu thì lấy, giá trị cuối thì “bỏ”. Muốn lặp từ a đến b (tính cả b) thì viết range(a, b + 1). Số lần lặp của range(start, stop) là stop – start (nếu stop lớn hơn start).
Mở rộng (không bắt buộc trong bài): range(start, stop, step) cho phép chọn bước nhảy, ví dụ range(0, 10, 2) cho 0, 2, 4, 6, 8.
4. Ví dụ minh hoạ có bảng theo dõi
Ví dụ 1: Tính tổng các số tự nhiên chẵn nhỏ hơn n
n = 10
s = 0
for i in range(0, n, 2):
s = s + i
print(s)
Cách viết khác không cần bước nhảy: duyệt mọi i rồi kiểm tra chẵn.
n = 10
s = 0
for i in range(n):
if i % 2 == 0:
s = s + i
print(s)
Bảng theo dõi với n = 10:
| i | i % 2 == 0? | s sau vòng lặp |
|---|---|---|
| 0 | Đúng | 0 |
| 1 | Sai | 0 |
| 2 | Đúng | 2 |
| 3 | Sai | 2 |
| 4 | Đúng | 6 |
| 5 | Sai | 6 |
| 6 | Đúng | 12 |
| 7 | Sai | 12 |
| 8 | Đúng | 20 |
| 9 | Sai | 20 |
Kết quả in ra: 20 (0 + 2 + 4 + 6 + 8).
Ví dụ 2: Đếm các số nhỏ hơn n là bội của 3
n = 20
dem = 0
for i in range(n):
if i % 3 == 0:
dem = dem + 1
print(dem)
Các số thoả mãn: 0, 3, 6, 9, 12, 15, 18 nên kết quả là 7. Chú ý: số 0 cũng chia hết cho 3 nên bị đếm. Nếu đề chỉ xét số nguyên dương, đổi thành range(1, n) và đáp số là 6.
5. Thực hành trong SGK: tìm ước của một số
Nhiệm vụ 1: In các ước số của n trên một hàng ngang
Ước của n là số tự nhiên k sao cho n % k == 0. Ta xét k từ 1 đến n nên dùng range(1, n + 1). Tham số end=" " trong print giúp các số nằm cùng một dòng, cách nhau dấu cách.
n = int(input("Nhập n: "))
for k in range(1, n + 1):
if n % k == 0:
print(k, end=" ")
Với n = 10, chương trình in: 1 2 5 10.
Nhiệm vụ 2: Đếm số ước thực sự của n
Ước thực sự là ước nhỏ hơn n, nên chỉ cần duyệt k từ 1 đến n – 1. Dùng biến count làm biến đếm, đặt giá trị đầu bằng 0 trước vòng lặp.
n = int(input("Nhập n: "))
count = 0
for k in range(1, n):
if n % k == 0:
count = count + 1
print(count)
Với n = 10: các ước thực sự là 1, 2, 5 nên in ra 3.
6. Hai mẫu thuật toán hay dùng với for
- Cộng dồn: đặt
s = 0trước vòng lặp, trong vòng lặp viếts = s + (giá trị cần cộng). Ví dụ tổng từ 1 đến 100:for i in range(1, 101): s = s + i, kết quả 5050. - Đếm: đặt
dem = 0, mỗi lần gặp phần tử thoả điều kiện thìdem = dem + 1.
Cả hai mẫu đều có chung ý: khởi tạo biến ngoài vòng lặp, cập nhật biến trong vòng lặp, in kết quả sau vòng lặp.
7. Lỗi sai thường gặp
- Quên dấu hai chấm sau
range(...), báo lỗi cú pháp. - Quên thụt lề hoặc thụt lề không đều. Lệnh
printthụt lề thì in mỗi vòng, không thụt lề thì chỉ in một lần sau khi kết thúc. - Nhầm cận cuối: viết
range(1, 100)để tính tổng 1 đến 100 thì thiếu số 100. Phải viếtrange(1, 101). - Dùng sai phép gán: Python gán bằng
=, không có:=kiểu Pascal trong cách viết của bài này. Khi so sánh dùng==. - Đặt giá trị đầu của biến tổng/biến đếm trong vòng lặp, khiến mỗi vòng bị đặt lại về 0.
- Viết sai tên lệnh hoặc thiếu nháy kép với xâu kí tự, ví dụ
prin("A")hayprint(A).
8. Bài luyện tập (có đáp án)
Bài 1. Đoạn chương trình sau in ra giá trị nào?
s = 0
for i in range(1, 6):
s = s + i * i
print(s)
Đáp án: 55, vì 1 + 4 + 9 + 16 + 25 = 55.
Bài 2. Dòng chữ “Hi” được in bao nhiêu lần?
for i in range(3, 9):
print("Hi")
Đáp án: 6 lần (i = 3, 4, 5, 6, 7, 8; số lần = 9 – 3).
Bài 3. Viết đoạn chương trình nhập n và in n số bội đầu tiên của 4 (4, 8, 12, …) trên một hàng.
Gợi ý đáp án:
n = int(input())
for i in range(1, n + 1):
print(4 * i, end=" ")
Với n = 5 in ra: 4 8 12 16 20.
Bài 4. Đoạn sau in ra gì? Giải thích.
t = 0
for i in range(4):
t = t + 3
print(t)
Đáp án: 12. Vòng lặp chạy 4 lần (i = 0, 1, 2, 3), mỗi lần cộng 3 vào t nên t = 4 × 3 = 12.
9. Ghi nhớ nhanh
- for dùng khi biết trước số lần lặp.
range(n): 0 → n – 1;range(a, b): a → b – 1.- Sau
for ...:phải thụt lề khối lệnh. - Biến tổng/biến đếm khởi tạo trước vòng lặp.
Xem thêm các tài liệu cùng bài
- Giải SGK Tin học 10 Bài 20: Câu lệnh lặp for
- 20 câu trắc nghiệm Tin học 10 Bài 20 có đáp án
- Sách bài tập Tin học 10 Bài 20
- Bài trước: Lý thuyết Tin học 10 Bài 19: Câu lệnh điều kiện if
- Bài sau: Lý thuyết Tin học 10 Bài 21: Câu lệnh lặp while
- Lý thuyết Tin học 10 – Kết nối tri thức (cả năm)
Câu hỏi thường gặp
range(5) gồm những số nào?
range(5) gồm 5 số: 0, 1, 2, 3, 4. Giá trị 5 không nằm trong vùng giá trị, vì range luôn dừng trước giá trị cuối.
Muốn lặp từ 1 đến n (tính cả n) thì viết thế nào?
Viết for i in range(1, n + 1):. Cộng thêm 1 ở cận cuối để giá trị n vẫn được lấy.
Khi nào dùng for, khi nào dùng while?
Dùng for khi biết trước số lần lặp, ví dụ duyệt các số từ 1 đến 100. Dùng while khi số lần lặp phụ thuộc vào một điều kiện chưa biết trước, sẽ học ở Bài 21.
Vì sao lệnh print thụt lề lại in nhiều lần còn không thụt lề chỉ in một lần?
Python xác định khối lệnh của vòng lặp bằng thụt lề. Lệnh thụt lề thuộc vòng lặp nên chạy mỗi vòng, lệnh không thụt lề chạy một lần sau khi vòng lặp kết thúc.