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

Tính điểm rồi ghi tệp kết quả

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

Mỗi hàm nhận và trả đúng phần việc

Sau khi `doc_diem` trả hai dãy, mô-đun tính nhận **dãy các dãy điểm** và trả một dãy điểm tổng hợp. Mô-đun ghi nhận mã cùng dãy kết quả, rồi ghi mỗi cặp trên một dòng. Dùng `{x:.2f}` để tệp luôn có hai chữ số sau dấu chấm thập phân: `9.0` sẽ thành `9.00`. `round(x, 2)` trả một số, nên khi in trực tiếp có thể thành `9.0` và không bảo đảm đúng định dạng hai chữ số. Ví dụ SGK có `101 7.77`, `200 9.14`, `003 7.08`, `045 8.71`, `901 9.06`.

Chương trình chính chỉ nối các bước

```python def diem_tong_hop(d): if len(d) < 3: raise ValueError("Cần ít nhất 3 điểm") return (sum(d) + d[0] + d[-1]) / (len(d) + 2) def tinh_tat_ca(bang_diem): return [diem_tong_hop(d) for d in bang_diem] def ghi_ket_qua(ten_tep, ma, ket_qua): if len(ma) != len(ket_qua): raise ValueError("Số mã và số điểm không khớp") with open(ten_tep, "w", encoding="utf-8") as f: for i in range(len(ma)): print(ma[i], f"{ket_qua[i]:.2f}", file=f) ma, bang_diem = doc_diem("SeaGames.inp") ket_qua = tinh_tat_ca(bang_diem) ghi_ket_qua("ketqua.out", ma, ket_qua) ``` Chương trình dùng `doc_diem` của bài trước, vì vậy cần đặt hai phần mã trong cùng tệp hoặc nhập hàm ấy từ mô-đun khác. Với một dòng `901 9.2 9.7 8.6`, đầu ra là `901 9.06`: tổng có trọng số `9.2×2+9.7+8.6×2=45.3`, chia 5 được 9.06. Nếu thay **công thức** chấm, chỉ sửa `diem_tong_hop` và kiểm lại kết quả; phần đọc/ghi vẫn dùng được khi định dạng tệp không đổi.

Bài luyện

Vì sao dùng `f"{x:.2f}"` khi ghi tệp?
Chọn một đáp án

Bài luyện

Dòng `901 9.2 9.7 8.6` cho kết quả điểm nào?
Chọn một đáp án

Bài luyện

Nếu chỉ đổi công thức tính điểm, nên sửa hàm nào?
Chọn một đáp án

Đang học