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?
Đây là định dạng hiển thị đúng yêu cầu.
Mã được in riêng.
Không thay đổi thứ tự.
Không liên quan tốc độ đọc.
Lời giải
Định dạng .2f biến cả 9.0 thành 9.00, đúng quy cách hai chữ số.
Bài luyện
Dòng `901 9.2 9.7 8.6` cho kết quả điểm nào?
Đó không là trung bình có trọng số.
Tổng có trọng số 45.3, chia 5 bằng 9.06.
Chỉ là điểm cuối.
Cần chia tổng cho tổng hệ số.
Lời giải
Hai biên nhân 2: 18.4+9.7+17.2=45.3; chia 5 được 9.06.
Bài luyện
Nếu chỉ đổi công thức tính điểm, nên sửa hàm nào?
Định dạng tệp đầu vào không đổi.
Định dạng kết quả không đổi.
Công thức nằm trong hàm này.
Ranh giới mô-đun cho phép sửa đúng nơi.
Lời giải
Hàm diem_tong_hop là nơi chứa quy tắc chấm; giữ các hàm khác nếu dạng dữ liệu không đổi.
Đang học