C7-14 · Tìm lỗi: chuỗi đối xứng
Xem dạng PDFNguồn: Bài C7-14, mục 7.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.
Đề
Đề gốc: đọc chuỗi ~s~, in True nếu ~s~ là chuỗi đối xứng (đọc xuôi, đọc ngược như nhau), ngược lại in False. Một bạn viết chương trình dưới đây; với dữ liệu radar, chương trình bị Runtime Error (IndexError) ngay ở lần lặp đầu tiên.
s = input()
doi_xung = True
for i in range(len(s)):
if s[i] != s[len(s) - i]:
doi_xung = False
print(doi_xung)
Việc của bạn: tìm và sửa lỗi, rồi nộp chương trình đã sửa. Hệ thống chấm bản sửa của bạn bằng bộ test của đề gốc. Hãy giữ tinh thần của chương trình (duyệt bằng chỉ số và so từng cặp ký tự); câu hỏi "vì sao chỉ cần duyệt nửa chuỗi" trả lời trong vở hoặc ghi chú đầu bài nộp (dòng #) — phần này giảng viên đọc, hệ thống không chấm.
So sánh phân biệt hoa thường và tính mọi ký tự, kể cả dấu cách.
Dữ liệu vào
Một dòng chứa chuỗi ~s~.
Kết quả
Một dòng: True hoặc False.
Ràng buộc
- ~1 \le |s| \le 200~; ~s~ gồm ký tự ASCII in được (chữ, số, dấu câu, dấu cách).
- ~s~ không bắt đầu và không kết thúc bằng dấu cách (ở giữa có thể có).
Gợi ý
Chuỗi dài ~n~ có chỉ số từ ~0~ đến ~n - 1~ (mục 7.1). Ký tự "đối diện" với s[i] nằm ở chỉ số nào? Thử tay với ~i = 0~.
Ví dụ 1
Dữ liệu vào:
radar
Kết quả:
True
Ví dụ 2
Dữ liệu vào:
ab
Kết quả:
False
Giải thích ví dụ
- Ví dụ 1:
radardài 5. Với ~i = 0~, chương trình gốc truy cậps[5]— chỉ số cuối hợp lệ là4nên báoIndexError. Cặp đúng củas[i]làs[len(s) - 1 - i]: các cặp (0, 4)r–r, (1, 3)a–abằng nhau,s[2]ở giữa tự đối xứng →True. - Ví dụ 2: cặp (0, 1) là
a–b, khác nhau →False.
Nguồn trong sách: bài tập C7-14 (mục 7.10) · Mức: (**)