Giải Tin Học 10 trang 106

Lời giải chi tiết SGK Lớp 10 · Môn Tin Học · Trang 106–107

Nguon: Tin Hoc 10 - Ket Noi Tri Thuc Voi Cuoc Song (trang 106 – 107)

🔍 Kiến thức cần nhớ

1. Cấu trúc lặp và lệnh for

Khi cần thực hiện một công việc lặp đi lặp lại nhiều lần, ta dùng cấu trúc lặp. Trong Python, lệnh for là câu lệnh lặp với số lần biết trước.

Cú pháp:

for  in range(n):
    
  • Mỗi vòng lặp, biến i được gán lần lượt từng giá trị trong vùng giá trị do range() tạo ra.
  • Với mỗi giá trị đó, máy thực hiện (phần thụt lề bên trong).

2. Lệnh range() tạo vùng giá trị

Cú phápVùng giá trị trả về
range(stop)0, 1, 2, …, stop − 1
range(start, stop)start, start+1, …, stop − 1

Một số ví dụ:

  • range(n) → 0, 1, 2, …, n − 1
  • range(1, n+1) → 1, 2, 3, …, n
  • range(0, 99) → 0, 1, 2, …, 98
  • range(100, 1) → vùng rỗng (vì start > stop nên không có giá trị nào)
💡 Mẹo nhớ: range luôn lấy từ start nhưng dừng TRƯỚC stop (không lấy stop). Số lượng phần tử của range(start, stop) chính là stop − start (nếu dương).
⚠️ Lưu ý thi: Lỗi sai phổ biến nhất là tưởng range(n) chạy đến n. Thực tế chỉ chạy đến n − 1. Muốn lấy đủ các số từ 1 đến n phải viết range(1, n+1).

⚙️ Bài tập

Câu hỏi mở đầu (trang 105)

Đề bài: 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?

Trả lời:

Phân tích từng ví dụ trong phần dẫn nhập:

  • Ví dụ kể tên các bạn trong lớp: Công việc cần lặp là đọc tên từng bạn. Lớp có 30 học sinh nên công việc này được lặp lại 30 lần.
  • Ví dụ đếm các số chia hết cho 3 trong khoảng từ 1 đến 50: Công việc cần lặp là kiểm tra một số có chia hết cho 3 hay không (và nếu có thì ghi/đếm). Do xét lần lượt các số từ 1 đến 50 nên công việc này được lặp lại 50 lần.

Nhận xét: Cả hai ví dụ đều có số lần lặp biết trước, nên rất phù hợp để dùng câu lệnh lặp for.


Câu 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
Cách 1 — Mô phỏng từng vòng lặp

Lệnh range(10) tạo ra vùng giá trị gồm 10 số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Lệnh for thực hiện 10 lần lặp, mỗi lần biến k nhận một giá trị và cộng dồn vào S:

Lần lặpkS = S + kGiá trị S
Khởi tạo0
100 + 00
210 + 11
321 + 23
433 + 36
546 + 410
6510 + 515
7615 + 621
8721 + 728
9828 + 836
10936 + 945

Sau khi kết thúc vòng lặp, S = 45. Vậy lệnh print(S) in ra 45.

Cách 2 — Dùng công thức tổng dãy số

Tổng cần tính là tổng các số tự nhiên liên tiếp từ 0 đến 9:

0 + 1 + 2 + … + 9 = (0 + 9) × 10 ÷ 2 = 9 × 10 ÷ 2 = 45

Kết quả trùng khớp với chương trình.

💡 Mẹo nhớ: Tổng các số tự nhiên từ 1 đến n là n × (n + 1) ÷ 2. Đây là công thức dùng để kiểm tra nhanh kết quả của các bài tính tổng bằng vòng lặp.

Câu hỏi giữa bài (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

Trả lời:

Lệnh range(1, n+1) tạo ra vùng giá trị gồm các số: 1, 2, 3, …, n (lấy từ 1 và dừng trước n + 1, tức là dừng ở n).

Vòng lặp for cộng dồn lần lượt từng số đó vào S:

S = 1 + 2 + 3 + … + n

Vậy giá trị S thu được đúng bằng tổng 1 + 2 + … + n. Hai giá trị bằng nhau.

⚠️ Lưu ý thi: Để tính tổng từ 1 đến n phải dùng range(1, n+1). Nếu chỉ viết range(n) thì vùng giá trị là 0, 1, …, n − 1, dẫn đến thiếu số n trong tổng.

Câu Hoạt động 2 (trang 106)

Đề bài: Quan sát các lệnh for sau và so sánh kết quả in ra để biết vùng giá trị được xác định bởi lệnh range(). Lưu ý, lệnh print() có thêm tham số để in bộ dữ liệu theo hàng ngang.

>>> for k in range(3, 10):
        print(k, end = " ")
3 4 5 6 7 8 9
>>> for k in range(0, 15):
        print(k, end = " ")
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Trả lời:

So sánh hai trường hợp để rút ra quy luật của range(start, stop):

  • Với range(3, 10): vùng giá trị bắt đầu từ start = 3 và dừng trước stop = 10, tức kết thúc tại 9. Kết quả in ra: 3 4 5 6 7 8 9 (gồm 10 − 3 = 7 số).
  • Với range(0, 15): vùng giá trị bắt đầu từ start = 0 và dừng trước stop = 15, tức kết thúc tại 14. Kết quả in ra: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (gồm 15 − 0 = 15 số).

Kết luận về vùng giá trị: Lệnh range(start, stop) trả lại vùng giá trị gồm các số nguyên liên tiếp từ start đến stop − 1 (lấy start, không lấy stop).

Giải thích về tham số end = " ": bình thường mỗi lệnh print() in xong sẽ tự xuống dòng. Khi thêm end = " ", sau mỗi giá trị máy in ra một dấu cách thay vì xuống dòng, nhờ vậy các số được in liền nhau theo hàng ngang.

💡 Mẹo nhớ: Cách đếm nhanh số phần tử của range(start, stop) = stop − start (khi stop > start).

🎯 Ghi nhớ: - for là lệnh lặp với số lần biết trước, thường được điều khiển bởi vùng giá trị của range(). - range(stop) cho dãy 0 → stop − 1; range(start, stop) cho dãy start → stop − 1. Luôn lấy đầu, bỏ cuối. - Muốn tính tổng 1 + 2 + … + n thì dùng range(1, n+1); kiểm tra nhanh bằng công thức n × (n + 1) ÷ 2. - Tham số end = " " giúp in các giá trị trên cùng một hàng, ngăn cách bởi dấu cách.
Chế độ đọc sách →