Chốt số dòng trước khi viết vòng lặp
Bài luyện yêu cầu ghi danh sách **một phần ba số mặt hàng có doanh số thấp nhất**. Nếu có `n=9` mặt hàng, cần đúng `9/3=3` dòng, lấy ba vị trí đầu của dãy **đã sắp tăng theo doanh số**. Không cộng thêm một dòng: biểu thức `n//3+1` sẽ lấy bốn mặt hàng khi `n=9` và vượt yêu cầu. Nếu `n` không chia hết cho 3, “một phần ba số mặt hàng” không là số nguyên; trước khi lập trình phải thống nhất quy tắc làm tròn. Mã dưới đây chỉ nhận `n` dương và chia hết cho 3 để yêu cầu không mơ hồ.
Lấy đúng n chia 3 vị trí đầu
```python
def mot_phan_ba_thap_nhat(P, S):
n = len(P)
if n == 0 or n != len(S) or n % 3 != 0:
raise ValueError("Cần số mặt hàng dương và chia hết cho 3")
if any(S[i] > S[i + 1] for i in range(n - 1)):
raise ValueError("Doanh số phải được sắp tăng")
return [(P[i], S[i]) for i in range(n // 3)]
P = ["Ổi", "Mơ", "Lê", "Na", "Táo", "Cam", "Dưa", "Bí", "Đào"]
S = [700, 900, 1000, 1100, 1200, 1500, 1800, 2000, 2200]
print(mot_phan_ba_thap_nhat(P, S))
```
Kết quả là `[('Ổi', 700), ('Mơ', 900), ('Lê', 1000)]`. Hàm này có thể là mô-đun báo cáo mới sau bước đọc và sắp; muốn ghi tệp thì duyệt ba cặp kết quả trong `with open(..., "w", encoding="utf-8")`. Nếu chỉ cần thêm số lượng mặt hàng vào báo cáo trung bình ở bài trước, dùng `len(P)` ở cuối mô-đun ghi, không phải thay cách tính trung bình.
Bài luyện
Nếu có 9 mặt hàng, một phần ba số mặt hàng thấp nhất gồm bao nhiêu hàng?
2 ít hơn một phần ba.
9 chia 3 bằng 3.
4 là kết quả cộng thừa một hàng.
9 là toàn bộ mặt hàng.
Lời giải
Một phần ba của 9 là 9/3=3, nên lấy ba vị trí đầu sau khi sắp tăng doanh số.
Bài luyện
Vì sao không dùng `n//3 + 1` khi `n=9`?
9//3+1=4 trong khi yêu cầu là 3.
// là phép chia lấy phần nguyên hợp lệ.
9//3+1=4.
Chỉ cần một phần ba.
Lời giải
Với n=9, n//3 đã bằng 3 chính xác; cộng 1 thành 4 là lấy thừa một mặt hàng.
Bài luyện
Nếu có 8 mặt hàng, cần làm gì trước khi lập trình “một phần ba số mặt hàng”?
Số dòng tệp phải nguyên.
8/3 không là số nguyên; đề cần quy ước làm tròn.
Không còn là một phần ba.
Vẫn phải chọn các doanh số thấp nhất.
Lời giải
Một phần ba của 8 không cho số lượng mặt hàng nguyên; phải thống nhất làm tròn xuống, lên hay một quy tắc khác.
Đang học