Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
- I. Lý thuyết trọng tâm
- 1. Câu lệnh lặp for
- 2. Lệnh range()
- II. Phương pháp giải các dạng bài tập
- Dạng 1: Biểu diễn dãy số bằng lệnh range()
- Dạng 2: Truy vết vòng lặp for (xác định kết quả chương trình)
- Dạng 3: Viết chương trình tính tổng bằng vòng lặp for
- Dạng 4: Viết chương trình đếm bằng vòng lặp for
- Dạng 5: Viết chương trình tìm và in ước số
- Dạng 6: Viết chương trình tính tích bằng vòng lặp for
- III. Sơ đồ tư duy
- IV. Sai lầm thường gặp
I. Lý thuyết trọng tâm
1. Câu lệnh lặp for
a) Khái niệm cấu trúc lặp
Trong lập trình, nhiều công việc cần thực hiện lặp đi lặp lại nhiều lần. Ví dụ: tính tổng 0 + 1 + 2 + … + 9 cần cộng dồn 10 lần, đếm ước số cần kiểm tra lần lượt từng số. Thay vì viết hàng chục dòng lệnh giống nhau, ta dùng câu lệnh lặp để viết gọn.
for là lệnh lặp với số lần lặp biết trước, số lần lặp được xác định bởi vùng giá trị của lệnh range().
b) Cú pháp
for <biến> in range(n):
<khối lệnh>
Cách hoạt động:
range(n)tạo ra vùng giá trị gồm n số: 0, 1, 2, …, n − 1.- Ở mỗi vòng lặp,
<biến>được gán lần lượt từng giá trị trong vùng đó. - Sau mỗi lần gán, Python thực hiện
<khối lệnh>bên trong. - Khi
<biến>đã nhận hết các giá trị → kết thúc vòng lặp.

Ví dụ minh họa: Tính tổng 0 + 1 + … + 9:
>>> S = 0
>>> for k in range(10):
S = S + k
>>> print(S)
45
Giải thích: range(10) tạo vùng {0, 1, 2, …, 9}. Biến k lần lượt nhận các giá trị này, mỗi lần cộng dồn vào S. Sau 10 vòng lặp, S = 0 + 1 + 2 + … + 9 = 45.
Quy tắc cú pháp: Giống lệnh
if, khối lệnh bên trongforphải viết sau dấu:và thụt lề (1 Tab hoặc 4 dấu cách).
Câu hỏi kiểm tra nhanh (SGK): Với giá trị n cho trước, so sánh giá trị S trong đoạn chương trình sau với tổng $1 + 2 + … + n$:
S = 0
for k in range(1, n+1):
S = S + k
→ range(1, n+1) tạo vùng {1, 2, …, n}. Biến k chạy từ 1 đến n, cộng dồn vào S. Kết quả: S = 1 + 2 + … + n, đúng bằng tổng cần tính.
2. Lệnh range()
Lệnh range() tạo ra vùng giá trị (dãy các số nguyên liên tiếp) dùng cho vòng lặp for. Có hai dạng chính:
| Dạng | Cú pháp | Vùng giá trị | Số phần tử |
|---|---|---|---|
| 1 tham số | range(stop) |
Từ 0 đến stop − 1 | stop phần tử |
| 2 tham số | range(start, stop) |
Từ start đến stop − 1 | stop − start phần tử |
Các ví dụ cụ thể:
| Lệnh | Vùng giá trị | Ghi chú |
|---|---|---|
range(10) |
0, 1, 2, …, 9 | 10 phần tử |
range(n) |
0, 1, 2, …, n − 1 | n phần tử |
range(1, n+1) |
1, 2, 3, …, n | n phần tử |
range(0, 99) |
0, 1, 2, …, 98 | 99 phần tử |
range(3, 10) |
3, 4, 5, 6, 7, 8, 9 | 7 phần tử |
range(100, 1) |
(vùng rỗng) | start > stop − 1 → không có phần tử |
Quy tắc quan trọng: Giá trị stop không bao giờ nằm trong vùng giá trị. Vùng luôn kết thúc tại stop − 1. Nếu start ≥ stop → vùng rỗng (vòng lặp không thực hiện).
Câu hỏi kiểm tra nhanh (SGK): Biểu diễn các dãy sau bằng range():
| Dãy số | Lệnh range() |
|---|---|
| a) 1, 2, 3, …, 50 | range(1, 51) |
| b) 5, 6, 7, 8, 9, 10 | range(5, 11) |
| c) 0, 1 | range(2) hoặc range(0, 2) |
| d) 10 | range(10, 11) |
Lưu ý bổ sung: Tham số end = " " trong lệnh print() cho phép in nhiều giá trị trên cùng một dòng, cách nhau bằng dấu cách (thay vì xuống dòng sau mỗi lần in).
>>> for k in range(3, 10):
print(k, end = " ")
3 4 5 6 7 8 9
II. Phương pháp giải các dạng bài tập
Dạng 1: Biểu diễn dãy số bằng lệnh range()
Phương pháp:
- Xác định giá trị đầu (start) và giá trị cuối của dãy.
- Đặt
stop = giá trị cuối + 1(vì range không bao gồm stop). - Nếu dãy bắt đầu từ 0 → chỉ cần
range(stop). - Nếu dãy bắt đầu từ số khác 0 → dùng
range(start, stop).
Bài tập mẫu: (đã giải ở phần lý thuyết — câu hỏi kiểm tra nhanh SGK)
Dạng 2: Truy vết vòng lặp for (xác định kết quả chương trình)
Phương pháp:
- Bước 1: Xác định vùng giá trị của
range()→ biến lặp nhận những giá trị nào. - Bước 2: Lập bảng truy vết: mỗi dòng ứng với một vòng lặp, ghi lại giá trị biến lặp và các biến liên quan sau mỗi vòng.
- Bước 3: Xác định kết quả cuối cùng khi vòng lặp kết thúc.
Bài tập mẫu (SGK – Luyện tập, bài 1): Đoạn chương trình sau in ra kết quả gì?
n = int(input("Nhập số tự nhiên n:"))
S = 0
for k in range(n+1):
S = S + k
print(S*S)
Lời giải: Giả sử nhập n = 4.
range(n+1) = range(5) → vùng {0, 1, 2, 3, 4}.
| Vòng lặp | k | S = S + k | S sau vòng lặp |
|---|---|---|---|
| 1 | 0 | 0 + 0 | 0 |
| 2 | 1 | 0 + 1 | 1 |
| 3 | 2 | 1 + 2 | 3 |
| 4 | 3 | 3 + 3 | 6 |
| 5 | 4 | 6 + 4 | 10 |
Sau vòng lặp: S = 0 + 1 + 2 + 3 + 4 = 10.
In ra S*S = $10^2$ = 100.
→ Tổng quát: Chương trình tính S = 0 + 1 + 2 + … + n, rồi in ra $S^2$. Với n nhập vào, kết quả là $(0 + 1 + 2 + … + n)^2$.
Dạng 3: Viết chương trình tính tổng bằng vòng lặp for
Phương pháp:
- Bước 1: Khởi tạo biến tổng
S = 0. - Bước 2: Xác định vùng giá trị phù hợp cho
range(). - Bước 3: Trong vòng lặp, cộng dồn từng phần tử vào S:
S = S + <biểu thức>. - Bước 4: In kết quả sau vòng lặp.
Mẫu chung tính tổng:
S = 0 for k in range(start, stop): S = S + f(k) # f(k) là biểu thức cần cộng print(S)
Bài tập mẫu (SGK – Ví dụ 1): Tính tổng các số tự nhiên chẵn nhỏ hơn n (n = 10).
n = 10
S = 0
for k in range(n):
if k % 2 == 0:
S = S + k
print(S)
Giải thích: range(10) → k chạy từ 0 đến 9. Chỉ cộng k vào S khi k chẵn (k % 2 == 0). Kết quả: 0 + 2 + 4 + 6 + 8 = 20.
Dạng 4: Viết chương trình đếm bằng vòng lặp for
Phương pháp:
- Bước 1: Khởi tạo biến đếm
count = 0(hoặcC = 0). - Bước 2: Xác định vùng giá trị cho
range(). - Bước 3: Trong vòng lặp, kiểm tra điều kiện. Nếu thỏa mãn → tăng biến đếm:
count = count + 1. - Bước 4: In kết quả sau vòng lặp.
Mẫu chung đếm:
count = 0 for k in range(start, stop): if <điều kiện>: count = count + 1 print(count)
Bài tập mẫu (SGK – Ví dụ 2): Đếm số các số nguyên nhỏ hơn n (n = 20) và là bội của 3.
n = 20
C = 0
for k in range(n):
if k % 3 == 0:
C = C + 1
print(C)
Giải thích: range(20) → k chạy từ 0 đến 19. Các số chia hết cho 3: 0, 3, 6, 9, 12, 15, 18 → 7 số. Kết quả: 7.
Dạng 5: Viết chương trình tìm và in ước số
Phương pháp:
- Ước số của n là số k thỏa mãn
n % k == 0. - Duyệt k từ 1 đến n: dùng
range(1, n+1). - Ước số thực sự: k < n và
n % k == 0→ dùngrange(1, n). - Muốn in trên cùng một dòng → dùng
print(k, end = " ").
Bài tập mẫu (SGK – Thực hành, nhiệm vụ 1): Nhập n, in ra dãy ước số của n trên một dòng.
n = int(input("Nhập số tự nhiên n: "))
for k in range(1, n+1):
if n % k == 0:
print(k, end = " ")
Ví dụ: Nhập n = 10 → In ra: 1 2 5 10
Dạng 6: Viết chương trình tính tích bằng vòng lặp for
Phương pháp:
- Tương tự tính tổng, nhưng:
- Khởi tạo biến tích
P = 1(không phải 0, vì nhân với 0 sẽ luôn bằng 0). - Trong vòng lặp:
P = P * <biểu thức>.
- Khởi tạo biến tích
Mẫu chung tính tích:
P = 1 for k in range(start, stop): P = P * k print(P)
Bài tập mẫu (SGK – Luyện tập, bài 2): Viết đoạn chương trình tính tích $1 \times 2 \times 3 \times … \times n$ (n! — giai thừa).
n = int(input("Nhập số tự nhiên n: "))
P = 1
for k in range(1, n+1):
P = P * k
print(P)
Giải thích: range(1, n+1) → k chạy từ 1 đến n. Mỗi vòng nhân dồn k vào P. Kết quả: $P = 1 \times 2 \times 3 \times … \times n = n!$
III. Sơ đồ tư duy
1. Lệnh lặp for
- 1.1. Lặp với số lần biết trước
- 1.2. Cú pháp:
for <biến> in range(n): <khối lệnh> - 1.3. Biến lặp nhận lần lượt từng giá trị trong vùng range()
- 1.4. Khối lệnh viết sau dấu
:, thụt lề
2. Lệnh range()
- 2.1.
range(stop): vùng từ 0 đến stop − 1 - 2.2.
range(start, stop): vùng từ start đến stop − 1 - 2.3. Giá trị stop không nằm trong vùng
- 2.4. start ≥ stop → vùng rỗng
3. Các mẫu lập trình cơ bản
- 3.1. Tính tổng: khởi tạo
S = 0, cộng dồnS = S + ... - 3.2. Tính tích: khởi tạo
P = 1, nhân dồnP = P * ... - 3.3. Đếm: khởi tạo
count = 0, tăngcount = count + 1
4. Kĩ thuật bổ trợ
- 4.1.
print(k, end = " "): in trên cùng một dòng - 4.2. Kết hợp
ifbên trongforđể lọc điều kiện
IV. Sai lầm thường gặp
| Sai lầm | Đính chính |
|---|---|
Nghĩ range(10) tạo dãy từ 1 đến 10 |
range(10) tạo dãy từ 0 đến 9 (10 phần tử). Muốn 1 đến 10 phải viết range(1, 11). |
Nghĩ range(1, 50) bao gồm số 50 |
range(1, 50) kết thúc tại 49. Giá trị stop không bao giờ nằm trong vùng. Muốn bao gồm 50 → range(1, 51). |
Khởi tạo biến tích bằng 0: P = 0 rồi nhân dồn |
Nhân với 0 luôn cho 0! Biến tích phải khởi tạo bằng 1: P = 1. |
Quên thụt lề khối lệnh bên trong for |
Tương tự lệnh if, khối lệnh trong for phải thụt lề. Thiếu → IndentationError. |
Nhầm range(n) với range(1, n) khi tính tổng 1 + 2 + … + n |
range(n) bắt đầu từ 0, range(1, n) bắt đầu từ 1 nhưng kết thúc tại n−1. Muốn tổng 1 đến n → dùng range(1, n+1). |
Dùng range(1, n) để tìm tất cả ước của n (thiếu n) |
range(1, n) chỉ duyệt đến n−1, bỏ qua n. Muốn tìm tất cả ước kể cả n → dùng range(1, n+1). Muốn tìm ước thực sự (không tính n) → range(1, n) là đúng. |
Quên dấu : sau for ... in range(n) |
Bắt buộc có dấu hai chấm: for k in range(n):. Thiếu → SyntaxError. |

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa
