Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, re
- from random import randint
- def cls():
- """Функция очистки консоли"""
- os.system('cls' if os.name == 'nt' else 'clear')
- class Identification:
- """Регистрация, идентификация и авторизация пользователя"""
- __users = {
- 'surname': 'Pupkin',
- 'password': 'lox45',
- 'code_name': 'bloha',
- 'money': 750,
- },
- 'surname': 'Olegovich',
- 'password': 'plums',
- 'code_name': 'atom',
- 'money': 632,
- },
- }
- def __init__(self, email, password):
- """Инициализация экземпляра класса"""
- self.email = email
- self.__password = password
- self.__code_name = Identification.__users[email]["code_name"]
- self.full_name = f'{Identification.__users[email]["name"]} {Identification.__users[email]["surname"]}'
- self.money = Identification.__users[email]["money"]
- def __str__(self):
- """Метод отображения информации при вызове функции print() с аргументом нашего экземпляра"""
- return f'Пользователь: {self.full_name} \nПочта: {self.email} \nСумма на счету: {self.money} рубля(ей)\n'
- def send_money(self):
- """Метод перевода денег в фонд нищих"""
- if self.money > 0: # Проверяем есть ли деньги на счету.
- print('Сколько будем переводить?')
- sum_to_send = int(input('Введите сумму: '))
- while sum_to_send > self.money: # Проверяем не захотел ли юзер отправить больше чем у него есть
- sum_to_send = int(
- input(f'У Вас всего-то {self.money} рубля(ей) на счету. Введите сумму не превышающую баланс: '))
- while entered_code := input(
- 'Введите кодовое слово: ') != self.__code_name: # Проверяем на правильность кодового слова для перевода денег
- print('Неверное кодовое слово')
- continue # Идем на следующий цикл
- self.money -= sum_to_send # Списываем с баланса
- else: # Если нету денег на счету
- return print('Вы не в состоянии позволить себе денежные переводы.\n')
- cls()
- return print('Ваши деньги ушли в фонд нищих.\n')
- @classmethod
- def _check_user(cls, email, password):
- """Метод проверки есть ли пользователь в БД и совпадает ли пароль при логине,
- а так же если выбран режим регистрации нового user'a (передавая email и None в
- аргументах) проверяет есть ли уже такой user"""
- if password is None: # Проверка при регистрации нового юзера
- return email in cls.__users
- if email not in cls.__users: # Проверка при логине есть ли юзер в БД
- return (False, 'no_user')
- if cls.__users[email]['password'] != password: # Если юзер в БД - проверяем пароль
- return (False, 'bad_password')
- return (True,) # Возврат если все ОК
- @classmethod
- def _register_user(cls, email, name, surname, password, code_word):
- """Метод добавления нового пользователя в БД
- Деньги - акция от банка за регистрацию от 500 до 1000р )"""
- cls.__users[email] = {'name': name,
- 'surname': surname,
- 'password': password,
- 'code_name': code_word,
- 'money': randint(500, 1000)
- }
- def check_email(email):
- """Функция проверки емейла на корректность"""
- regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
- while not re.fullmatch(regex, email):
- print('Введен не корректный email, попробуйте еще раз.')
- email = input('Введите Ваш email: ').lower()
- return email
- def register_user():
- """Функция регистрации нового пользователя"""
- cls()
- print('Регистрация нового пользователя.')
- email = check_email(input('Введите Ваш email: ').lower())
- while Identification._check_user(email, None): # Проверка есть ли user с таким email в БД
- print('Такой пользователь уже сужествует.')
- email = check_email(input('Введите Ваш email: ').lower())
- name = input('Введите Ваше имя: ').capitalize()
- surname = input('Введите Вашу фамилию: ').capitalize()
- while True: # Проверка на совпадение паролей. Цикл будет выполняться пока пароль не совпадет.
- pass1 = input('Введите пароль: ')
- pass2 = input('Повторите пароль: ')
- if pass1 == pass2:
- password = pass1
- break
- print('Пароли не совпадают. Повторите ввод.')
- code_word = input('Введите кодовое слово: ')
- return Identification._register_user(email, name, surname, password, code_word)
- # Вызываем метод класса добавления пользователя в БД
- def enter_email_pass():
- """ Функция ввода е-мейла и пароля. Возвращает кортеж (email, password)"""
- email = check_email(input('Введите Ваш email: ').lower())
- password = input('Введите пароль: ')
- return email, password
- def login():
- """ Функция опции 'Войти в систему' """
- cls()
- print('Вход в систему.')
- email, password = enter_email_pass()
- check_user_result = Identification._check_user(email, password)
- while check_user_result[0] != True: # Пока проверка не вернет что user есть в БД и введен правильный пароль
- if check_user_result[1] == 'no_user': # Если юзера нет - предлагаем зарегистрироваться
- answer = input('Такого пользователя не существует. Хотите зарегистрироваться? (y / n) ')
- if answer.lower() == 'y':
- register_user()
- cls()
- print('Спасибо за регистрацию. Можете войти в систему.')
- email, password = enter_email_pass()
- check_user_result = Identification._check_user(email, password)
- continue
- else:
- print('Как хотите... \n')
- input('Нажите Enter для возврата в главное меню.')
- cls()
- return False
- elif check_user_result[1] == 'bad_password': # Если user есть, но пароль неверный
- print('Введен неверный пароль. Повторите попытку.')
- password = input('Введите пароль: ')
- check_user_result = Identification._check_user(email, password)
- return Identification(email, password) # Если прошли проверку, то авторизуемся. (создается экземпляр класса)
- while True: # Основной цикл программы
- print('1. Войти в систему')
- print('2. Зарегистрироваться')
- print('3. Завершить работу')
- choise = input('Сделайте свой выбор: ')
- if choise == '1':
- cls()
- user = login()
- if not user:
- continue
- elif choise == '2':
- register_user()
- cls()
- print('Регистрация прошла успешно.')
- continue
- elif choise == '3':
- print('До свидания')
- break
- else:
- cls()
- print('Выберите 1, 2 или 3')
- continue
- cls()
- while True: # Цикл программы после удачной авторизации
- print(f'{user.full_name}, что будем делать дальше?')
- print('1. Информация о пользователе')
- print('2. Остаток на счету')
- print('3. Перевести деньги')
- print('4. Выйти из системы')
- print('5. Завершить работу')
- choise = input('Сделайте свой выбор: ')
- if choise == '1':
- cls()
- print(user)
- continue
- if choise == '2':
- cls()
- print(f'У вас на счету {user.money} рубля(ей).\n')
- continue
- elif choise == '3':
- cls()
- user.send_money()
- continue
- elif choise == '4':
- print('До свидания \n')
- input('Нажите Enter для продолжения...')
- cls()
- break
- elif choise == '5':
- raise SystemExit('До свидания.')
- else:
- cls()
- print('Выберите 1, 2, 3, 4 или 5')
- continue
- cls()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement