C8-08 · Danh sách theo loại

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

Đề

Đọc danh sách sinh viên theo dạng của bài XS-06 (mục 7.7). Dòng có mã sinh viên sai (không đúng 8 chữ số) thì bỏ qua, không in gì. Với các sinh viên còn lại, tính điểm học phần, xếp loại, rồi gom mã sinh viên theo loại.

Điểm học phần = 0,4 × điểm quá trình + 0,6 × điểm cuối kỳ, làm tròn 1 chữ số thập phân; xếp loại dựa trên điểm đã làm tròn:

Loại Điểm học phần
A từ 8,5 trở lên
B từ 7,0 đến dưới 8,5
C từ 5,5 đến dưới 7,0
D từ 4,0 đến dưới 5,5
F dưới 4,0

Yêu cầu cách viết (giảng viên kiểm khi chấm tay; máy chấm chỉ so kết quả): viết hàm gom_theo_loai(ds_sv) nhận list of dict sinh viên, trả về dict loại → list mã.

Dữ liệu vào

  • Dòng đầu chứa 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à hai điểm, mọi thứ ở giữa là họ tên (không dấu, ít nhất một từ, có thể viết hoa thường lộn xộn). Giữa các phần có thể có nhiều dấu cách; đầu và cuối dòng không có dấu cách. Điểm có thể viết dấu phẩy thập phân (8,0) hoặc dạng số nguyên (8).

Kết quả

Đúng năm dòng theo thứ tự A, B, C, D, F. Mỗi dòng gồm: chữ loại, số sinh viên loại đó, rồi các mã của loại đó theo thứ tự nhập; tất cả cách nhau một dấu cách. Loại không có ai thì dòng chỉ gồm chữ loại và số 0.

Ràng buộc

  • ~1 \le n \le 100~.
  • Mã hợp lệ là chuỗi đúng 8 chữ số (có thể bắt đầu bằng 0); các mã hợp lệ đôi một khác nhau. Mã sai có thể thiếu/thừa chữ số hoặc chứa chữ cái (2301002, 230100011, 2301000A).
  • Hai điểm nằm trong đoạn ~[0;\ 10]~, có tối đa một chữ số thập phân.

Ví dụ

Dữ liệu vào:

4
23010003 Le Minh Duc 8 8.8
2301002 Tran Thi Binh 6.5 7
23010006 Vu Ngoc Khanh 10 10
23010004 Pham Quoc Dung 4 4

Kết quả:

A 2 23010003 23010006
B 0
C 0
D 1 23010004
F 0

Giải thích ví dụ

Dòng Mã hợp lệ? Điểm học phần Loại
23010003 Le Minh Duc 8 8.8 có 0,4·8 + 0,6·8,8 = 8,48 → 8,5 A
2301002 Tran Thi Binh 6.5 7 không (7 chữ số) — bỏ qua
23010006 Vu Ngoc Khanh 10 10 có 10,0 A
23010004 Pham Quoc Dung 4 4 có 4,0 D

Loại A có 2 mã theo thứ tự nhập; B, C, F không có ai nên in 0. Nếu xếp loại trên 8,48 (chưa làm tròn) thì sinh viên 23010003 bị xếp nhầm loại B.

Lưu ý

  • Dùng lại tinh_diem_hp, xep_loai (XS-04) và tach_dong (XS-06): split(maxsplit=1) lấy mã, rsplit(maxsplit=2) lấy hai điểm, đổi dấu phẩy bằng replace(",", ".").
  • In đủ năm dòng A, B, C, D, F kể cả loại không có ai (mục 8.2, cách in for loai in "ABCDF":).
  • Mã là chuỗi: không đổi sang int (mất chữ số 0 ở đầu).

Nguồn: Bài C8-08, mục 8.9, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long.

Nguồn trong sách: bài tập C8-08 (mục 8.9) · Mức: (***)


Đang tải...