Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from sys import exit as выйти
- from os import system as исполнить, name as операционка
- from pickle import dump as запиклить, load as отпиклить
- тип = type
- ввод = input
- распечатать = print
- длина = len
- переменные = dir
- строка = str
- целочисленное = int
- открыть = open
- НетФайлаОшибка = FileNotFoundError
- Ничто = None
- class Меню:
- def ну_с_богом(я, название):
- я.название = название
- я.меню_и_пункты = {}
- я.__name__ = я.название
- __init__ = ну_с_богом
- class Пункт:
- def ну_с_богом(я, название, значение=Ничто):
- я.название = название
- я.значение = значение
- я.__name__ = я.название
- __init__ = ну_с_богом
- class Консоль():
- def ну_с_богом(я):
- я.предыдущий_пункт = []
- я.текущий_пункт = Ничто
- __init__ = ну_с_богом
- def цикл(я):
- while 1:
- консоль.очистить()
- я.отобразить_пункты()
- выбор = ввод('>>> ')
- if выбор:
- я.выбрать_пункт(выбор)
- def создать_главное_меню(я, название):
- я.меню = Меню(название)
- я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.создать_меню
- я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.создать_пункт
- я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.назад
- я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.выход
- я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.сохранить
- я.меню.меню_и_пункты[длина(я.меню.меню_и_пункты) + 1] = Консоль.загрузить
- я.текущий_пункт = я.меню
- def создать_меню(я, название):
- if not название:
- return
- if 'меню' in (переменные(я)):
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты) + 1] = Меню(название)
- размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.создать_меню
- размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.создать_пункт
- размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.назад
- размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.выход
- размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.сохранить
- размер = длина(я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты)
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты)].меню_и_пункты[размер + 1] = Консоль.загрузить
- else:
- pass
- def создать_пункт(я, название):
- if название:
- я.текущий_пункт.меню_и_пункты[длина(я.текущий_пункт.меню_и_пункты) + 1] = Пункт(название)
- def отобразить_пункты(я):
- распечатать('')
- распечатать(я.текущий_пункт.название)
- if 'меню' in (переменные(я)):
- for key in я.текущий_пункт.меню_и_пункты.keys():
- с = строка(тип(я.текущий_пункт.меню_и_пункты[key])).replace("'", '').replace('__main__', '')
- с = с.replace('.', '').replace('function', 'команда').replace('class', '')
- распечатать(строка(key) + '.) ' + я.текущий_пункт.меню_и_пункты[key].__name__ + '\t' + с)
- def выбрать_пункт(я, выбор):
- def ф():
- pass
- if выбор:
- выбор = целочисленное(выбор)
- if выбор in я.текущий_пункт.меню_и_пункты.keys():
- if тип(я.текущий_пункт.меню_и_пункты[выбор]) == Меню:
- я.предыдущий_пункт.append(я.текущий_пункт)
- я.текущий_пункт = я.текущий_пункт.меню_и_пункты[выбор]
- return
- if тип(я.текущий_пункт.меню_и_пункты[выбор]) == тип(ф):
- название = ввод('>>> ' + я.текущий_пункт.меню_и_пункты[выбор].__name__ + ' >>> ')
- я.текущий_пункт.меню_и_пункты[выбор](я, название)
- return
- пункт = я.текущий_пункт.меню_и_пункты[выбор]
- if тип(пункт) == Пункт:
- распечатать(я.текущий_пункт.меню_и_пункты[выбор].значение)
- значение = ввод('>>> значение >>> ')
- if значение:
- я.текущий_пункт.меню_и_пункты[выбор].значение = значение
- return
- def назад(я, название):
- if длина(я.предыдущий_пункт):
- я.текущий_пункт = я.предыдущий_пункт[-1]
- я.предыдущий_пункт = я.предыдущий_пункт[:-1]
- def выход(я, название):
- if название:
- return
- выйти()
- def очистить(я):
- кмд = 'cls' if операционка == 'nt' else 'clear'
- исполнить(кмд)
- def сохранить(я, название='file.pickle'):
- try:
- with открыть(название, 'wb') as файл:
- запиклить(я, файл)
- except НетФайлаОшибка:
- pass
- def загрузить(я, название='file.pickle'):
- try:
- with открыть(название, 'rb') as файл:
- консоль = отпиклить(файл)
- консоль.цикл()
- except НетФайлаОшибка:
- pass
- консоль = Консоль()
- консоль.создать_главное_меню('главное_меню')
- консоль.цикл()
Advertisement
Add Comment
Please, Sign In to add comment