Giải Tin Học 10 trang 114

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

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

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

Duyệt danh sách bằng for kết hợp range():

  • Có thể duyệt lần lượt các phần tử của danh sách bằng lệnh for kết hợp với vùng giá trị của lệnh range().
  • range(len(A)) tạo dãy chỉ số 0, 1, 2, ..., len(A)−1, dùng để truy cập từng phần tử A[i].

Thêm phần tử vào danh sách:

  • Python có các lệnh riêng (gọi là phương thức – method) cho kiểu dữ liệu danh sách. Cú pháp: .
  • Lệnh thêm phần tử vào cuối danh sách là: .append(giá trị)
💡 Mẹo nhớ: Cách gõ phương thức append(): gõ tên biến danh sách → dấu chấm "." → gõ append → mở ngoặc ghi giá trị cần thêm.

⚙️ Bài tập

Câu 1 (trang 113)

Đề bài: Giải thích các lệnh ở mỗi câu sau thực hiện công việc gì?

a)

>>> S = 0
>>> for i in range(len(A)):
        if A[i] > 0:
            S = S + A[i]
>>> print(S)

b)

>>> C = 0
>>> for i in range(len(A)):
        if A[i] > 0:
            C = C + 1
>>> print(C)
Cách 1 — Phân tích từng dòng lệnh

Câu a):

  • S = 0: khởi tạo biến tổng S bằng 0.
  • for i in range(len(A)): duyệt lần lượt mọi chỉ số i của danh sách A (từ 0 đến len(A)−1).
  • if A[i] > 0: kiểm tra phần tử A[i] có phải số dương hay không.
  • S = S + A[i]: nếu A[i] dương thì cộng nó vào S.
  • print(S): in ra kết quả.

👉 Kết luận: Đoạn lệnh tính tổng các số dương có trong danh sách A.

Câu b):

  • C = 0: khởi tạo biến đếm C bằng 0.
  • for i in range(len(A)): duyệt mọi chỉ số i của A.
  • if A[i] > 0: kiểm tra A[i] có dương không.
  • C = C + 1: nếu A[i] dương thì tăng biến đếm C thêm 1.
  • print(C): in ra kết quả.

👉 Kết luận: Đoạn lệnh đếm số lượng các số dương có trong danh sách A.

⚠️ Lưu ý thi: Phân biệt rõ hai mẫu lệnh kinh điển: - Tính tổng dùng S = S + A[i] (cộng dồn giá trị). - Đếm dùng C = C + 1 (cộng dồn số đếm, không phụ thuộc giá trị phần tử).

Câu 2 (trang 113)

Đề bài: Cho dãy các số nguyên A, viết chương trình in ra các số chẵn của A.

Cách 1 — Duyệt theo chỉ số với range(len(A))
A = [3, 2, 1, 5, 6, 10, 7, 12, 18]
print("Các số chẵn của A là:")
for i in range(len(A)):
    if A[i] % 2 == 0:
        print(A[i], end=" ")

Kết quả: 2 6 10 12 18

Giải thích: số chẵn là số chia hết cho 2, tức A[i] % 2 == 0 (phép % lấy phần dư).

Cách 2 — Duyệt trực tiếp từng phần tử (gọn hơn)
A = [3, 2, 1, 5, 6, 10, 7, 12, 18]
print("Các số chẵn của A là:")
for x in A:
    if x % 2 == 0:
        print(x, end=" ")
💡 Mẹo nhớ: for x in A lấy thẳng giá trị phần tử nên không cần dùng chỉ số. Đây là cách viết ngắn gọn, dễ đọc khi không cần biết vị trí phần tử.

Câu 1 (mục 3, trang 113)

Đề bài: Sau khi thêm một phần tử vào danh sách A bằng lệnh append() thì độ dài danh sách A thay đổi như thế nào?

Cách 1 — Giải thích

Mỗi lần gọi A.append(giá trị) sẽ thêm đúng một phần tử vào cuối danh sách. Do đó độ dài danh sách (giá trị len(A)) tăng thêm 1.

Ví dụ: nếu trước khi thêm len(A) = 5 thì sau khi A.append(...) ta có len(A) = 6.


Câu 2 (mục 3, trang 113)

Đề bài: Danh sách A sẽ như thế nào sau các lệnh:

>>> A = [2, 4, 10, 1, 0]
>>> A.append(100)
>>> del A[1]
Cách 1 — Thực hiện lần lượt từng lệnh
  • Ban đầu: A = [2, 4, 10, 1, 0]
  • Sau A.append(100): thêm 100 vào cuối → A = [2, 4, 10, 1, 0, 100]
  • Sau del A[1]: xoá phần tử ở chỉ số 1 (là số 4) → A = [2, 10, 1, 0, 100]

👉 Kết quả cuối cùng: A = [2, 10, 1, 0, 100]

⚠️ Lưu ý thi: Chỉ số trong Python bắt đầu từ 0, nên A[1] là phần tử thứ hai (số 4), không phải phần tử đầu tiên. Đây là lỗi rất hay nhầm.

📝 Phần Thực hành (trang 114)

Nhiệm vụ 1

Đề bài: Nhập số n từ bàn phím, sau đó nhập danh sách n tên các bạn lớp em và in ra danh sách các tên đó, mỗi tên trên một dòng.

dsLop = []
n = int(input("Nhập số học sinh trong lớp: "))
for i in range(n):
    name = input("Nhập họ tên học sinh thứ " + str(i+1) + ": ")
    dsLop.append(name)
print("Danh sách học sinh đã nhập:")
for i in range(len(dsLop)):
    print(dsLop[i])

Giải thích: dùng append() đưa dần từng tên vào danh sách. Vì range(n) bắt đầu từ 0 nên dùng str(i+1) để hiển thị thứ tự bắt đầu từ 1.

Nhiệm vụ 2

Đề bài: Nhập một dãy số từ bàn phím. Tính tổng, trung bình của dãy và in dãy số trên một hàng ngang.

A = []
T = 0
n = int(input("Nhập số tự nhiên n: "))
for i in range(n):
    num = int(input("Nhập số thứ " + str(i+1) + ": "))
    A.append(num)
    T = T + num
print("Dãy số đã nhập:")
for i in range(n):
    print(A[i], end=" ")
print()
print("Tổng:", T)
print("Trung bình:", T/n)

Giải thích: tương tự Nhiệm vụ 1 nhưng dùng int() để chuyển dữ liệu nhập thành số nguyên, rồi cộng dồn vào biến tổng T.


⚙️ Phần Luyện tập (trang 114)

Câu 1

Đề bài: Viết lệnh xoá phần tử cuối cùng của danh sách A bằng lệnh del.

Cách 1 — Dùng chỉ số phần tử cuối

Phần tử cuối cùng có chỉ số len(A) − 1:

del A[len(A) - 1]
Cách 2 — Dùng chỉ số âm

Trong Python, chỉ số −1 luôn trỏ tới phần tử cuối cùng:

del A[-1]
💡 Mẹo nhớ: Chỉ số âm đếm từ cuối lên: A[-1] là phần tử cuối, A[-2] là phần tử áp cuối. Cách này ngắn gọn và không cần tính len(A).

Câu 2

Đề bài: Có thể thêm một phần tử vào đầu danh sách được không? Nếu có thì nêu cách thực hiện.

Cách 1 — Dùng phương thức insert()

Có thể thêm phần tử vào đầu danh sách. Python cung cấp phương thức insert(vị_trí, giá_trị) để chèn một phần tử vào vị trí bất kỳ. Muốn thêm vào đầu (chỉ số 0):

A = [2, 4, 10]
A.insert(0, 99)
print(A)        # [99, 2, 4, 10]
Cách 2 — Ghép danh sách

Có thể tạo danh sách mới gồm phần tử cần thêm đặt trước, rồi nối với A:

A = [2, 4, 10]
A = [99] + A
print(A)        # [99, 2, 4, 10]

👉 Kết luận: Có thể thêm phần tử vào đầu danh sách, cách thông dụng nhất là dùng A.insert(0, giá_trị).


⚙️ Phần Vận dụng (trang 114)

Đề bài: Cho dãy số A. Viết chương trình tính giá trị và chỉ số của phần tử lớn nhất của A. Tương tự với bài toán tìm phần tử nhỏ nhất.

Cách 1 — Duyệt và so sánh (phương pháp cơ bản)

Tìm phần tử lớn nhất:

A = [3, 2, 1, 5, 6, 10, 7, 12, 18]

max_val = A[0]      # giả sử phần tử đầu là lớn nhất
max_idx = 0
for i in range(len(A)):
    if A[i] > max_val:
        max_val = A[i]
        max_idx = i
print("Giá trị lớn nhất:", max_val)
print("Chỉ số của phần tử lớn nhất:", max_idx)

Kết quả: Giá trị lớn nhất là 18, ở chỉ số 8.

Tìm phần tử nhỏ nhất:

A = [3, 2, 1, 5, 6, 10, 7, 12, 18]

min_val = A[0]
min_idx = 0
for i in range(len(A)):
    if A[i] < min_val:
        min_val = A[i]
        min_idx = i
print("Giá trị nhỏ nhất:", min_val)
print("Chỉ số của phần tử nhỏ nhất:", min_idx)

Kết quả: Giá trị nhỏ nhất là 1, ở chỉ số 2.

Giải thích thuật toán: ban đầu giả sử phần tử đầu (chỉ số 0) là lớn nhất/nhỏ nhất. Duyệt qua từng phần tử, nếu gặp phần tử lớn hơn (hoặc nhỏ hơn) thì cập nhật lại giá trị và chỉ số.

Cách 2 — Dùng hàm có sẵn max(), min() và index()
A = [3, 2, 1, 5, 6, 10, 7, 12, 18]

max_val = max(A)
max_idx = A.index(max_val)
print("Giá trị lớn nhất:", max_val, "- chỉ số:", max_idx)

min_val = min(A)
min_idx = A.index(min_val)
print("Giá trị nhỏ nhất:", min_val, "- chỉ số:", min_idx)
💡 Mẹo nhớ: max(A), min(A) trả về giá trị lớn nhất/nhỏ nhất; A.index(giá_trị) trả về chỉ số xuất hiện đầu tiên của giá trị đó.
⚠️ Lưu ý thi: Nếu dãy có nhiều phần tử cùng bằng giá trị lớn nhất, index() chỉ trả về chỉ số của lần xuất hiện đầu tiên. Khi đề yêu cầu rõ "chỉ số đầu tiên/cuối cùng", nên tự viết vòng lặp như Cách 1 để kiểm soát chính xác.

🎯 Ghi nhớ: - Duyệt danh sách: for i in range(len(A)) (theo chỉ số) hoặc for x in A (theo giá trị). - Mẫu tính tổng: S = S + A[i]; mẫu đếm: C = C + 1. - Thêm phần tử cuối: A.append(x) → tăng độ dài thêm 1. - Thêm phần tử đầu/giữa: A.insert(vị_trí, x). - Xoá phần tử: del A[chỉ_số], phần tử cuối là A[-1]. - Chỉ số Python luôn bắt đầu từ 0.
Chế độ đọc sách →