Giải Tin Học 10 trang 122

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

Tóm tắt lý thuyết

Trước khi vào bài tập, em ghi nhớ hai ý quan trọng trong khung lưu ý:

  • Có thể duyệt từng kí tự của xâu bằng vòng lặp for, tương tự như duyệt danh sách.
  • Toán tử in: biểu thức s1 in s2 trả về True nếu s1xâu con của s2, ngược lại trả về False.

Bài 1: Tìm giá trị của biến skq

Đề:

>>> s = "81723"
>>> skq = ""
>>> for ch in s:
        if int(ch) % 2 != 0:
            skq = skq + ch

Lời giải từng bước:

Vòng lặp duyệt qua từng kí tự (chữ số) của xâu s = "81723". Điều kiện int(ch) % 2 != 0 nghĩa là chỉ giữ lại các chữ số lẻ.

Kí tự chint(ch) % 2Lẻ?skq sau bước này
80Không""
11"1"
71"17"
20Không"17"
31"173"

Đáp án:

$$\texttt{skq} = \texttt{"173"}$$


Bài 2: Xét các biểu thức lôgic đúng hay sai

Đề: Cho s1 = "abc", s2 = "ababcabca". Xét các biểu thức sau cho kết quả đúng hay sai.

Để dễ kiểm tra, cô đánh số vị trí các kí tự của s2:

Chỉ số012345678
Kí tựababcabca

a) s1 in s2 → kiểm tra "abc" có trong s2 không.

Tại chỉ số 2–4 ta có a, b, c = "abc". ⟹ True (Đúng)

b) s1 + s1 in s2s1 + s1 = "abcabc", kiểm tra có trong s2 không.

Tại chỉ số 2–7 ta có a, b, c, a, b, c = "abcabc". ⟹ True (Đúng)

c) "abcabca" in s2 → kiểm tra "abcabca" (7 kí tự).

Tại chỉ số 2–8 ta có a, b, c, a, b, c, a = "abcabca". ⟹ True (Đúng)

d) "abc123" in s2 → xâu s2 không hề chứa chữ số nào nên không thể chứa "abc123". ⟹ False (Sai)

Tổng kết: a) Đúng, b) Đúng, c) Đúng, d) Sai.


Phần THỰC HÀNH

Nhiệm vụ 1: Nhập và in danh sách họ tên học sinh

Chương trình mẫu trong sách đã đầy đủ. Cô giải thích ý nghĩa:

n = int(input("Nhập số học sinh trong lớp: "))
ds_lop = []                      # danh sách rỗng để lưu họ tên
for i in range(n):
    hoten = input("Nhập họ tên học sinh thứ " + str(i+1) + ": ")
    ds_lop.append(hoten)         # thêm họ tên vào danh sách

print("Danh sách lớp học:")
for i in range(n):
    print(ds_lop[i])             # in mỗi họ tên trên một dòng

Ý tưởng: dùng vòng for thứ nhất để nhập, lưu vào danh sách bằng append; vòng for thứ hai để in từng phần tử ra một dòng.

Nhiệm vụ 2: Kiểm tra xâu S có chứa xâu con "10"

Cách 1 – Duyệt kí tự theo chỉ số:

S = input("Nhập xâu kí tự bất kì: ")
kq = False
for i in range(len(S)-1):
    if S[i] == "1" and S[i+1] == "0":
        kq = True
        break
if kq:
    print("Xâu gốc có chứa xâu '10'")
else:
    print("Xâu gốc không chứa xâu '10'")

Giải thích: duyệt đến vị trí len(S)-1 (vì còn so sánh với kí tự kế tiếp S[i+1]). Khi gặp "1" ngay trước "0" thì gán kq = True rồi break để dừng sớm.

Cách 2 – Dùng toán tử in (ngắn gọn hơn):

S = input("Nhập xâu kí tự bất kì: ")
s10 = "10"
if s10 in S:
    print("Xâu gốc có chứa xâu '10'")
else:
    print("Xâu gốc không chứa xâu '10'")

Cách 2 gọn hơn nhiều vì Python tự kiểm tra xâu con qua in.


Phần LUYỆN TẬP

Bài 1: Trích ra ba kí tự đầu tiên của S

Đề: Cho xâu S, viết đoạn lệnh trích ra xâu con của S gồm ba kí tự đầu tiên.

Lời giải: dùng cách cắt xâu (slicing) S[0:3] hay viết gọn S[:3].

S = input("Nhập xâu S: ")
s_con = S[:3]      # ba kí tự đầu tiên
print(s_con)

Lưu ý: nếu S có ít hơn 3 kí tự thì lệnh vẫn chạy được và lấy hết những kí tự đang có.

Bài 2: Kiểm tra S có chứa chữ số không

Đề: Viết chương trình kiểm tra xâu S có chứa chữ số không. Thông báo "S có chứa chữ số" hoặc "S không chứa chữ số nào".

Lời giải: duyệt từng kí tự, dùng phương thức isdigit() để kiểm tra kí tự có phải chữ số không.

S = input("Nhập xâu S: ")
co_chu_so = False
for ch in S:
    if ch.isdigit():     # ch là một chữ số
        co_chu_so = True
        break
if co_chu_so:
    print("S có chứa chữ số")
else:
    print("S không chứa chữ số nào")

Giải thích: chỉ cần tìm thấy một chữ số là đủ kết luận, nên ta break ngay để tiết kiệm thời gian.


Phần VẬN DỤNG

Bài 1: Chèn xâu s1 vào giữa xâu s2

Đề: Cho hai xâu s1, s2. Viết đoạn lệnh chèn s1 vào giữa s2, tại vị trí len(s2)//2. In kết quả ra màn hình.

Lời giải: dùng cắt xâu để tách s2 thành hai phần tại vị trí giữa, rồi ghép s1 vào.

s1 = input("Nhập xâu s1: ")
s2 = input("Nhập xâu s2: ")
vt = len(s2) // 2                 # vị trí giữa
kq = s2[:vt] + s1 + s2[vt:]       # ghép: nửa đầu + s1 + nửa sau
print(kq)

Ví dụ: s2 = "abcdef" (độ dài 6), vt = 3. Với s1 = "XY" thì kết quả là "abcXYdef".

Bài 2: Đếm số bạn tên là "Hương"

Đề: Viết chương trình nhập số học sinh và họ tên học sinh. Sau đó đếm xem trong danh sách có bao nhiêu bạn tên là "Hương".

Gợi ý của sách: dùng toán tử in để kiểm tra một xâu có là xâu con của xâu khác.

Lời giải:

n = int(input("Nhập số học sinh: "))
ds_lop = []
for i in range(n):
    hoten = input("Nhập họ tên học sinh thứ " + str(i+1) + ": ")
    ds_lop.append(hoten)

dem = 0
for hoten in ds_lop:
    if "Hương" in hoten:     # họ tên có chứa chữ "Hương"
        dem = dem + 1

print("Số bạn tên là Hương:", dem)

Giải thích: vì họ tên đầy đủ thường có dạng "Nguyễn Thị Hương", ta dùng "Hương" in hoten để kiểm tra xâu "Hương" có xuất hiện trong họ tên hay không, mỗi lần tìm thấy thì tăng biến đếm dem lên 1.


Chế độ đọc sách →