C7-08 · Mã Caesar
Xem dạng PDFNguồn: Bài C7-08, mục 7.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.
Đề
Mã Caesar là cách mã hóa cổ: thay mỗi chữ cái bằng chữ đứng sau nó ~k~ vị trí trong bảng chữ cái. Cho một câu và số ~k~. Hãy mã hóa câu:
- mỗi chữ cái
a–zdịch đi ~k~ vị trí, quay vòng từzvềa(với ~k = 3~:x→a,y→b,z→c); - mỗi chữ cái
A–Zcũng vậy và giữ nguyên chữ hoa (Y→B); - mọi ký tự khác (chữ số, dấu câu, dấu cách…) giữ nguyên.
Dữ liệu vào
- Dòng 1: câu cần mã hóa.
- Dòng 2: số nguyên ~k~.
Kết quả
Một dòng: câu đã mã hóa.
Ràng buộc
- Câu dài từ ~1~ đến ~200~ ký tự ASCII in được (chữ, số, dấu câu, dấu cách).
- ~0 \le k \le 25~.
Gợi ý
Mục 7.2: ord(c) - ord("a") là vị trí của chữ thường c (0 đến 25); cộng ~k~, lấy % 26 để quay vòng, rồi chr(... + ord("a")). Chữ hoa làm tương tự với mốc ord("A"). Lưu ý: giữa Z (mã 90) và a (mã 97) còn sáu ký tự [, \, ], ^, _, ` — chúng không phải chữ cái.
Lưu ý về chấm
Hệ thống so từng ký tự của dòng kết quả (chỉ bỏ qua dấu cách thừa ở cuối dòng): dấu cách ở đầu câu và nhiều dấu cách liền nhau giữa câu phải giữ nguyên. Đừng split() rồi join lại câu.
Ví dụ 1
Dữ liệu vào:
Hen gap lai luc 7h!
3
Kết quả:
Khq jds odl oxf 7k!
Ví dụ 2
Dữ liệu vào:
xyz XYZ [Zebra]
3
Kết quả:
abc ABC [Cheud]
Giải thích ví dụ
- Ví dụ 1:
H→K,e→h,n→q…; chữ số7, dấu cách và dấu!giữ nguyên. - Ví dụ 2:
x,y,zquay vòng vềa,b,c; chữ hoa quay vòng trongA–Z. Hai dấu ngoặc vuông[,]không phải chữ cái nên giữ nguyên;ZebrathànhCheud.
Nguồn trong sách: bài tập C7-08 (mục 7.10) · Mức: (***)