C9-12 · Báo lý do dòng hỏng
Xem dạng PDFĐề
Đọc tệp lop_hp.csv như XS-08 (mục 9.7): mỗi dòng ma,ho_ten,diem_qt,diem_ck. Viết hàm ly_do_hong(dong) trả về lý do một dòng hỏng, xét theo đúng thứ tự sau và dừng ở lý do đầu tiên gặp:
SO_TRUONG— dòng không có đúng 4 trường (tách bằngdong.strip().split(","));MA— mã không gồm đúng 8 chữ số;DIEM— điểm quá trình hoặc điểm cuối kỳ không đổi được thành số bằngfloat(), hoặc nằm ngoài đoạn [0; 10];
hoặc trả về None nếu dòng hợp lệ. Với mỗi dòng hỏng in so_dong LY_DO (dòng đánh số từ 1 theo tệp); dòng cuối cùng in số dòng hợp lệ.
Như XS-08, dòng trống cũng là dòng hỏng (nó chỉ có 1 trường nên lý do là SO_TRUONG) và vẫn được đánh số.
Cách nộp trên hệ thống chấm. Toàn bộ nội dung tệp
lop_hp.csvđược đưa vào qua dữ liệu vào. Đọc đến hết dữ liệu bằngfor dong in sys.stdin:(Phụ lục D, mẫu 7), xử lý từng dòng nhưfor dong in f:trongdoc_danh_sachcủa XS-08. Ở máy:python bai.py < lop_hp.csv.
Dữ liệu vào
Nội dung tệp lop_hp.csv. Có thể có dòng trống (hoặc chỉ gồm dấu cách) ở giữa tệp; dòng đầu và dòng cuối luôn có nội dung.
Kết quả
- Mỗi dòng hỏng một dòng
so_dong LY_DO, theo thứ tự trong tệp. - Dòng cuối: số dòng hợp lệ.
Ràng buộc
- 1 ≤ số dòng ≤ 1000; mỗi dòng tối đa 100 ký tự ASCII in được.
- Điểm không viết dạng khoa học (
1e1) và không phảinan,inf, không chứa dấu gạch dưới_.
Ví dụ
Dữ liệu vào:
23010001,Nguyen Van An,7.5,8.0
2301002,Tran Thi Binh,6.5,7.0
23010004,Pham Quoc Dung,4.0,40
Kết quả:
2 MA
3 DIEM
1
Giải thích ví dụ
- Dòng 1 hợp lệ.
- Dòng 2: đủ 4 trường nhưng mã
2301002chỉ có 7 chữ số →MA. - Dòng 3: mã đúng,
float("40")đổi được nhưng 40 ngoài [0; 10] →DIEM. - Có 1 dòng hợp lệ.
Thứ tự kiểm tra quyết định kết quả: dòng 2301002,Tran Thi Binh,6,5,7.0 (dấu phẩy thập phân) có 5 trường nên là SO_TRUONG, dù mã cũng sai; dòng có cả mã sai lẫn điểm sai là MA.
Nguồn trong sách: Bài C9-12, mục 9.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (****)