C7-11 · Danh sách lớp xếp theo tên
Xem dạng PDFNguồn: Bài C7-11, mục 7.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.
Đề
Lớp trưởng gom họ tên các bạn từ nhiều nguồn nên danh sách gõ lộn xộn và có người bị ghi nhiều lần. Hãy làm danh sách lớp:
- Chuẩn hóa mỗi họ tên: bỏ dấu cách thừa (giữa hai từ đúng một dấu cách, không có ở hai đầu), mỗi từ viết hoa chữ đầu, các chữ còn lại viết thường.
- Bỏ trùng: hai dòng cho cùng một họ tên sau khi chuẩn hóa là cùng một người, chỉ giữ một.
- Xếp theo tên riêng (từ cuối của họ tên) tăng dần; những người trùng tên riêng thì xếp theo cả họ tên tăng dần. So sánh theo thứ tự chuỗi thông thường của Python (mục 7.6 — dữ liệu không dấu nên thứ tự này đúng như bảng chữ cái).
- In mỗi người một dòng: số thứ tự (bắt đầu từ ~1~), một dấu cách, họ tên đã chuẩn hóa.
Dữ liệu vào
- Dòng đầu chứa số nguyên ~n~.
- ~n~ dòng tiếp theo, mỗi dòng một họ tên.
Kết quả
Mỗi người (sau khi bỏ trùng) một dòng stt ho_ten, theo thứ tự đã xếp.
Ràng buộc
- ~1 \le n \le 100~.
- Mỗi họ tên dài từ ~1~ đến ~200~ ký tự, chỉ gồm chữ cái
a–z,A–Zvà dấu cách, có ít nhất ~2~ từ.
Gợi ý
Chuẩn hóa ngay khi đọc: " ".join(dong.split()).title() (mục 7.4). Bỏ trùng bằng if ho_ten not in ds. Xếp bằng sorted(ds, key=khoa) với hàm khóa trả về tuple (ho_ten.split()[-1], ho_ten) (mục 7.5, 6.8).
Lưu ý về chấm
Hệ thống so từng ký tự của mỗi dòng kết quả (chỉ bỏ qua dấu cách thừa ở cuối dòng): sau số thứ tự là đúng một dấu cách, các từ trong họ tên cách nhau đúng một dấu cách — chuẩn hóa là yêu cầu chính của bài.
Ví dụ 1
Dữ liệu vào:
4
hoang gia han
Vu Dinh An
HOANG GIA HAN
nguyen van an
Kết quả:
1 Nguyen Van An
2 Vu Dinh An
3 Hoang Gia Han
Ví dụ 2
Dữ liệu vào:
5
tran van binh
Le Thi Binh
TRAN VAN BINH
le an
nguyen thi binh
Kết quả:
1 Le An
2 Le Thi Binh
3 Nguyen Thi Binh
4 Tran Van Binh
Giải thích ví dụ
- Ví dụ 1:
hoang gia hanvàHOANG GIA HANcùng chuẩn hóa thànhHoang Gia Hannên chỉ giữ một, còn 3 người. Tên riêngAnđứng trướcHan. Hai người tênAnxếp theo cả họ tên:Nguyen Van AntrướcVu Dinh An— dù trong dữ liệu vàoVu Dinh Anđứng trước. - Ví dụ 2: dòng 1 và dòng 3 là cùng một người (khác hoa thường, thừa dấu cách).
Anđứng trướcBinh; ba người tênBinhxếp theo họ tên:Le Thi Binh,Nguyen Thi Binh,Tran Van Binh.
Nguồn trong sách: bài tập C7-11 (mục 7.10) · Mức: (***)