Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 69 additions & 2 deletions Module8/practice/IBank/IBank_part1_4[add].py
Original file line number Diff line number Diff line change
@@ -1,8 +1,75 @@
import re


def validate_passport(passport_number):
pattern = r"\d{4} \d{6}"
if not re.match(pattern, passport_number):
raise ValueError("Неверный формат телефона/паспорта")


def validate_phone_number(phone_number):
pattern = r"[+]7-\d{3}-\d{3}-\d{2}-\d{2}"
if not re.match(pattern, phone_number):
raise ValueError("Неверный формат телефона/паспорта")


class Account:
def __init__(self, name: str, passport: str, phone_number: str, start_balance: int = 0):
pass
self.name = name
self.__balance = start_balance

try:
validate_passport(passport)
validate_phone_number(phone_number)
self.passport = passport
self.phone_number = phone_number
except ValueError as e:
print(e)

def full_info(self) -> str:
"""
Полная информация о счете в формате: "Иван баланс: 100 руб. паспорт: 3200 123456 т.+7-900-200-02-03"
"""
return f"{self.name} баланс: {self.balance} руб. паспорт: {self.passport} т.{self.phone_number}"

def __repr__(self) -> str:
"""
:return: Информацию о счете в виде строки в формате "Иван баланс: 100 руб."
"""
return f"{self.name} баланс: {self.balance} руб."

# TODO: реализуйте getter для просмотра баланса
# Подробнее тут: https://pythobyte.com/using-getters-and-setters-in-python-5205-840ed13f/
@property
def balance(self) -> int:
return self.__balance

def deposit(self, amount: int) -> None:
"""
Внесение суммы на текущий счет
:param amount: сумма
"""
self.__balance += amount

def withdraw(self, amount: int) -> None:
"""
Снятие суммы с текущего счета
:param amount: сумма
"""
if self.__balance - amount < 0:
raise ValueError
self.__balance -= amount

# TODO-0: сюда копируем реализацию класса Account из предыдущей задачи
# TODO-1: напишите реализацию метода transfer()
def transfer(self, target_account: 'Account', amount: int) -> None:
"""
Перевод денег на счет другого клиента
:param target_account: счет клиента для перевода
:param amount: сумма перевода
:return:
"""
self.withdraw(amount)
target_account.deposit(amount)

# TODO-1: добавьте проверку паспорта и телефона(в конструкторе) на соответствие заданным форматам
# В случае несоответствия выбрасываем исключение ValueError("Неверный формат телефона/паспорта")
Expand Down