Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.82 KB | None | 0 0
  1. import time
  2. from os import listdir, remove
  3. from random import randint
  4.  
  5. class NoteBook:
  6.     def cipher(string,password):
  7.         ascii_str = [ord(i) + 0 for i in string]
  8.         ascii_pass = [ord(i) + 0 for i in password]
  9.         zero = 0
  10.         end_cip = ''
  11.         for digit in ascii_str:
  12.             if zero == len(ascii_pass):
  13.                 zero = 0
  14.             digit += ascii_pass[zero]
  15.             zero += 1
  16.             end_cip += (str(digit) + "|")
  17.         return end_cip
  18.                      
  19.     def decipher(encrypt,password):
  20.         try:
  21.             ascii_str = encrypt.split("|")[:-1]
  22.             ascii_str = [int(i) + 0 for i in ascii_str]
  23.             ascii_pass = [ord(i) + 0 for i in password]
  24.             zero = 0
  25.             end_decip = ''
  26.             for digit in ascii_str:
  27.                 if zero == len(ascii_pass):
  28.                     zero = 0
  29.                 digit -= ascii_pass[zero]
  30.                 zero += 1
  31.                 end_decip += chr(digit)
  32.                
  33.             return end_decip
  34.         except ValueError:
  35.             return(chr(1129))
  36.  
  37.        
  38.     def make():
  39.         open("note_cache.txt","a").write("")
  40.        
  41.     def write(time,date,name,note):
  42.         book = open("note_cache.txt","a")
  43.         book.write(f"{time}-{date}-{name}-{note}\n")
  44.  
  45.     def clear(name_date):
  46.         all = (open('note_cache.txt','rt').read()).split('\n')
  47.         all = [i.split('-',3) for i in all][:-1]
  48.        
  49.         print('\n @ > Поиск обнаружил такие заметки : \n')
  50.         number = 0
  51.         count = 0
  52.         for elem in all:
  53.             for element in elem:
  54.                 if count == len(all):
  55.                     print('> > Записи для удаления не найдены!')
  56.                     input('> > Нажмите Enter чтобы вернуться в  глав-меню | ')
  57.                     main()
  58.                 if name_date == element:
  59.                     print(f'>> {all.index(elem)}) : {elem[3]} ')
  60.                     number += 1
  61.                 else:
  62.                     count += 1
  63.                 if str(number)[:-1] == '0':
  64.                     input('\n> > Нажмите Enter чтобы показать больше | ')
  65.         what = str(input('\n @ > Введите номера заметок для удаления через пробел : '))
  66.         if what == ';start':
  67.             main()
  68.         else:
  69.             try:
  70.                 what = what.split(' ')
  71.                 while '' in what:
  72.                     what.remove('')
  73.                 what = [all[int(i)] for i in what]
  74.             except:
  75.                 print('\n> ! Ошибка! Проверьте ввод')
  76.                 input('> > Нажмите Enter чтобы вернуться в  глав-меню | ')
  77.                 main()
  78.             try:
  79.                 for indx in what:
  80.                     all.remove(indx)
  81.                 empty = []
  82.                 for i in all:
  83.                     joint = str('-'.join(i) + '\n')
  84.                     empty.append(joint)
  85.                 open('note_cache.txt','w').write(str(''.join(empty)))
  86.                 print('\n>> Записи успешно удалены!')
  87.                 input('> > Нажмите Enter чтобы вернуться в  глав-меню | ')
  88.             except:
  89.                 print('\n> ! Ошибка! Проверьте ввод')
  90.                 input('> > Нажмите Enter чтобы вернуться в  глав-меню | ')
  91.                      
  92.     def search():
  93.         notes = open("note_cache.txt","rt").read()
  94.         notes = notes.split("\n")
  95.         notes = ([note.split('-',3) for note in notes])[:-1]
  96.        
  97.         print('\n' * 50)
  98.         print('> 1 - Показать все заметки начиная с первой')
  99.         print('>> 2 - Поиск по имени/дате')
  100.         print('>>> 3 - Вернуться в стартовое меню')
  101.         mode = str(input(' @ : '))
  102.  
  103.         if mode == '1':
  104.             check = 0
  105.             for lists in notes:
  106.                 try:
  107.                     print('\n' * 50)
  108.                     print(f'\n> Дата/Время: {lists[1]}({lists[0]})')
  109.                     print(f'>> Имя: {lists[2]}')
  110.                     print(f'>>> Заметка: {lists[3]}')
  111.                     check += 1
  112.                     if check != len(notes):
  113.                         input('\n\n>> Нажмите Enter чтобы перейти к следующей заметке | ')
  114.                     else:
  115.                         input('\n\n @ > Нажмите Enter чтобы вернуться на старт | ')
  116.                 except IndexError:
  117.                     print('\n\n>> Невозможно считать данные, блокнот был неправильно расшифрован')
  118.                     time.sleep(5)
  119.                     main()
  120.         elif mode == '2':
  121.             check = 0
  122.             print('\n' * 50)
  123.             print('> ! Правильный формат ввода даты: Месяц/Дата/Год/(07/15/18)')
  124.             name_date = input('>> Введите Имя/Дату создания заметки: ')
  125.             search_list = []
  126.             for lists in notes:
  127.                 if name_date in lists:
  128.                     search_list.append(lists)
  129.             if len(search_list) > 0:
  130.                 for lists in search_list:
  131.                     print('\n' * 50)
  132.                     print(f'\n> Дата/Время: {lists[1]}({lists[0]})')
  133.                     print(f'>> Имя: {lists[2]}')
  134.                     print(f'>>> Заметка: {lists[3]}')
  135.                     check += 1
  136.                     if check != len(search_list):
  137.                         input('\n\n>> Нажмите Enter чтобы перейти к следующей заметке | ')
  138.                     else:
  139.                         input('\n\n @ > Нажмите Enter чтобы вернуться на старт | ')
  140.                         main()
  141.             else:
  142.                 print('\n>> Поиск не дал результатов!')
  143.                 input(' @ > Нажмите Enter чтобы вернуться на старт | ')
  144.         elif mode == '3':
  145.             main()
  146.         else:
  147.             print('>> Неверный ввод!')
  148.             input(' @ > Нажмите Enter чтобы вернуться на старт | ')
  149.  
  150.                    
  151. def main():
  152.     NoteBook.make()
  153.     check_cip = open('note_cache.txt','rt').read()
  154.     check_cip_str = check_cip.split('|')[:-1]
  155.     check_cip_str = ''.join(check_cip_str)
  156.     if check_cip_str.isdigit():
  157.         print('\n' * 50)
  158.         print('>> Блокнот зашифрован паролем')
  159.         password = str(input('> @ Введите пароль: '))
  160.         decrypt = NoteBook.decipher(check_cip,password)
  161.         try:
  162.             open('note_cache_pass.txt','w').write(decrypt)
  163.         except:
  164.             remove('note_cache_pass.txt')
  165.             print('\n>> @ !! Пароль неверен!')
  166.             print('>> Авто-выход...')
  167.             time.sleep(2)
  168.         else:
  169.             remove('note_cache_pass.txt')
  170.             open('note_cache.txt','w').write(decrypt)
  171.             main()
  172.     else:
  173.         while True:
  174.             print("\n" * 100)
  175.             if randint(0,100) == 22:
  176.                 print('> @not_statilko <3\n')
  177.             print(" @ ) 1 - Доступные записи")
  178.             print(" @ ) 2 - Добавить заметку")
  179.             print(" @ ) 3 - Перейти в меню очистки")
  180.             print(" @ ) 4 - Зашифровать содержимое блокнота")
  181.             mode = str(input("\n ^ > Выберите режим: "))
  182.             if mode == "1":
  183.                 NoteBook.search()
  184.             elif mode == "2":
  185.                 print('\n' * 50)
  186.                 name = str(input("\n> Имя заметки: "))
  187.                 note = str(input(">> Пишите : "))
  188.                 time_now = time.strftime("%X")
  189.                 date = time.strftime("%x")
  190.                 NoteBook.write(time_now,date,name,note)
  191.                 print(">> % Заметка успешно добавлена!")
  192.                 input("\n ~ Нажмите Enter | ")
  193.                
  194.             elif mode == '3':
  195.                 print('\n' * 50)
  196.                 print('> > Введите Имя/Дату/Время записи которую вы хотите удалить')
  197.                 name_date = str(input('> > Ввод : '))
  198.                 NoteBook.clear(name_date)
  199.                
  200.             elif mode == '4':
  201.                 print('\n' * 50)
  202.                 print('>> Внимание!')
  203.                 print('>> После зашифровки блокнота его расшифровка без пароля станет невозможной!')
  204.                 print('> Пожалуйста, запомните пароль')
  205.                 password = str(input('>> @ : Вводите пароль: '))
  206.                 if len(password) < 4:
  207.                     print('\n>> ! : Пароль должен быть не меньше 4 символов, и в идеале содержать буквы')
  208.                     input(' @ > Нажмите Enter чтобы вернуться на старт | ')
  209.                 else:
  210.                     notes = open('note_cache.txt','rt').read()
  211.                     cipher = NoteBook.cipher(notes,password)
  212.                     open('note_cache.txt','w').write(cipher)
  213.                     print(f' # ! Ваш блокнот зашифрован паролем "{password}", авто-выход...')
  214.                     time.sleep(3)
  215.                     raise OSError(' All is Okay')
  216.             else:
  217.                 pass  
  218.        
  219.    
  220. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement