Nhiệm vụ trên bảng chữ nhật
Cho ma trận giả `a = [[2, 1, 3], [4, 0, 2], [1, 1, 1]]`. Có ba hàng, mỗi hàng ba số. Tổng các hàng lần lượt là 6, 6, 3; tổng toàn bảng là 15. Cần báo **cả hàng thứ nhất và hàng thứ hai** vì chúng đồng hạng cao nhất. Khi nhập từ bàn phím theo SGK, mỗi hàng phải có đúng `n` số; nhập sai số lượng thì yêu cầu nhập lại, không dùng một hàng ngắn làm ma trận m × n.
Tính từng hàng trước khi so sánh
```python
def thong_ke_ma_tran(a):
if not a or not a[0] or any(len(hang) != len(a[0]) for hang in a):
raise ValueError("Cần ma trận không rỗng với các hàng cùng độ dài")
tong_hang = []
for hang in a:
tong_hang.append(sum(hang))
tong_chung = sum(tong_hang)
muc_cao_nhat = max(tong_hang)
hang_cao_nhat = []
for i in range(len(tong_hang)):
if tong_hang[i] == muc_cao_nhat:
hang_cao_nhat.append(i + 1)
return tong_chung, tong_hang, hang_cao_nhat
print(thong_ke_ma_tran([[2, 1, 3], [4, 0, 2], [1, 1, 1]]))
```
Kết quả là `(15, [6, 6, 3], [1, 2])`. `range(len(tong_hang))` cho chỉ số 0, 1, 2; cộng 1 để báo **số thứ tự hàng** như người dùng quen đọc. Nếu dùng `a=[]`, một hàng rỗng hoặc các hàng dài khác nhau, chương trình báo `ValueError`. Thử bảng chỉ có một hàng `[[5, -2]]`: tổng là 3 và hàng cao nhất là `[1]`; dấu âm vẫn được cộng như số bình thường.
Bài luyện
Với các tổng hàng `[6, 6, 3]`, những hàng nào có tổng lớn nhất theo số thứ tự từ 1?
Hàng 2 cũng có tổng 6.
Hàng 1 cũng có tổng 6.
Cả hai bằng mức lớn nhất 6.
Hàng 3 chỉ có tổng 3.
Lời giải
Mức cao nhất là 6. Hàng thứ nhất và thứ hai đều có tổng 6 nên cùng được giữ.
Bài luyện
Vì sao đoạn mã dùng `i + 1` khi báo hàng cao nhất?
i+1 chỉ là vị trí báo ra.
Người dùng gọi hàng thứ nhất, Python gọi chỉ số 0.
Hàng đầu vẫn được xét.
Không thay dữ liệu ma trận.
Lời giải
Vòng `range` cho i=0 ở hàng đầu tiên. Báo hàng thứ mấy cho người dùng thì cộng 1, nên i=0 được hàng 1.
Bài luyện
Dữ liệu nào bị hàm từ chối vì không phải ma trận chữ nhật theo bài này?
Hai hàng đều dài 2.
Một hàng dài 2 vẫn là bảng chữ nhật.
Hàng đầu dài 2, hàng sau dài 1.
Hai hàng đều dài 1.
Lời giải
Ma trận m × n phải có n phần tử ở mỗi hàng. Dãy [[1,2],[3]] có độ dài hàng không đều.
Đang học