Ba kiểu thay đổi khác nhau
Từ chương trình ba cao/ba thấp, nếu báo cáo mới cần **hai cao và bốn thấp**, chỉ thay lựa chọn trong mô-đun ghi; phần đọc và sắp vẫn dùng được khi có ít nhất sáu mặt hàng. Nếu bổ sung mặt hàng mới vào `Data.inp` đúng định dạng, không phải sửa thuật toán mà chỉ chạy lại chương trình. Nếu cần báo cáo **doanh số trung bình và các mặt hàng cao hơn trung bình**, có thể thêm một mô-đun báo cáo mới nhận cùng hai dãy `P,S`. Đây là lợi ích cụ thể của ranh giới mô-đun: đổi yêu cầu ở đâu thì kiểm và sửa ở đó.
Mô-đun báo cáo mới có điều kiện dãy không rỗng
```python
def bao_cao_tren_trung_binh(P, S):
if len(P) != len(S) or not S:
raise ValueError("Cần các cặp dữ liệu không rỗng")
tb = sum(S) / len(S)
ket_qua = []
for i in range(len(S)):
if S[i] > tb:
ket_qua.append((P[i], S[i]))
return tb, ket_qua
P = ["Táo", "Mơ", "Lê", "Cam", "Ổi", "Na"]
S = [1200, 900, 1000, 1500, 700, 1100]
tb, cao_hon = bao_cao_tren_trung_binh(P, S)
print(round(tb, 2), cao_hon)
```
Tổng doanh số mẫu là 6400; trung bình khoảng `1066.67`. Kết quả in `1066.67 [('Táo', 1200), ('Cam', 1500), ('Na', 1100)]`. Điều kiện `> tb` loại mặt hàng đúng bằng trung bình. Nếu đọc từ tệp và không có dòng hợp lệ, cần báo không có dữ liệu; không chia cho 0. Khi viết báo cáo ra một tệp khác, dùng `with open(..., "w", encoding="utf-8")` để ghi tiêu đề và các cặp trong `cao_hon`.
Bài luyện
Từ ba cao/ba thấp đổi thành hai cao/bốn thấp, mô-đun nào cần sửa trực tiếp?
Định dạng đầu vào không đổi.
Thứ tự tăng theo doanh số không đổi.
Chỉ số lượng hàng chọn để ghi thay đổi.
Ranh giới mô-đun cho phép giữ phần khác.
Lời giải
Dữ liệu đầu vào và cách sắp vẫn như cũ; chỉ mô-đun ghi phải lấy hai hàng cuối và bốn hàng đầu.
Bài luyện
Với doanh số `[1200, 900, 1000, 1500, 700, 1100]`, những mặt hàng nào cao hơn trung bình?
Trung bình 6400/6≈1066.67; ba giá trị này lớn hơn.
Ba giá trị này nhỏ hơn.
Lê 1000 dưới trung bình, Cam 1500 trên.
Táo và Na cũng trên trung bình.
Lời giải
Tổng 6400 chia 6 khoảng 1066.67; 1200, 1500 và 1100 lớn hơn ngưỡng, ứng với Táo, Cam, Na.
Bài luyện
Vì sao hàm báo cáo trung bình kiểm `not S` trước khi chia?
Nếu không có dữ liệu, phép chia cho độ dài gây lỗi.
Dấu của doanh số không quyết định mẫu số.
sum cộng được số.
Thứ tự không ảnh hưởng trung bình.
Lời giải
Trung bình là sum(S)/len(S). Khi S rỗng, len(S)=0 nên phải xử lí trước phép chia.
Đang học