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ứcs1 in s2trả vềTruenếus1là xâu con củas2, 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ự ch | int(ch) % 2 | Lẻ? | skq sau bước này |
|---|---|---|---|
8 | 0 | Không | "" |
1 | 1 | Có | "1" |
7 | 1 | Có | "17" |
2 | 0 | Không | "17" |
3 | 1 | Có | "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ố | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| Kí tự | a | b | a | b | c | a | b | c | a |
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 s2 → s1 + 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.
