Банковские счета
Представьте, что вы являетесь разработчиком программного обеспечения в одном из ведущих банков. Банк работает над улучшением своей бэкенд-системы, и ваша задача — разработать и реализовать новые классы для представления различных типов банковских счетов.
Банк предлагает два типа счетов: текущие и сберегательные. Оба типа счетов позволяют клиентам вносить и снимать деньги, но каждый имеет свои особенности. Текущие счета имеют лимит овердрафта, который позволяет клиентам снимать деньги сверх текущего баланса до установленного лимита. Сберегательные счета приносят проценты на основе годовой процентной доходности.
Ваша задача — создать три класса на Python:
BankAccount
, CheckingAccount
и SavingsAccount
. Все они инициализируются с начальной суммой balance
.- Класс
BankAccount
должен иметь два метода:deposit
иwithdraw
. Методdeposit
увеличивает баланс на сумму депозита. Методwithdraw
уменьшает баланс на сумму снятия. Оба метода должны выводить конечный баланс после операции в форматеBalance: <X>
. Если средств недостаточно, программа должна вывестиInsufficient funds.
.
- Класс
CheckingAccount
должен наследоватьBankAccount
и добавлять дополнительный атрибут:overdraft_limit
. Методwithdraw
вCheckingAccount
должен быть переопределён, чтобы позволить клиентам снимать деньги сверх текущего баланса до лимита овердрафта. В случае превышения лимита овердрафта программа должна вывестиWithdrawal exceeds overdraft limit.
.
- Класс
SavingsAccount
также должен наследоватьBankAccount
. Он должен добавлять дополнительный атрибут при инициализации:annual_percentage_yield
, и иметь методcalculate_returns
, который рассчитывает доходность сбережений на основеannual_percentage_yield
. Методcalculate_returns
должен выводить доход в форматеReturns: X
.
Баланс на любом счёте никогда не должен становиться отрицательным (за исключением
CheckingAccount
, где он может быть отрицательным до лимита овердрафта).Input | Output |
check = CheckingAccount(500, 100); check.deposit(200); check.withdraw(800); saving = SavingsAccount(500, 0.05); saving.calculate_returns() | Balance: 700
Balance: -100
Returns: 25 |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB