Buổi 5: Vòng lặp for
Hôm nay em sẽ học
for … in range(…)thay cho khối lặp lại n lần- Mẫu tích lũy: tính tổng, tích, đếm
- In nhiều số trên cùng một dòng
- Đọc n số trên n dòng
Bấm vào slide rồi dùng phím ← → để chuyển, phím F để xem toàn màn hình.
Mở toàn màn hình1. Kiến thức chính
Lặp lại n lần với range
| Scratch | Python |
|---|---|
| lặp lại 5 | for i in range(5): |
| các khối bên trong | các dòng thụt vào 4 dấu cách |
| Viết | Biến i lần lượt là |
|---|---|
range(5) | 0, 1, 2, 3, 4 |
range(1, 6) | 1, 2, 3, 4, 5 |
range(0, 10, 2) | 0, 2, 4, 6, 8 |
range(10, 0, -1) | 10, 9, …, 1 |
range(a, b) đi từ a đến b − 1. Muốn chạy từ 1 đến n phải viết range(1, n + 1).Mẫu tích lũy: tổng, tích, đếm
n = int(input()) tong = 0 # 1. khởi tạo TRƯỚC vòng lặp for i in range(1, n + 1): tong += i # 2. cập nhật TRONG vòng lặp print(tong) # 3. in SAU vòng lặp (không thụt lề)
- Tính tổng: khởi tạo
0. Tính tích: khởi tạo1. Đếm: khởi tạo0, gặp số thỏa mãn thìdem += 1. - Nếu
printbị thụt vào trong vòng lặp, chương trình sẽ in ra n lần.
In trên một dòng – đọc n số trên n dòng
for i in range(1, 6): print(i, end=" ") # in xong thêm dấu cách thay vì xuống dòng print() # xuống dòng n = int(input()) for _ in range(n): # dùng _ khi không cần biến đếm x = int(input())
Bài học về tốc độ
Vòng lặp 10⁶ lần chạy nhanh, nhưng 10¹⁸ lần thì máy chạy hàng nghìn năm. Khi n rất lớn phải dùng công thức, ví dụ 1 + 2 + … + n = n × (n + 1) / 2 → n * (n + 1) // 2.
Chạy tay
Lập bảng giá trị các biến qua từng vòng lặp trên giấy. Đây là cách tốt nhất để hiểu chương trình và tìm lỗi.
2. Ghi nhớ và lỗi thường gặp
| Em viết | Vấn đề |
|---|---|
for i in range(1, n): | bỏ sót số n |
tich = 0 rồi tich *= i | tích luôn bằng 0 – phải khởi tạo 1 |
tong = 0 đặt trong vòng lặp | tổng bị đặt lại về 0 ở mỗi vòng |
print thụt lề nhầm vào trong vòng lặp | in ra quá nhiều dòng |
3. Câu hỏi tự kiểm tra
range(2, 10, 3)cho những giá trị nào?- Chương trình sau in ra gì?
s = 0 for i in range(4): s += i print(s)
- Muốn tính 1 × 2 × 3 × … × n thì biến tích phải khởi tạo bằng bao nhiêu?
4. Bài tập về nhà
Bài 1 ★ – CHIA35
Input: số nguyên n (3 ≤ n ≤ 1000).
Output: các số trong đoạn từ 1 đến n chia hết cho 3 hoặc cho 5, trên một dòng.
| Input | Output |
|---|---|
15 | 3 5 6 9 10 12 15 |
Bài 2 ★ – TONGBP
Input: số nguyên n (1 ≤ n ≤ 10⁶).
Output: S = 1² + 2² + … + n².
| Input | Output |
|---|---|
3 | 14 |
10 | 385 |
Bài 3 ★★ – DEMAM
Input: dòng đầu là n (1 ≤ n ≤ 10⁴); n dòng tiếp theo, mỗi dòng một số nguyên.
Output: có bao nhiêu số âm.
| Input | Output |
|---|---|
53-10-72 | 2 |
Bài 4 ★★★ (thử thách) – HINHTHOI
Input: số nguyên n (1 ≤ n ≤ 20).
Output: hình thoi gồm 2n − 1 dòng bằng dấu *. Ví dụ với n = 3:
* *** ***** *** *
range(n - 1, 0, -1)..py đặt tên theo tên bài. Chạy thử với tất cả ví dụ trước khi nộp!Chưa mở đáp án
Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.
Chưa mở đáp án
Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.