from random import randint from colorama import init, Fore import numpy as np import random import os init(autoreset=True) # --------------------------заполнение-и-вывод-списка------------------------------------ def rand(): range1 = int(input(Fore.GREEN + "Введите длинну списка: " + Fore.RESET)) range2 = int(input(Fore.GREEN + "Введите предел чисел: " + Fore.RESET)) return random.sample(range(0, range2), range1) def print_table(masive, num_cols): massive = masive num_rows = len(massive) // num_cols + (len(massive) % num_cols > 0) for i in range(num_rows): row = massive[i * num_cols : (i + 1) * num_cols] row += [""] * (num_cols - len(row)) # добавляем пустые элементы до num_cols print((Fore.BLUE + "{:<7}" * num_cols).format(*row)) # -----------------------------вывод-графиков------------------------------------------ def real_graph(masive): # вещественный график=-=--=-=-=-=-=-= massive = masive max_height = max(massive) length = len(massive) for i in range(max_height, 0, -1): for q in range(0, length): if massive[q] >= i: print(Fore.RED + "[]", end="") else: print(Fore.RED + " ", end="") print(" ", Fore.BLUE + str(i)) def percentage_graph(masive, max_or_mean): # процентный график=-=--=-=-=-=-=-= massive = masive # нахождение высоты max_height = max(massive) / 20 # делит таблицу на 20 частей по 5% # нахождение длинны chunks = np.array_split(massive, 20) # Разбиваем массив на 20 частей max_values = np.zeros( 20 ) # Инициализируем массивы для хранения максимальных значений и их индексов max_indices = np.zeros(20) if max_or_mean == "arf": means = [ int(np.nanmean(chunk)) for chunk in chunks ] # вычисляем среднее арифметическое каждого подсписка elif max_or_mean == "max": for i, chunk in enumerate( chunks ): # Находим максимальное значение и его индекс в каждой части if len(chunk) > 0: max_index = np.argmax(chunk) max_indices[i] = i * len(chunk) + max_index else: print(Fore.RED + "Приятель, делай выбор!") return # строим график for i in range(21, 0, -1): index_height = int( (max_height * i) - max_height ) # создаёт индекс для сравнения высот for q in range(0, 20): if max_or_mean == "arf": value = means[q] elif max_or_mean == "max": index_lenght = max_indices[ q ] # создаёт индекс длинны для сравненияс высотой value = massive[int(index_lenght)] if len(massive) > 0 and value >= index_height: print(Fore.RED + "[]", end="") else: print(Fore.RED + " ", end="") print(" ", Fore.BLUE + str((i - 1) * 5), Fore.BLUE + "%") # -----------------------------назначение-настроек---------------------------------------------- def graf(show_graph): # параметр базового вывода графика while True: if show_graph is not None: print(Fore.GREEN + "Выводится ли график - ", Fore.BLUE + str(show_graph)) else: print(Fore.GREEN + "Выводится ли график - ", Fore.BLUE + "None") show_graph = input(Fore.GREEN + "Строить график? - yes или no\n" + Fore.RESET) if show_graph in ["yes", "no"]: break os.system("cls") print(Fore.RED + "Приятель, делай выбор!") return show_graph def type_graf(show_graph, max_or_mean): # параметр типа графика if show_graph == "yes": while True: if max_or_mean is not None: print(Fore.GREEN + "Тип графика - ", Fore.BLUE + str(max_or_mean)) else: print(Fore.GREEN + "Тип графика - ", Fore.BLUE + "None") max_or_mean = input( Fore.GREEN + "Строить график по арифметической сумме(arf)\nили высшим точкам(max)?\n" + Fore.RESET ) if max_or_mean in ["arf", "max"]: break os.system("cls") print(Fore.RED + "Приятель, делай выбор!") elif show_graph == "no": max_or_mean = "arf" return max_or_mean def num_column(num_cols): # параметр кол-ва столбцов таблице while True: try: if num_cols is not None: print(Fore.GREEN + "кол-во колнок - ", Fore.BLUE + str(num_cols)) else: print(Fore.GREEN + "кол-во колнок - ", Fore.BLUE + "None") num_cols = int( input( Fore.GREEN + "Укажите кол-во колнок в таблиц\n(не больше 10) - \n" + Fore.RESET ) ) except ValueError: os.system("cls") print(Fore.RED + "Приятель, числа надо вводить, ЧИСЛА!\nЗаново!") continue if 2 <= num_cols <= 10: break os.system("cls") print(Fore.RED + "Приятель, не больше 10!") return num_cols # -----------------------------menu-------------------------------------------------- def menu(show_graph, max_or_mean, num_cols): while True: os.system("cls") menu = input( Fore.GREEN + "\nДля продолжения нажмите Enter.\nЕсли хотите изменить настройки введите change\nпосмотреть настройки - set\nЕсли хотите завершить работу введите end.\n\n " + Fore.RED ) match menu: case "": os.system("cls") breaker = None return breaker, show_graph, max_or_mean, num_cols case "set": setings(show_graph, max_or_mean, num_cols) case "change": show_graph, max_or_mean, num_cols = changes( show_graph, max_or_mean, num_cols ) case "end": os.system("cls") print( Fore.GREEN + "Спасибо за то, что воспользовались услугами\nкомпании ООО'Random'.\nС вас много деняг." ) breaker = False return breaker, show_graph, max_or_mean, num_cols case other: pass def setings(show_graph, max_or_mean, num_cols): while True: os.system("cls") print(Fore.GREEN + "Выводится ли график - ", Fore.BLUE + str(show_graph)) print(Fore.GREEN + "Тип графика - ", Fore.BLUE + str(max_or_mean)) print(Fore.GREEN + "кол-во колнок - ", Fore.BLUE + str(num_cols)) menu = input(Fore.GREEN + "\nДля возвращения нажмите Enter. ") break def changes(show_graph, max_or_mean, num_cols): while True: os.system("cls") change = input( Fore.GREEN + "Если хотите выводить/не выводить график\nвведите graf\nЕсли хотите изменить тип графика\nвведите type\nЕсли хотите изменить кол-во столбцов\nвведите col\nЕсли хотите вернуться к работе то\nвведите cont\n" + Fore.RED ) match change: case "graf": show_graph = graf(show_graph) case "type": max_or_mean = type_graf(show_graph, max_or_mean) case "col": num_cols = num_column(num_cols) case "cont": return show_graph, max_or_mean, num_cols