import os import sys import json import random try: import ezztui except: os.system(sys.executable + " -m pip install " + "ezztui") import ezztui try: from progress.bar import ChargingBar except: os.system(sys.executable + " -m pip install " + "progress") from progress.bar import ChargingBar ezztui.check_curses() massivmenu = { 'Управление массивами': { 'Создать массив': 'ezztui_return_value', 'Выбрать текущий массив': 'ezztui_return_value', 'Очистить массив': { 'Очистить': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Удалить массив': { 'Удалить': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Управление основательными массивами': { 'Сохранить массивы глубоко на диск': { 'Сохранить с заменой': 'ezztui_return_value', 'Сохранить с объединением': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Срезик массивов с диска': { 'Срезик с заменой': 'ezztui_return_value', 'Срезик с объединением': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Назад': 'ezztui_back_value' }, 'Назад': 'ezztui_back_value' }, 'Заполнение массивов': { 'Режим заполнения': { 'Замена': 'ezztui_return_value', 'Добавление': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Заполнить массив случайными числами': 'ezztui_return_value', 'Заполнить массив по заданному интервалу': 'ezztui_return_value', 'Заполнить массив вручную по крупицам': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Вывод массивов': { 'Вывести массив по одному элементу': 'ezztui_return_value', 'Вывести массив одной строчкой': 'ezztui_return_value', 'Вывести массив как список': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Действия с массивами': { 'Сложение массивов': 'ezztui_return_value', 'Перемешать массив': 'ezztui_return_value', 'Отсортировать массив': { 'По возрастанию': 'ezztui_return_value', 'По убыванию': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'Назад': 'ezztui_back_value' }, 'Игры': { 'Игра "угадай массив"': 'ezztui_return_value', 'Игра "посчитай сумму" - на развитие толковейшей головы': 'ezztui_return_value', 'Назад': 'ezztui_back_value' }, 'О программе': 'ezztui_return_value', 'Выход': { 'Выход': 'ezztui_exit_value', 'Назад': 'ezztui_back_value', 'KorvusTeam': 'ezztui_return_value', } } massives = {} current = '' fill_mode = 'add' def create_massive(): global massives global current print('Назовите массив.\n' 'Придумывайте основательное и глубокое название.\n' 'Не делайте название на 70 слайдов, ведь его сложно прочитать\n') name = input('Введите название: ') massives[name] = [] current = name input("Массив " + name + " создан! Сейчас он пустой. Вы можете заполнить его") def choose_current(): global massives global current massives_menu = {} for massive in list(massives): massives_menu[massive] = 'ezztui_return_value' try: current = ezztui.menu(massives_menu)[0] except: print("Что-то не так. Возможно, у вас нет массивов") def clear(): global massives massives_menu = {} for massive in list(massives): massives_menu[massive] = 'ezztui_return_value' toclear = ezztui.menu(massives_menu)[0] massives[toclear] = [] def delete(): global massives massives_menu = {} for massive in list(massives): massives_menu[massive] = 'ezztui_return_value' toclear = ezztui.menu(massives_menu)[0] massives.pop(toclear) def save_disk(mode): global massives if mode == 'merge': try: massivesread = open('смачний.шматочок', 'r') massives_disk = json.load(massivesread) to_dump = massives | massives_disk massivesread.close() massiveswrite = open('смачний.шматочок', 'w+') json.dump(to_dump, massiveswrite, indent=3) massiveswrite.close() except: massiveswrite = open('смачний.шматочок', 'w+') json.dump(massives, massiveswrite, indent=3) massiveswrite.close() else: massiveswrite = open('смачний.шматочок', 'w+') json.dump(massives, massiveswrite, indent=3) massiveswrite.close() def read_disk(mode): global massives massivesfile = open('смачний.шматочок', 'r') try: if mode == 'merge': massives |= json.load(massivesfile) else: massives = json.load(massivesfile) except: massives = massives massivesfile.close() def fill_random(): global massives global current global fill_mode needlen = None while needlen == None: try: needlen = int(input('Введите, сколько элементов массива нужно создать и засунуть ♂deep♂ в массив: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") minint = None while minint == None: try: minint = int(input('Введите, каким минимально должно быть случайное число: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") maxint = None while maxint == None: try: maxint = int(input('Введите, каким максимально должно быть случайное число: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") try: if fill_mode == 'replace': massives[current] = [] zapoln_bar = ChargingBar('Заполнение массива', max=needlen) for i in range(needlen): massives[current].append(random.randint(minint, maxint)) zapoln_bar.next() input("\nМассив заполнен") except: input("Что-то сломалось. Скорее всего, у вас нет массивов") def fill_interval(): global massives global current global fill_mode needlen = None while needlen == None: try: needlen = int(input('Введите, сколько элементов массива нужно создать и засунуть ♂deep♂ в массив: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") maxint = None while maxint == None: try: maxint = int(input('Введите, от какого числа будет заполняться массив: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") minint = None while minint == None: try: minint = int(input('Введите, до какого числа будет заполняться массив: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") interval = None while interval == None: try: interval = int(input('Введите интервал между числами: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") try: if fill_mode == 'replace': massives[current] = [] zapoln_bar = ChargingBar('Заполнение массива', max=needlen) prev = minint - interval for i in range(needlen): massives[current].append(prev + interval) prev += interval zapoln_bar.next() input("\nМассив заполнен") except: input("Что-то сломалось. Скорее всего, у вас нет массивов") def fill_user(): global massives global current global fill_mode needlen = None while needlen == None: try: needlen = int(input('Введите, сколько элементов массива вы будете вводить и программа засунет их ♂deep♂ в массив: ')) except: print("Введите число и не ломайте программу, я ее мозгами писал") try: if fill_mode == 'replace': massives[current] = [] for i in range(needlen): add_this = None while add_this == None: try: add_this = int(input()) except: print("Введите число и не ломайте программу, я ее мозгами писал") massives[current].append(add_this) input("Массив заполнен") except: input("Что-то сломалось. Скорее всего, у вас нет массивов") def sum_massives(): global massives global current input('Нажмите Enter, чтобы выбрать первый массив') massives_menu = {} for massive in list(massives): massives_menu[massive] = 'ezztui_return_value' first = ezztui.menu(massives_menu)[0] input('Нажмите Enter, чтобы выбрать второй массив') second = ezztui.menu(massives_menu)[0] print('Назовите новый массив.\n' 'Напомним, придумывайте основательное и глубокое название.\n' 'Не делайте название на 70 слайдов, ведь его сложно прочитать\n') name = input('Введите название: ') massives[name] = massives[first] + massives[second] def guess_game(): input('Это игра "угадай массив"\n' 'Тут вы должны угадать массив, зная его длину\n' 'Потом вы увидите совпадение с оригинальным массивом в процентах\n' 'Порядок в массиве не считается') length = random.randint(5, 10) input("Ваша задача ввести массив из " + str(length) + " чисел от 0 до 100") generated = list() for i in range(length): generated.append(random.randint(0, 100)) users = list() for i in range(length): add_this = None while add_this == None: try: add_this = int(input("Введите число: ")) except: print("Введите число и не ломайте программу, я ее мозгами писал") users.append(add_this) input("Ваш массив заполнен! Пришло время узнать, насколько вы ванга") print("Наш массив - " + str(generated)) sovpalo = len(list(set(users) & set(generated))) percent = (sovpalo/length) * 100 print("В двух массивах совпало " + str(sovpalo) + "! Это около " + str(percent) + "%") input("Чё, ванга?" if percent >= 70 else "Немного не угадал" if percent >= 50 else "Меньше половины" if percent >= 30 else "Не ванга") def sum_game(): input('Это игра "посчитай сумму"\n' 'Тут вы должны сложить все элементы массива и ввести сумму\n' 'Потом вы увидите правильный ответ') length = random.randint(5, 10) input("Ваша задача сложить массив из " + str(length) + " чисел от 0 до 10") generated = list() for i in range(length): generated.append(random.randint(0, 10)) real_sum = sum(generated) usr_sum = None print(generated) while usr_sum == None: try: usr_sum = int(input("Сложите все числа и введите число: ")) except: print("Введите число и не ломайте программу, я ее мозгами писал") print("Правильный ответ - " + str(real_sum)) input("Ты победил! Ответ правильный!" if usr_sum == real_sum else "Ответ неправильный(") def about(): ezztui.center_message("©KOTIKOT, script by BarsTiger") ezztui.center_multiline(["Симулятор заполнения массива", "Собрано по крупицам на Python 3.9, меню основано на ezztui (by BarsTiger)", "За перевод и локализацию спасибо KorvusTeam", "По вопросам насчет заполнения массивов пишите на почту entin@dlit.dp.ua", "Остальные вопросы задавайте по адресу kozlova_t@dlit.dp.ua", "Пожалуйста, не задавайте потусторонних вопросов о сухариках"]) def korvusTeam(): ezztui.center_multiline(["Спасибо KorvusTeam за русскую локализацию!", "Она была собрана по крупицам командой Korvus", "Перевод максимально основательный, глубокий и многосторонний", "Вы можете заказать переводы для своих приложений у Korvus"]) ezztui.center_multiline([' .......... ..... ..... ...... ........... ..... .......... ....................... .......... ............', ' .@BBBBBBBBS.SBBBB* BBBBB. SBBBB&!!@BBBBB&BBB# .@BBB&. !#BBBBBBBB# *#BBBBBBBBBB#SBBBBBBBBB% *#BBBBBBBBS$ %BBBBBBBBBB@.', ' %BBBBBBBBB@ &BBBB* BBBBB .#BBBB@**@BBBBS%SBB#.*@BBB$ %BBBBBBBBB@ &BBBBBSBBBBB$@BBBBBBBS@! #BBBBBSBBBBB !BBBBBSBBBBB%', ' *BBBB& &BBS$%@BBBBB !#BBBB&$$&BBBB&.&BB#!$#BBS! $BBB%@BBBB& @BBBB. SBBBB. &BBBB* &BBBB! BBBBB !BBBB@ @BBBB*', ' *BBBB& &BB#%#BBBBBB *#BBBBB##SBBBB#*$SBS@SBBS%. !@BBB!%BBBB& &BBBB* BBBBB &BBBB* &BBBB! BBBBB !BBBB@ @BBBB*', ' *BBBB& &BBBSBBSSBBB %#BBBSBBBBSBBB#*!*BBBBBB#. *&BBB.%BBBB& @BBBBBBBBBBB. &BBBB% &BBBB! BBBBB !BBBBS@SBBBB%', ' *BBBB& &BBBBBS$&BBB @SBB#%#BB#%#BBS$. SBBBBB@ SBBBB *BBBB& .$BBBBBBBBBB. &BBBB% &BBBB! BBBBB !BBBBBBBBBBS*', ' *BBBB& &BBBB&%%&BBB @SBB#!#BB#!#BBB&. *&BBB@! !BBBB# !BBBB& %BBB$*BBBBB. &BBBB* &BBBB! BBBBB !BBBB#!!!*!.', ' %BBBBBBBBB& &BBBB* SBBBB !BBBB&.&BB&.&BBBB* *&BBB* .%BBBS@ *BBBB& @BBBB* BBBBB. &BBBB% #BBBBBSBBBBB !BBBB& ', ' !&BBBBBBBBS.SBBBB* BBBBB %BBBBS.SBBS.SBBBB% @BBBB. !@BBB#% %BBBB# #BBBB! BBBBB. SBBBB$ %#BBBBBBBBB$ %BBBBS ', '', ' .BBBBB%.!SBBBB$ .%BBBBBBB@! $SBBBBBBBB*!@BBBBBBBBS.SBBBB* BBBBB *BBBBBBBBBB@. *#BBBBBB#* ', ' *BBBBB%**#BBBB$ .$SBBBBBB#% .BBBBBBBBBS.%BBBBBBBBB@ &BBBB* BBBBB !BBBBBSBBBBB% %&BBBBBBS@ ', ' .*BBBBB@$$SBBBB$. !#BB###BBB@ .BBBBB *BBBB& &BBS$%@BBBBB !BBBB$ $BBBB* &SBS##SBB# ', ' .%BBBBBS##BBBBB@! %BBB@$$SBB# .BBBBB %BBBB& &BB#%#BBBBBB !BBBB#!#BBBB! BBB&$$&BBB. ', ' !$BBBSSBBBBSBBB@! %BBB@%*#BB#. BBBBB. %BBBB& &BBBSBBSSBBB !BBBBBBBBB&! .BBB&%*@BBB* ', ' *&BBB@$BBB@$BBB#%!$BBBS##BBB#! BBBBB %BBBB& &BBBBBS$&BBB !BBBB#%#BBS#*!BBBBS#SBBB%. ', ' *&BBB$*BBB$*BBB#$!$BBBBBBBBBS% BBBBB *BBBB& &BBBB&%%&BBB !BBBB@ @BBBB$!BBBBBBBBBB@! ', ' &BBBB%!BBB%!BBBBB$&BBB%!!#BBS@. BBBBBBBBBS.%BBBBBBBBB& &BBBB* SBBBB !BBBBBSBBBBB&$BBB@!!$BBB&% ', ' SBBBB$!BBB$!BBBBB#SBBB* .SBBB#! @BBBBBBBBB*!&BBBBBBBBS.SBBBB* BBBBB *BBBBBBBBBB&@#BBB@ @BBBS$ ', ' ...... .... .......... ..... .......... .......... ..... ..... ................. ...... ', ' Спасибо KorvusTeam за перевод на русский ']) ezztui.cls() while True: choice = ezztui.menu(massivmenu) if choice[0] == 'Управление массивами': if choice[1] == 'Создать массив': ezztui.cls() create_massive() elif choice[1] == 'Выбрать текущий массив': ezztui.cls() choose_current() input("Теперь вы работаете с массивом " + current) elif choice[1] == 'Очистить массив': ezztui.cls() clear() input("Массив очищен") elif choice[1] == 'Удалить массив': ezztui.cls() delete() input("Массив удален") elif choice[1] == 'Управление основательными массивами': if choice[2] == 'Сохранить массивы глубоко на диск': ezztui.cls() save_disk('replace' if choice[3] == 'Сохранить с заменой' else 'merge') input("Закладка массива произошла") if choice[2] == 'Срезик массивов с диска': ezztui.cls() read_disk('replace' if choice[3] == 'Срезик с заменой' else 'merge') input("Закладку массива нашли и используют в металлургии") elif choice[0] == 'Заполнение массивов': if choice[1] == 'Режим заполнения': ezztui.cls() fill_mode = 'add' if choice[2] == 'Добавление' else 'replace' print('Используется метод "' + choice[2] + '" при заполнении') input() elif choice[1] == 'Заполнить массив случайными числами': ezztui.cls() fill_random() elif choice[1] == 'Заполнить массив по заданному интервалу': ezztui.cls() fill_interval() elif choice[1] == 'Заполнить массив вручную по крупицам': ezztui.cls() fill_user() elif choice[0] == 'Вывод массивов': if choice[1] == 'Вывести массив по одному элементу': ezztui.cls() try: for i in massives[current]: print(i) input() except: print("Возможно, у вас нет массивов или еще что-то не так") input("Не ломайте прогу, я ее по крупицам писал") elif choice[1] == 'Вывести массив одной строчкой': ezztui.cls() try: massiveline = '' for i in massives[current]: massiveline += str(i) + " " print(massiveline) input() except: print("Возможно, у вас нет массивов или еще что-то не так") input("Не ломайте прогу, я ее по крупицам писал") elif choice[1] == 'Вывести массив как список': ezztui.cls() try: print(massives[current]) input() except: print("Возможно, у вас нет массивов или еще что-то не так") input("Не ломайте прогу, я ее по крупицам писал") elif choice[0] == 'Действия с массивами': if choice[1] == 'Сложение массивов': ezztui.cls() sum_massives() elif choice[1] == 'Перемешать массив': ezztui.cls() try: random.shuffle(massives[current]) input('Кристалічну ґратку массива зруйновано') except: print("Возможно, у вас нет массивов или еще что-то не так") input("Не ломайте прогу, я ее по крупицам писал") elif choice[1] == 'Отсортировать массив': ezztui.cls() try: if choice[2] == 'По возрастанию': massives[current] = sorted(massives[current]) elif choice[2] == 'По убыванию': massives[current] = sorted(massives[current], reverse=True) input('Кристалічну ґратку массива відновлено') except: print("Возможно, у вас нет массивов или еще что-то не так") input("Не ломайте прогу, я ее по крупицам писал") elif choice[0] == 'Игры': if choice[1] == 'Игра "угадай массив"': ezztui.cls() guess_game() elif choice[1] == 'Игра "посчитай сумму" - на развитие толковейшей головы': ezztui.cls() sum_game() elif choice[0] == 'О программе': ezztui.cls() about() elif choice[0] == 'Выход' and choice[1] == 'KorvusTeam': ezztui.cls() korvusTeam()