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