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 108
Câu hỏi mở đầu
Đề bài: Cho các việc được ghi trong cột A và cột B của bảng. Đối với mỗi hàng, em hãy cho biết công việc được lặp đi lặp lại là gì? Điều kiện để dừng công việc là gì? Số lần thực hiện việc lặp giữa hai cột có gì khác nhau?
Lời giải:
Phân tích từng hàng trong bảng:
| Hàng | Công việc lặp | Điều kiện dừng (Cột A) | Điều kiện dừng (Cột B) |
|---|---|---|---|
| 1 | Chạy 1 vòng quanh sân | Đã chạy đủ $20$ vòng | Hết $2$ tiếng |
| 2 | Làm 1 bài tập về nhà | Đã làm xong $5$ bài | Đến giờ ăn cơm |
| 3 | Lấy 1 xô nước | Đã lấy đủ $15$ xô | Thùng nước đã đầy |
Khác nhau về số lần lặp giữa hai cột:
- Cột A: Số lần lặp biết trước (20, 5, 15 lần). → Tương ứng với lệnh lặp
for. - Cột B: Số lần lặp không biết trước, phụ thuộc vào điều kiện. → Tương ứng với lệnh lặp
while.
1. Lệnh lặp while
Hoạt động 1 trang 108
Đề bài: Quan sát đoạn chương trình sau, giải thích kết quả in ra.
>>> S = 0
>>> k = 1
>>> while k < 100:
S = S + k
k = k + 7
>>> print(S)
750
Lời giải:
Phân tích từng bước:
- Khởi tạo: $S = 0$, $k = 1$.
- Vòng lặp tiếp tục khi điều kiện $k < 100$ còn đúng.
- Mỗi vòng lặp: cộng dồn $k$ vào $S$, rồi tăng $k$ thêm $7$.
Các giá trị của $k$ qua từng vòng lặp:
$$k: 1 \to 8 \to 15 \to 22 \to 29 \to 36 \to 43 \to 50 \to 57 \to 64 \to 71 \to 78 \to 85 \to 92 \to 99$$
Sau đó $k = 99 + 7 = 106 \geq 100$ → vòng lặp dừng.
Tính $S$:
$$S = 1 + 8 + 15 + 22 + 29 + 36 + 43 + 50 + 57 + 64 + 71 + 78 + 85 + 92 + 99 = 750$$
→ Kết quả $S = 750$ là tổng của 15 số trong dãy, mỗi số hơn số trước $7$ đơn vị, bắt đầu từ $1$.
Câu hỏi củng cố mục 1 trang 109
Đề bài:
1. Lệnh while kiểm tra điều kiện trước hay sau khi thực hiện khối lệnh lặp?
Lời giải:
Lệnh while kiểm tra điều kiện trước khi thực hiện khối lệnh lặp:
- Nếu
<điều kiện>đúng (True) → thực hiện khối lệnh lặp. - Nếu
<điều kiện>sai (False) → kết thúc lệnhwhile, không thực hiện khối lệnh.
Hệ quả: Nếu ngay từ đầu điều kiện đã sai, khối lệnh lặp sẽ không được thực hiện lần nào.
2. Viết đoạn chương trình tính tổng $2 + 4 + … + 100$ sử dụng lệnh while.
Lời giải:
Ý tưởng:
- Bắt đầu với $k = 2$, mỗi vòng cộng $k$ vào $S$ rồi tăng $k$ thêm $2$.
- Lặp khi $k \leq 100$.
Chương trình:
S = 0
k = 2
while k <= 100:
S = S + k
k = k + 2
print(S)
Kết quả khi chạy:
2550
Kiểm tra: $S = 2 + 4 + 6 + … + 100$. Dãy có $50$ số chẵn, tổng $= \dfrac{(2 + 100) \times 50}{2} = 2550$. ✓
Thực hành trang 110
Nhiệm vụ 1 trang 110
Đề bài: Viết chương trình in toàn bộ dãy các số tự nhiên từ $1$ đến $100$ trên một hàng ngang.
Hướng dẫn thực hành:
Ý tưởng:
- Dùng vòng lặp
whilevới điều kiện $k < 100$ (kết hợp với việc tăng $k$ trước khi in để in được số $100$). - Để 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õ:
k = 0
while k < 100:
k = k + 1
print(k, end = " ")
Cách hoạt động:
- Mỗi vòng lặp tăng $k$ thêm $1$ rồi in $k$.
- Khi $k$ tăng đến $100$, lệnh
printin $100$ rồi vòng lặp kiểm tra điều kiện $100 < 100$ (sai) → dừng.
Kết quả khi chạy:
1 2 3 4 5 6 7 8 9 10 ... 98 99 100
Nhiệm vụ 2 trang 110
Đề bài: Viết chương trình in ra màn hình dãy các chữ cái tiếng Anh từ "A" đến "Z" theo ba hàng ngang trên màn hình, hai hàng đầu có $10$ chữ cái, hàng thứ ba có $6$ chữ cái.
Hướng dẫn thực hành:
Ý tưởng:
- Các chữ cái A đến Z có số thứ tự trong bảng mã ASCII từ $65$ đến $90$.
- Dùng lệnh
chr(k)để chuyển số $k$ thành kí tự tương ứng (ví dụchr(65)='A'). - Tạo biến đếm $i$ để biết đang in đến chữ cái thứ mấy. Cứ in đủ $10$ chữ (tức $i \% 10 == 0$) thì xuống dòng.
Chương trình:
i = 0
k = 65 # bắt đầu từ số thứ tự của chữ cái A
while k <= 90:
i = i + 1
if i%10 == 0:
print(chr(k)) # in xong rồi xuống dòng
else:
print(chr(k), end = " ") # in trên cùng một hàng
k = k + 1
Kết quả khi chạy:
A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z
Giải thích cách xuống dòng:
- Khi $i = 10$ (chữ thứ 10), $i \% 10 == 0$ đúng → in
chr(k)và tự động xuống dòng (vì lệnhprint()không cóend = " ").- Khi $i = 20$ (chữ thứ 20), tương tự → xuống dòng.
- Sau đó in tiếp $6$ chữ cuối ($U, V, W, X, Y, Z$) trên hàng thứ ba.
Luyện tập trang 110
Luyện tập 1 trang 110
Đề bài: Cho dãy số $1, 4, 7, 10, …$ Viết chương trình in ra phần tử lớn nhất của dãy nhưng nhỏ hơn $100$.
Lời giải:
Phân tích:
- Dãy có quy luật: số sau hơn số trước $3$ đơn vị (công sai $3$).
- Cần tìm phần tử cuối cùng của dãy mà nhỏ hơn $100$.
Ý tưởng: Dùng biến last lưu giá trị trước đó của $k$. Khi vòng lặp dừng, last chính là phần tử lớn nhất nhỏ hơn $100$.
Chương trình:
k = 1
while k < 100:
last = k
k = k + 3
print(last)
Cách hoạt động:
- $k$ lần lượt nhận giá trị: $1, 4, 7, 10, …, 94, 97, 100$.
- Khi $k = 97$ vẫn $< 100$: gán
last = 97, sau đó $k = 100$. - Khi $k = 100$: điều kiện $100 < 100$ sai → vòng lặp dừng.
lastvẫn giữ giá trị $97$.
Kết quả khi chạy:
97
Luyện tập 2 trang 110
Đề bài: Viết chương trình đếm trong dãy $100$ số tự nhiên đầu tiên có bao nhiêu số thoả mãn điều kiện: hoặc chia hết cho $5$ hoặc chia cho $3$ dư $1$.
Lời giải:
Ý tưởng:
- Duyệt $k$ từ $1$ đến $100$.
- Nếu $k$ chia hết cho $5$ (
k%5 == 0) hoặc $k$ chia cho $3$ dư $1$ (k%3 == 1) thì tăng biến đếmcount.
Chương trình:
count = 0
k = 1
while k <= 100:
if k%5 == 0 or k%3 == 1:
count = count + 1
k = k + 1
print(count)
Kết quả khi chạy:
47
Vận dụng trang 110
Vận dụng trang 110
Đề bài: Viết chương trình in các số tự nhiên từ $1$ đến $100$ ra màn hình thành $10$ hàng, mỗi hàng $10$ số, có dạng như sau:
1 2 3 ... 10
11 12 ... 20
.................
91 92 ... 100
Lời giải:
Ý tưởng:
- Duyệt $k$ từ $1$ đến $100$.
- Cứ in được $10$ số (tức là $k$ chia hết cho $10$: $k = 10, 20, 30, …, 100$) thì xuống dòng.
- Các số còn lại thì in trên cùng một hàng (dùng
end = " ").
Chương trình:
k = 1
while k <= 100:
if k%10 == 0:
print(k) # in xong rồi xuống dòng
else:
print(k, end = " ") # in trên cùng một hàng
k = k + 1
Kết quả khi chạy:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
...
91 92 93 94 95 96 97 98 99 100
Chú ý: Cách làm này tương tự Nhiệm vụ 2 ở phần Thực hành (in chữ cái A đến Z theo hàng), chỉ khác là ở đây in số từ $1$ đến $100$ và xuống dòng sau mỗi $10$ số.

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
