random/function.py

216 lines
8.6 KiB
Python
Raw Normal View History

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