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 đó
Câu hỏi mở đầu trang 105
Câu hỏi mở đầu
Đề bài: Em có thể đã gặp những trường hợp cần thực hiện một số công việc lặp đi lặp lại nhiều lần. Ví dụ, để kể tên tất cả các bạn trong lớp có $30$ học sinh, em cần lần lượt đọc tên từng bạn; để đếm số lượng các số chia hết cho $3$ trong khoảng từ $1$ đến $50$, em có thể kiểm tra lần lượt các số từ $1$ đến $50$ và ghi ra các số chia hết cho $3$ (chẳng hạn $3$, $6$, $9$,…) rồi đếm các số đó.
Em có thể xác định được trong mỗi ví dụ trên công việc nào cần phải lặp và được lặp lại bao nhiêu lần không?
Lời giải:
| Ví dụ | Công việc cần lặp | Số lần lặp |
|---|---|---|
| Kể tên 30 học sinh trong lớp | Đọc tên một bạn | 30 lần |
| Đếm số chia hết cho 3 từ 1 đến 50 | Kiểm tra một số có chia hết cho $3$ không, nếu có thì đếm | 50 lần (kiểm tra từng số từ $1$ đến $50$) |
1. Lệnh lặp For
Hoạt động 1 trang 105
Đề bài: Thực hiện đoạn chương trình sau trong chế độ gõ lệnh trực tiếp của Python để tính tổng $0 + 1 + … + 9$. Tổng này có giá trị bao nhiêu? Giải thích kết quả.
>>> S = 0
>>> for k in range(10):
S = S + k
>>> print(S)
45
Lời giải:
Tổng có giá trị bằng $45$.
Giải thích từng bước:
- Lệnh
range(10)tạo ra vùng giá trị gồm $10$ số: $0, 1, 2, …, 9$. - Vòng lặp
forchạy $10$ lần, mỗi lần biến $k$ nhận một giá trị trong vùng trên. - Mỗi vòng lặp thực hiện lệnh: $S = S + k$ (cộng dồn $k$ vào $S$).
- Sau $10$ vòng lặp:$$S = 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45$$
→ Đây chính là tổng các số tự nhiên từ $0$ đến $9$.
Câu hỏi củng cố mục 1 trang 106
Đề bài: 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
Lời giải:
Phân tích đoạn chương trình:
- Lệnh
range(1, n+1)tạo vùng giá trị gồm các số: $1, 2, 3, …, n$. - Vòng lặp chạy $n$ lần, biến $k$ lần lượt nhận các giá trị từ $1$ đến $n$.
- Mỗi vòng lặp: $S = S + k$.
→ Sau khi vòng lặp kết thúc:
$$S = 1 + 2 + 3 + … + n$$
Kết luận: Giá trị $S$ bằng đúng tổng $1 + 2 + … + n$. Đoạn chương trình trên là cách dùng vòng lặp for để tính tổng các số tự nhiên từ $1$ đến $n$.
2. Lệnh range
Câu hỏi củng cố mục 2 trang 107
Đề bài: Hãy biểu diễn các dãy sau đây bằng lệnh range().
a) $1, 2, 3, …, 50$. b) $5, 6, 7, 8, 9, 10$. c) $0, 1$. d) $10$.
Lời giải:
Nhắc lại:
range(start, stop)cho dãy từstartđếnstop - 1(không lấystop).
| Câu | 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(0, 2) hoặc range(2) |
| d) | $10$ | range(10, 11) |
Giải thích chi tiết:
- Câu a: Để có số cuối là $50$, viết
stop = 51→range(1, 51). - Câu b: Dãy bắt đầu từ $5$, kết thúc ở $10$, nên
stop = 11→range(5, 11). - Câu c: Dãy chỉ có $0$ và $1$, nên
stop = 2. Vì bắt đầu từ $0$ nên có thể viết gọn làrange(2). - Câu d: Dãy chỉ có một số $10$, nên
start = 10vàstop = 11→range(10, 11).
Thực hành trang 107
Nhiệm vụ 1 trang 107
Đề bài: Nhập số tự nhiên $n$ từ bàn phím và in ra màn hình dãy các ước số của $n$ theo chiều ngang màn hình. Ví dụ nếu $n = 10$ thì chương trình sẽ in ra dãy số $1, 2, 5, 10$.
Hướng dẫn thực hành:
Ý tưởng:
- Ước số của $n$ là các số tự nhiên $k$ thoả mãn $n \% k == 0$.
- Duyệt $k$ từ $1$ đến $n$, nếu $k$ là ước số thì in ra.
- Để in trên cùng một hàng, dùng thêm
end = " "trong lệnhprint().
Em mở chế độ soạn thảo (File / New File) và gõ:
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ụ khi chạy (nhập $n = 10$):
Nhập số tự nhiên n: 10
1 2 5 10
Chú ý:
range(1, n+1)để $k$ chạy từ $1$ đến $n$ (cả $1$ và $n$ đều là ước của $n$).
Nhiệm vụ 2 trang 107
Đề bài: Nhập số tự nhiên $n$ từ bàn phím và đếm số các ước số thực sự của $n$. Ước số thực sự của $n$ là số tự nhiên $k < n$ và là ước của $n$.
Hướng dẫn thực hành:
Ý tưởng:
- Giống Nhiệm vụ 1, nhưng:
- Chỉ xét $k$ chạy từ $1$ đến $n – 1$ (không tính $n$).
- Tạo biến
countđể đếm số ước, mỗi lần tìm được ước thì tăngcountthêm $1$.
Em gõ chương trình:
n = int(input("Nhập số tự nhiên n: "))
count = 0
for k in range(1, n):
if n%k == 0:
count = count + 1
print(count)
Ví dụ khi chạy (nhập $n = 10$):
Nhập số tự nhiên n: 10
3
Kiểm tra: Ước thực sự của $10$ là $1, 2, 5$ (không tính $10$) → có $3$ ước. ✓
Chú ý:
range(1, n)để $k$ chỉ chạy từ $1$ đến $n – 1$ (không lấy giá trị $n$).
Luyện tập trang 107
Luyện tập 1 trang 107
Đề bài: Đ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:
Phân tích từng bước:
- Lệnh
range(n+1)tạo vùng giá trị $0, 1, 2, …, n$. - Vòng lặp tính: $S = 0 + 1 + 2 + … + n$.
- Cuối cùng in ra giá trị $S \times S$, tức là bình phương của tổng $0 + 1 + 2 + … + n$.
Kết luận: Đoạn chương trình in ra:
$$(0 + 1 + 2 + … + n)^2$$
Ví dụ:
- Với $n = 3$: $S = 0 + 1 + 2 + 3 = 6$, in ra $S \times S = 36$.
- Với $n = 5$: $S = 0 + 1 + 2 + 3 + 4 + 5 = 15$, in ra $S \times S = 225$.
Luyện tập 2 trang 107
Đề bài: Viết đoạn chương trình tính tích $1 \times 2 \times 3 \times … \times n$ với $n$ được nhập vào từ bàn phím.
Lời giải:
Ý tưởng:
- Tạo biến $P$ để lưu tích, khởi tạo $P = 1$ (vì là phép nhân, không phải cộng).
- Dùng vòng lặp cho $k$ chạy từ $1$ đến $n$: mỗi lần $P = P \times k$.
Chương trình:
n = int(input("Nhập số tự nhiên n: "))
P = 1
for k in range(1, n+1):
P = P * k
print("Tích 1 x 2 x ... x", n, "=", P)
Ví dụ khi chạy (nhập $n = 5$):
Nhập số tự nhiên n: 5
Tích 1 x 2 x ... x 5 = 120
Kiểm tra: $1 \times 2 \times 3 \times 4 \times 5 = 120$. ✓
Chú ý: Phải khởi tạo $P = 1$ (không phải $P = 0$), vì bất kì số nào nhân với $0$ cũng bằng $0$.
Vận dụng trang 107
Vận dụng 1 trang 107
Đề bài: Viết chương trình nhập từ bàn phím số tự nhiên $n$ và in ra kết quả:
$$S = 1 + \dfrac{1}{2} + \dfrac{1}{3} + … + \dfrac{1}{n}$$
Lời giải:
Ý tưởng:
- Tạo biến $S = 0$ để cộng dồn.
- Cho $k$ chạy từ $1$ đến $n$, mỗi vòng cộng thêm $\dfrac{1}{k}$ vào $S$.
Chương trình:
n = int(input("Nhập số tự nhiên n: "))
S = 0
for k in range(1, n+1):
S = S + 1/k
print("S =", S)
Ví dụ khi chạy (nhập $n = 4$):
Nhập số tự nhiên n: 4
S = 2.083333333333333
Kiểm tra: $S = 1 + \dfrac{1}{2} + \dfrac{1}{3} + \dfrac{1}{4} = 1 + 0{,}5 + 0{,}333… + 0{,}25 \approx 2{,}0833$. ✓
Vận dụng 2 trang 107
Đề bài: Viết chương trình nhập từ bàn phím số tự nhiên $n$ và in ra kết quả là tổng sau:
$$S = 1^3 + 2^3 + … + n^3$$
Lời giải:
Ý tưởng:
- Tạo biến $S = 0$ để cộng dồn.
- Cho $k$ chạy từ $1$ đến $n$, mỗi vòng cộng thêm $k^3$ vào $S$. Trong Python, $k^3$ viết là
k**3.
Chương trình:
n = int(input("Nhập số tự nhiên n: "))
S = 0
for k in range(1, n+1):
S = S + k**3
print("S =", S)
Ví dụ khi chạy (nhập $n = 3$):
Nhập số tự nhiên n: 3
S = 36
Kiểm tra: $S = 1^3 + 2^3 + 3^3 = 1 + 8 + 27 = 36$. ✓

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
