Advertisement
KosmosilaBY

Untitled

May 27th, 2022
754
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import os
  2. from random import randint
  3.  
  4.  
  5. def cls():
  6.     """Функция очистки консоли"""
  7.     os.system('cls' if os.name == 'nt' else 'clear')
  8.  
  9.  
  10. class Identification:
  11.     """Регистрация, идентификация и авторизация пользователя"""
  12.  
  13.     __users = {
  14.         'vasya@mail.ru': {'name': 'Vasya',
  15.                           'surname': 'Pupkin',
  16.                           'password': 'lox45',
  17.                           'code_name': 'bloha',
  18.                           'money': 750,
  19.                           },
  20.         'psix@ya.ru': {'name': 'Anton',
  21.                        'surname': 'Olegovich',
  22.                        'password': 'plums',
  23.                        'code_name': 'atom',
  24.                        'money': 632,
  25.                        },
  26.     }
  27.  
  28.     def __init__(self, email, password):
  29.         """Инициализация экземпляра класса"""
  30.         self.email = email
  31.         self.__password = password
  32.         self.__code_name = Identification.__users[email]["code_name"]
  33.         self.full_name = f'{Identification.__users[email]["name"]} {Identification.__users[email]["surname"]}'
  34.         self.money = Identification.__users[email]["money"]
  35.  
  36.     def __repr__(self):
  37.         """Метод отображения информации при вызове функции print() с аргументом нашего экземпляра"""
  38.         return f'Пользователь: {self.full_name} \nПочта: {self.email} \nСумма на счету: {self.money} рубля(ей)\n'
  39.  
  40.     def send_money(self):
  41.         """Функция перевода денег в фонд нищих"""
  42.         if self.money > 0:  # Проверяем есть ли деньги на счету.
  43.             print('Сколько будем переводить?')
  44.             sum_to_send = int(input('Введите сумму: '))
  45.             while sum_to_send > self.money:  # Проверяем не захотел ли юзер отправить больше чем у него есть
  46.                 sum_to_send = int(
  47.                     input(f'У Вас всего-то {self.money} рубля(ей) на счету. Введите сумму не превышающую баланс: '))
  48.             while entered_code := input(
  49.                     'Введите кодовое слово: ') != self.__code_name:  # Проверяем на правильность кодового слова для перевода денег
  50.                 print('Неверное кодовое слово')
  51.                 continue  # Идем на следующий цикл
  52.             self.money -= sum_to_send  # Списываем с баланса
  53.         else:  # Если нету денег на счету
  54.             return print('Вы не в состоянии позволить себе денежные переводы.\n')
  55.         cls()
  56.         return print('Ваши деньги ушли в фонд нищих.\n')
  57.  
  58.     @classmethod
  59.     def _check_user(cls, email, password):
  60.         """Функция проверки есть ли пользователь в БД и совпадает ли пароль при логине,
  61.        а так же если выбран режим регистрации нового user'a (передавая email и None в
  62.         аргументах) проверяет есть ли уже такой user"""
  63.         if password is None:  # Проверка при регистрации нового юзера
  64.             return email in cls.__users
  65.         if email not in cls.__users:  # Проверка при логине есть ли юзер в БД
  66.             return (False, 'no_user')
  67.         if cls.__users[email]['password'] != password:  # Если юзер в БД - проверяем пароль
  68.             return (False, 'bad_password')
  69.         return (True,)  # Возврат если все ОК
  70.  
  71.     @classmethod
  72.     def _register_user(cls, email, name, surname, password, code_word):
  73.         """Функция добавления нового пользователя в БД
  74.        Деньги - акция от банка за регистрацию от 500 до 1000р )"""
  75.         cls.__users[email] = {'name': name,
  76.                               'surname': surname,
  77.                               'password': password,
  78.                               'code_name': code_word,
  79.                               'money': randint(500, 1000)
  80.                               }
  81.  
  82.  
  83. def register_user():
  84.     """Функция регистрации нового пользователя"""
  85.     cls()
  86.     print('Регистрация нового пользователя.')
  87.     email = input('Введите Ваш email: ').lower()
  88.     while Identification._check_user(email, None):  # Проверка есть ли user с таким email в БД
  89.         print('Такой пользователь уже сужествует.')
  90.         email = input('Введите Ваш email: ').lower()
  91.     name = input('Введите Ваше имя: ').capitalize()
  92.     surname = input('Введите Вашу фамилию: ').capitalize()
  93.     while True:  # Проверка на совпадение паролей. Цикл будет выполняться пока пароль не совпадет.
  94.         pass1 = input('Введите пароль: ')
  95.         pass2 = input('Повторите пароль: ')
  96.         if pass1 == pass2:
  97.             password = pass1
  98.             break
  99.         print('Пароли не совпадают. Повторите ввод.')
  100.     code_word = input('Введите кодовое слово: ')
  101.     return Identification._register_user(email, name, surname, password, code_word)
  102.     # Вызываем метод класса добавления пользователя в БД
  103.  
  104.  
  105. def enter_email_pass():
  106.     """ Функция ввода е-мейла и пароля. Возвращает кортеж (email, password)"""
  107.     email = input('Введите email: ').lower()
  108.     password = input('Введите пароль: ')
  109.     return email, password
  110.  
  111.  
  112. def login():
  113.     """ Функция опции 'Войти в систему' """
  114.     cls()
  115.     print('Вход в систему.')
  116.     email, password = enter_email_pass()
  117.     check_user_result = Identification._check_user(email, password)
  118.     while check_user_result[0] != True:  # Пока проверка не вернет что user есть в БД и введен правильный пароль
  119.         if check_user_result[1] == 'no_user':  # Если юзера нет - предлагаем зарегистрироваться
  120.             answer = input('Такого пользователя не существует. Хотите зарегистрироваться? (y / n) ')
  121.             if answer.lower() == 'y':
  122.                 register_user()
  123.                 cls()
  124.                 print('Спасибо за регистрацию. Можете войти в систему.')
  125.                 email, password = enter_email_pass()
  126.                 check_user_result = Identification._check_user(email, password)
  127.                 continue
  128.             else:
  129.                 raise SystemExit('До свидания.')
  130.         elif check_user_result[1] == 'bad_password':  # Если user есть, но пароль неверный
  131.             print('Введен неверный пароль. Повторите попытку.')
  132.             password = input('Введите пароль: ')
  133.             check_user_result = Identification._check_user(email, password)
  134.     return Identification(email, password)  # Если прошли проверку, то авторизуемся. (создается экземпляр класса)
  135.  
  136.  
  137. while True:  # Основной цикл программы
  138.     print('1. Войти в систему')
  139.     print('2. Зарегистрироваться')
  140.     print('3. Завершить работу')
  141.     choise = int(input('Сделайте свой выбор: '))
  142.     if choise == 1:
  143.         cls()
  144.         user = login()
  145.     elif choise == 2:
  146.         register_user()
  147.         cls()
  148.         print('Регистрация прошла успешно.')
  149.         continue
  150.     elif choise == 3:
  151.         print('До свидания')
  152.         break
  153.     else:
  154.         print('Выберите 1, 2 или 3')
  155.         continue
  156.     cls()
  157.     while True:  # Цикл программы после удачной авторизации
  158.         print(f'{user.full_name}, что будем делать дальше?')
  159.         print('1. Информация о пользователе')
  160.         print('2. Остаток на счету')
  161.         print('3. Перевести деньги')
  162.         print('4. Выйти из системы')
  163.         print('5. Завершить работу')
  164.         choise = int(input('Сделайте свой выбор: '))
  165.         if choise == 1:
  166.             cls()
  167.             print(user)
  168.             continue
  169.         if choise == 2:
  170.             cls()
  171.             print(f'У вас на счету {user.money} рубля(ей).\n')
  172.             continue
  173.         elif choise == 3:
  174.             cls()
  175.             user.send_money()
  176.             continue
  177.         elif choise == 4:
  178.             print('До свидания \n')
  179.             input('Нажите Enter для продолжения...')
  180.             cls()
  181.             break
  182.         elif choise == 5:
  183.             raise SystemExit('До свидания.')
  184.         else:
  185.             print('Выберите 1, 2, 3 или 4')
  186.             continue
  187.         cls()
  188.  
Advertisement
RAW Paste Data Copied
Advertisement