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

Sắp mặt hàng theo thành tiền mà không lệch dữ liệu

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

Một tệp chứa đủ ba trường của mỗi hàng

Tạo tệp `mua_hang_gia.txt` trong thư mục thực hành: ```text But 5000 3 Vo 12000 1 Thuoc 8000 2 Tay 4000 3 ``` Đây là **giá và số lượng giả định**, không phải giá thị trường. Mỗi dòng có đúng một tên một từ, đơn giá nguyên không âm và số lượng nguyên dương. Thành tiền lần lượt là 15000, 12000, 16000, 12000 đơn vị. Cần in tên và thành tiền theo thứ tự tăng: `Vo 12000`, `Tay 12000`, `But 15000`, `Thuoc 16000`. Hai hàng cùng thành tiền giữ thứ tự ban đầu trong cách nổi bọt ở dưới.

Đổi chỗ cả bản ghi khi tích sai thứ tự

```python def thanh_tien(hang): return hang[1] * hang[2] def sap_theo_tien_tang(a): n = len(a) for i in range(n - 1): for j in range(n - 1 - i): if thanh_tien(a[j]) > thanh_tien(a[j + 1]): a[j], a[j + 1] = a[j + 1], a[j] hang_hoa = [] with open("mua_hang_gia.txt", "r", encoding="utf-8") as f: for dong in f: ten, gia_chu, luong_chu = dong.split() gia, luong = int(gia_chu), int(luong_chu) if gia < 0 or luong <= 0: raise ValueError("Đơn giá không âm, số lượng dương") hang_hoa.append((ten, gia, luong)) sap_theo_tien_tang(hang_hoa) for hang in hang_hoa: print(hang[0], thanh_tien(hang)) ``` Chương trình in bốn dòng theo thứ tự dự kiến. Mỗi `hang` là bộ ba `(tên, đơn giá, số lượng)`; khi đổi chỗ, cả bộ ba đi cùng nhau nên tên không lệch khỏi giá/số lượng. So sánh bằng dấu `>` nên hai hàng có thành tiền bằng nhau không đổi chỗ; `Vo` vẫn đứng trước `Tay`. Nếu dòng thiếu trường, có tên gồm dấu cách, giá không chuyển được thành số hoặc số lượng không hợp lệ, chương trình báo lỗi để sửa tệp. Tệp rỗng không in dòng nào.

Bài luyện

Với hàng `But 5000 3`, thành tiền giả định là bao nhiêu?
Chọn một đáp án

Bài luyện

Khi nổi bọt theo thành tiền, vì sao phải đổi chỗ cả bộ ba `(tên, giá, lượng)`?
Chọn một đáp án

Bài luyện

`Vo` và `Tay` cùng thành tiền 12000. Trong hàm mẫu, thứ tự hai hàng sau sắp là gì?
Chọn một đáp án

Đang học