🏠 Домашнее задание 38
Источник: Python Fundamentals 2025: Домашнее задание 38
⚡ Кратко
Выполните обязательную часть домашнего задания, проверьте код на нескольких входных данных и только затем переходите к дополнительным задачам.
Задание 1. Банковский счёт
Создайте класс BankAccount, описывающий банковский счёт.
- Объект должен хранить имя владельца и текущий баланс.
- Реализуйте методы: пополнение счёта, снятие средств, отображение баланса.
- При попытке снять больше, чем есть на счёте, операция не должна выполняться.
Продумайте, какие поля и методы следует скрыть от внешнего доступа, а какие оставить открытыми.
Пример вывода:
Current balance: 150
Error: Amount must be positive.
Current balance: 150
Error: Not enough funds.
Current balance: 150
Задание 2. История операций
Доработайте класс BankAccount:
- Каждая операция пополнения и снятия должна сохраняться в историю.
- История должна быть доступна через property
historyтолько для чтения. - История представляется в виде списка строк (
"Deposit: 150","Withdraw: 100"и т.д.).
Пример вывода:
Current balance: 50
Operation history:
Deposit: 150
Withdraw: 100
Пример решения
class BankAccount:
def __init__(self, owner: str, balance: float = 0) -> None:
self.__owner = owner
self.__balance = balance
self.__history: list[str] = []
def deposit(self, amount: float) -> None:
if amount <= 0:
print("Error: Amount must be positive.")
return
self.__balance += amount
self.__history.append(f"Deposit: {amount}")
def withdraw(self, amount: float) -> None:
if amount <= 0:
print("Error: Amount must be positive.")
return
if amount > self.__balance:
print("Error: Not enough funds.")
return
self.__balance -= amount
self.__history.append(f"Withdraw: {amount}")
def show_balance(self) -> None:
print(f"Current balance: {self.__balance}")
@property
def history(self) -> list[str]:
return self.__history.copy()
account = BankAccount("Alice", 0)
account.deposit(150)
account.withdraw(-10)
account.withdraw(200)
account.withdraw(100)
account.show_balance()
print("Operation history:")
for operation in account.history:
print(f" {operation}")
Что проверить в VS Code
- Попытка изменить
account._BankAccount__balanceработает, но нарушает инкапсуляцию. account.historyвозвращает список операций, ноaccount.history = []вызываетAttributeError.- История не изменяется, если операция отклонена.