C7-14 · Tìm lỗi: chuỗi đối xứng

Xem dạng PDF

Gửi bài giải

Điểm: 1,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Sách "Lập trình cơ sở với Python"
Dạng bài
Ngôn ngữ cho phép
Python

Nguồ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: radar dài 5. Với ~i = 0~, chương trình gốc truy cập s[5] — chỉ số cuối hợp lệ là 4 nên báo IndexError. Cặp đúng của s[i] là s[len(s) - 1 - i]: các cặp (0, 4) r–r, (1, 3) a–a bằ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: (**)


Đang tải...