Guest User

Untitled

a guest
Apr 13th, 2023
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from sys import exit as выйти
  2. from os import system as исполнить, name as операционка
  3. from pickle import dump as запиклить, load as отпиклить
  4.  
  5.  
  6. тип = type
  7. ввод = input
  8. распечатать = print
  9. длина = len
  10. переменные = dir
  11. строка = str
  12. целочисленное = int
  13. открыть = open
  14. НетФайлаОшибка = FileNotFoundError
  15. Ничто = None
  16.  
  17.  
  18. class Меню:
  19.     def ну_с_богом(я, название):
  20.         я.название = название
  21.         я.меню_и_пункты = {}
  22.         я.__name__ = я.название
  23.     __init__ = ну_с_богом
  24.  
  25.  
  26. class Пункт:
  27.     def ну_с_богом(я, название, значение=Ничто):
  28.         я.название = название
  29.         я.значение = значение
  30.         я.__name__ = я.название
  31.     __init__ = ну_с_богом
  32.  
  33.  
  34. class Консоль():
  35.     def ну_с_богом(я):
  36.         я.предыдущий_пункт = []
  37.         я.текущий_пункт = Ничто
  38.     __init__ = ну_с_богом
  39.  
  40.     def цикл(я):
  41.         while 1:
  42.             консоль.очистить()
  43.             я.отобразить_пункты()
  44.             выбор = ввод('>>> ')
  45.             if выбор:
  46.                 я.выбрать_пункт(выбор)
  47.  
  48.     def создать_главное_меню(я, название):
  49.         я.меню = Меню(название)
  50.         я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.создать_меню
  51.         я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.создать_пункт
  52.         я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.назад
  53.         я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.выход
  54.         я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.сохранить
  55.         я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.загрузить
  56.         я.текущий_пункт = я.меню
  57.  
  58.     def создать_меню(я, название):
  59.         if not название:
  60.             return
  61.         if 'меню' in (переменные(я)):
  62.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты) + 1] = Меню(название)
  63.             размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
  64.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.создать_меню
  65.             размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
  66.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.создать_пункт
  67.             размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
  68.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.назад
  69.             размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
  70.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.выход
  71.             размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
  72.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.сохранить
  73.             размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
  74.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.загрузить
  75.         else:
  76.             pass
  77.  
  78.     def создать_пункт(я, название):
  79.         if название:
  80.             я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты) + 1] = Пункт(название)
  81.  
  82.     def отобразить_пункты(я):
  83.         распечатать('')
  84.         распечатать(я.текущий_пункт.название)
  85.         if 'меню' in (переменные(я)):
  86.             for key in я.текущий_пункт.меню_и_пункты.keys():
  87.                 с = строка(тип(я.текущий_пункт.меню_и_пункты[key])).replace("'", '').replace('__main__', '')
  88.                 с = с.replace('.', '').replace('function', 'команда').replace('class', '')
  89.                 распечатать(строка(key) + '.) ' + я.текущий_пункт.меню_и_пункты[key].__name__ + '\t' + с)
  90.  
  91.     def выбрать_пункт(я, выбор):
  92.         def ф():
  93.             pass
  94.  
  95.         if выбор:
  96.             выбор = целочисленное(выбор)
  97.             if выбор in я.текущий_пункт.меню_и_пункты.keys():
  98.                 if тип(я.текущий_пункт.меню_и_пункты[выбор]) == Меню:
  99.                     я.предыдущий_пункт.append(я.текущий_пункт)
  100.                     я.текущий_пункт = я.текущий_пункт.меню_и_пункты[выбор]
  101.                     return
  102.  
  103.                 if тип(я.текущий_пункт.меню_и_пункты[выбор]) == тип(ф):
  104.                     название = ввод('>>> ' + я.текущий_пункт.меню_и_пункты[выбор].__name__ + ' >>> ')
  105.                     я.текущий_пункт.меню_и_пункты[выбор](я, название)
  106.                     return
  107.  
  108.                 пункт = я.текущий_пункт.меню_и_пункты[выбор]
  109.                 if тип(пункт) == Пункт:
  110.                     распечатать(я.текущий_пункт.меню_и_пункты[выбор].значение)
  111.                     значение = ввод('>>> значение >>> ')
  112.                     if значение:
  113.                         я.текущий_пункт.меню_и_пункты[выбор].значение = значение
  114.                         return
  115.  
  116.     def назад(я, название):
  117.         if длина(я.предыдущий_пункт):
  118.             я.текущий_пункт = я.предыдущий_пункт[-1]
  119.             я.предыдущий_пункт = я.предыдущий_пункт[:-1]
  120.  
  121.     def выход(я, название):
  122.         if название:
  123.             return
  124.         выйти()
  125.  
  126.     def очистить(я):
  127.         кмд = 'cls' if операционка == 'nt' else 'clear'
  128.         исполнить(кмд)
  129.  
  130.     def сохранить(я, название='file.pickle'):
  131.         try:
  132.             with открыть(название, 'wb') as файл:
  133.                 запиклить(я, файл)
  134.         except НетФайлаОшибка:
  135.             pass
  136.  
  137.     def загрузить(я, название='file.pickle'):
  138.         try:
  139.             with открыть(название, 'rb') as файл:
  140.                 консоль = отпиклить(файл)
  141.                 консоль.цикл()
  142.         except НетФайлаОшибка:
  143.             pass
  144.  
  145.  
  146. консоль = Консоль()
  147. консоль.создать_главное_меню('главное_меню')
  148. консоль.цикл()
  149.  
Advertisement
Add Comment
Please, Sign In to add comment