XS-06 · Đọc dòng có họ 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

Đề

Phần 6 của bài toán xuyên suốt "Điểm học phần". Mang theo từ XS-04 (mục 5.7): tinh_diem_hp (điểm học phần ~0{,}4 \times~ quá trình ~+~ ~0{,}6 \times~ cuối kỳ, đã làm tròn 1 chữ số) và xep_loai (A/B/C/D/F theo ngưỡng 8,5 / 7,0 / 5,5 / 4,0).

Dữ liệu bây giờ là dòng "thật" do người nhập gõ: mỗi dòng gồm mã, họ tên (có thể nhiều từ, khoảng trắng thừa, viết hoa lộn xộn) và hai điểm; điểm có thể viết dấu phẩy thập phân (8,0). Với mỗi dòng:

  • chuẩn hóa họ tên: các từ cách nhau đúng một dấu cách, chữ đầu mỗi từ viết hoa, còn lại viết thường;
  • tính điểm học phần và xếp loại;
  • nếu mã không gồm đúng 8 chữ số thì báo mã sai.

Kiến thức dùng (Chương 7): split(maxsplit=1), rsplit(maxsplit=2), " ".join(…), title(), isdigit(), replace(); hàm trả về None khi dữ liệu sai.

Dữ liệu vào

  • Dòng đầu: số nguyên ~n~.
  • ~n~ dòng tiếp theo, mỗi dòng dạng ma ho ten diem_qt diem_ck: phần đầu là mã, hai phần cuối là điểm, mọi thứ ở giữa là họ tên.

Kết quả

Với mỗi dòng, theo thứ tự nhập, in một dòng:

  • nếu mã hợp lệ: ma Ho Ten diem_hp loai — họ tên đã chuẩn hóa, điểm học phần đúng 1 chữ số thập phân (dấu chấm);
  • nếu mã sai: mã như đã đọc, một dấu cách, rồi MA SAI.

Ràng buộc

  • ~1 \le n \le 100~.
  • Dòng không có khoảng trắng ở đầu và cuối; các phần cách nhau một hoặc nhiều dấu cách (không có tab).
  • Mã là một chuỗi 1–12 ký tự gồm chữ số và chữ cái ASCII. Mã hợp lệ khi gồm đúng 8 chữ số (có thể bắt đầu bằng 0).
  • Họ tên có ít nhất một từ; mỗi từ chỉ gồm chữ cái tiếng Việt không dấu (A–Z, a–z).
  • Mỗi điểm trong ~[0; 10]~, viết dạng số nguyên (5) hoặc có đúng một chữ số thập phân, dùng dấu chấm (6.5) hoặc dấu phẩy (6,5). Dòng có mã sai vẫn có đủ họ tên và hai điểm đúng dạng.

Ví dụ

Dữ liệu vào:

4
23010001 Nguyen Van An 7.5 8.0
23010003   le  MINH duc   8,0 8.8
2301002 Tran Thi Binh 6.5 7.0
23010005 hoang gia han 5 3

Kết quả:

23010001 Nguyen Van An 7.8 B
23010003 Le Minh Duc 8.5 A
2301002 MA SAI
23010005 Hoang Gia Han 3.8 F

Giải thích ví dụ

  • Dòng 1 đã chuẩn: ~7{,}8~, loại B.
  • Dòng 2 có khoảng trắng thừa và hoa thường lộn xộn: split(maxsplit=1) lấy mã, rsplit(maxsplit=2) lấy hai điểm từ bên phải, phần còn lại le MINH duc chuẩn hóa thành Le Minh Duc. Điểm quá trình 8,0 đổi dấu phẩy thành dấu chấm trước khi float(); ~8{,}48 \to 8{,}5~, loại A.
  • Dòng 3 có mã 2301002 chỉ 7 chữ số → in 2301002 MA SAI.
  • Dòng 4 viết điểm dạng số nguyên 5 3 → ~3{,}8~, loại F.

Các ca nên tự thử:

Dữ liệu vào Kết quả Ý nghĩa
1 / 23010008 nGUYEN hOAI nam 9 7 23010008 Nguyen Hoai Nam 7.8 B chuẩn hóa chữ hoa/thường
1 / 2301000A Vu Ngoc Khanh 10 10 2301000A MA SAI đủ 8 ký tự nhưng có chữ
1 / 23010003 Le Minh Duc 8,0 8,8 23010003 Le Minh Duc 8.5 A dấu phẩy ở cả hai điểm

(dấu / ngăn cách các dòng)

Lưu ý khi nộp

  • Họ tên có thể 1 từ hoặc nhiều từ: ma, ho_ten, qt, ck = dong.split() chỉ chạy khi họ tên đúng 1 từ.
  • split(" ") tạo chuỗi rỗng khi có hai dấu cách liền nhau; dùng split() không đối số.
  • Hệ thống so từng dòng, từng ký tự (chỉ bỏ qua khoảng trắng ở cuối dòng và dòng trống): giữa các từ của họ tên, giữa các phần trên một dòng phải đúng một dấu cách — title() mà quên gộp khoảng trắng (Le Minh Duc) sẽ bị Wrong Answer.
  • capitalize() chỉ viết hoa chữ đầu cả chuỗi; cần title() (hoặc xử lý từng từ).
  • Mã là chuỗi: kiểm bằng len(ma) == 8 and ma.isdigit(), đừng int(ma) (mã 02301001 hợp lệ; mã 2301000A làm int() báo lỗi).

Nguồn trong sách: Bài XS-06, mục 7.7, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: XS (bài toán xuyên suốt, phần 6/8)


Đang tải...