btvn.vn
Tìm kiếm Đăng nhập

Chọn ba kết quả thi cao nhất

Lưu trên thiết bị này
Kĩ thuật lập trình — CS · Chọn bài khác

Phân biệt điểm 0 với không làm bài

Bài vận dụng thứ hai dùng `Diemthi.inp`: mỗi dòng gồm số báo danh và **đúng ba** điểm nguyên, điểm từ 0 đến 20 hoặc `-1` nếu không làm bài. Tổng chỉ cộng điểm **không âm**; cộng `-1` như điểm âm sẽ sai. Dữ liệu mẫu SGK cho `C11 10 12 18` tổng 40, `A12 12 -1 15` tổng 27 và `B01 12 10 4` tổng 26; đây là ba dòng đầu ra theo thứ tự giảm. Giữ số báo danh ở kiểu chuỗi để không đổi định danh. Cần có ít nhất ba học sinh để ghi đúng ba dòng như yêu cầu.

Đọc, tính, sắp và ghi theo các mô-đun

```python def doc_bai_thi(ten_tep): ban_ghi = [] with open(ten_tep, encoding="utf-8") as f: for so_dong, dong in enumerate(f, 1): truong = dong.split() if len(truong) != 4: raise ValueError(f"Dòng {so_dong}: cần mã và 3 điểm") diem = [int(x) for x in truong[1:]] if any(x < -1 or x > 20 for x in diem): raise ValueError(f"Dòng {so_dong}: điểm không hợp lệ") ban_ghi.append((truong[0], diem)) return ban_ghi def tinh_tong(diem): return sum(x for x in diem if x >= 0) def ba_ket_qua_cao_nhat(ban_ghi): if len(ban_ghi) < 3: raise ValueError("Cần ít nhất 3 học sinh") ket_qua = [(ma, diem, tinh_tong(diem)) for ma, diem in ban_ghi] ket_qua.sort(key=lambda hang: hang[2], reverse=True) return ket_qua[:3] def ghi_ba_ket_qua(ten_tep, ba_hang): with open(ten_tep, "w", encoding="utf-8") as f: for ma, diem, tong in ba_hang: print(ma, *diem, tong, file=f) ban_ghi = doc_bai_thi("Diemthi.inp") ghi_ba_ket_qua("ketqua.out", ba_ket_qua_cao_nhat(ban_ghi)) ``` Với tệp mẫu SGK gồm năm dòng `A12 12 -1 15`, `B123 9 14 -1`, `C11 10 12 18`, `A110 10 -1 -1`, `B01 12 10 4`, tệp kết quả có `C11 10 12 18 40`, `A12 12 -1 15 27`, `B01 12 10 4 26`. Các điểm `-1` vẫn được **ghi nguyên** để thấy bài nào chưa làm; chúng chỉ bị bỏ khi cộng tổng. Khi bằng tổng, cách sắp này giữ thứ tự xuất hiện trong tệp.

Bài luyện

Điểm `12 -1 15` cho tổng bao nhiêu?
Chọn một đáp án

Bài luyện

Vì sao cần sắp cả bản ghi gồm mã, ba điểm và tổng?
Chọn một đáp án

Bài luyện

Với dữ liệu SGK, ba mã được ghi theo thứ tự nào?
Chọn một đáp án

Đang học