C7-11 · Danh sách lớp xếp theo tên

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-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:

  1. 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.
  2. 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.
  3. 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).
  4. 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–Z và 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 han và HOANG GIA HAN cùng chuẩn hóa thành Hoang Gia Han nên chỉ giữ một, còn 3 người. Tên riêng An đứng trước Han. Hai người tên An xếp theo cả họ tên: Nguyen Van An trước Vu Dinh An — dù trong dữ liệu vào Vu 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ước Binh; ba người tên Binh xế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: (***)


Đang tải...