python-113Đọc toàn bộ đề miễn phí
Hệ thống Tài khoản Ngân hàng và Sổ cái Giao dịch với Đóng gói Dữ liệu
Cài đặt lớp BankAccount(account_number: str, initial_balance: float = 0.0):
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: classes, private attributes, exceptions.
Nội dung đề bài
Mục tiêu kiến thức
- Áp dụng nguyên lý đóng gói (Encapsulation) để bảo vệ trạng thái nội tại của đối tượng.
- Sử dụng thuộc tính private/protected và phương thức getter/setter có kiểm soát.
- Quản lý lịch sử giao dịch (Transaction Ledger) không thể bị sửa đổi tùy tiện từ bên ngoài.
Mô tả bài toán
Cài đặt lớp BankAccount(account_number: str, initial_balance: float = 0.0):
- init(self, account_number: str, initial_balance: float = 0.0):
- account_number: chuỗi định danh tài khoản.
- _balance: số dư nội tại. Nếu initial_balance < 0, raise ValueError("So du ban dau khong the am").
- _ledger: danh sách lưu các bản ghi giao dịch { "type": "DEPOSIT" | "WITHDRAW", "amount": float, "balance_after": float }.
- deposit(self, amount: float) -> float:
- Gửi tiền vào tài khoản. Nếu amount <= 0, raise ValueError("So tien nap phai lon hon 0").
- Cập nhật số dư và ghi nhận vào _ledger. Trả về số dư mới.
- withdraw(self, amount: float) -> float:
- Rút tiền. Nếu amount <= 0, raise ValueError("So tien rut phai lon hon 0").
- Nếu amount > self._balance, raise ValueError("So du khong du").
- Cập nhật số dư và ghi nhận vào _ledger. Trả về số dư mới.
- get_balance(self) -> float:
- Trả về số dư hiện tại.
- get_statement(self) -> list[dict]:
- Trả về bản sao danh sách lịch sử giao dịch.
Input
- Các tham số truyền vào hàm/lớp BankAccount hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp BankAccount hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
BankAccount(account_number='ACC_001', initial_balance=100.0, deposits=[50.0], withdrawals=[30.0])
Output
120.0
Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
BankAccount(account_number='ACC_002', initial_balance=50.0, withdraw=100.0)
Output
True
Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
