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):

PythonCơ bản20 phút

Tiến độ của tôi ở bài này

Điểm đượ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ủ đề

oopencapsulationvalidationfinancial

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.