lab5
/
lb5.py
158 строк · 6.5 Кб
1from calculator import Calculator2from generator import Generator3
4import os5import sys6from enum import Enum7
8import matplotlib.pyplot as plt9
10
11class Commands(Enum):12B1 = "b1"13C1 = "c1"14D1 = "d1"15E1 = "e1"16B2 = "b2"17C2 = "c2"18D2 = "d2"19E2 = "e2"20FROM_FILE = "from_file"21FROM_K = "from_k"22DATA = "data"23EXIT = "exit"24HELP = "help"25GEN = "gen"26
27
28def com_contains_str_com(com: str) -> bool:29return com in (c.value for c in Commands)30
31
32def get_data_from_file(path: str) -> list[...]:33with open(path, 'r') as file:34str_data = file.read().replace(' ', '').replace('\n', '')35return [int(n) for n in str_data.split(',')]36
37
38def write_data_to_file(data: list[...]) -> str:39with open("gen_data.txt", 'w') as file:40file.write(', '.join(map(str, data)))41path = os.path.abspath(sys.argv[0])42return path[0: path.rfind('\\')]43
44
45def check_data(data: list[...]) -> bool:46if data is None:47print("Статистические данные не введены.")48return False49return True50
51
52# if __name__ == "__main__":
53# ## ошибка точности
54# data = [1, 2, 3, 4] # test data
55# calc = Calculator()
56# calc.solveB2(data, 10)
57
58if __name__ == "__main__":59print("------------------------------------------\n"60"Программа решение лабораторной работы №5.\n"61"Разработчики: Рыжков М.М, Матвеев С.А.\n"62"Группа: ПрИн-268.\n"63"Волгоград 2024.\n"64"-----------------------------------------")65calc = Calculator()66data = None67while True:68com = input("Введите команду\n")69com = com.replace(' ', '')70command = Commands(com) if com_contains_str_com(com) else None71
72match command:73case Commands.B1:74if check_data(data):75print("______решение B1______")76print(calc.solveB1(data))77print("----------------------")78case Commands.C1:79if check_data(data):80print("______решение C1______")81for t in calc.solveC1(data):82print(t)83print("----------------------")84plt.show()85case Commands.D1:86if check_data(data):87print("______решение D1______")88ans = calc.solveD1(data)89print(ans[0])90for f in ans[1]:91print(f)92print("----------------------")93plt.show()94case Commands.E1:95if check_data(data):96print("______решение E1______")97for i in calc.solveE1(data):98print(i)99print("----------------------")100case Commands.B2:101if check_data(data):102print("______решение B2______")103intervals = int(input("Введите количество интервалов.\n"))104assert intervals > 0, "Количество интервалов должно быть > 0."105print(calc.solveB2(data, intervals))106print("----------------------")107plt.show()108case Commands.C2:109if check_data(data):110print("______решение C2______")111intervals = int(input("Введите количество интервалов.\n"))112assert intervals > 0, "Количество интервалов должно быть > 0."113print(calc.solveC2(data, intervals))114print("----------------------")115plt.show()116case Commands.FROM_FILE:117path = input("Введите путь до файла.\n")118try:119data = get_data_from_file(path)120except Exception:121print("Невозможно прочитать файл.")122data = None123case Commands.FROM_K:124str_data = input("Введите статистические данные.\n")125str_data = str_data.replace(' ', '').split(',')126data = list(map(int, str_data))127case Commands.DATA:128if check_data(data):129print(data)130case Commands.HELP:131print(132"Список команд:\n"133"help - получить интрукцию к программе.\n"134"b1 - решить пункт b) задания 1.\n"135"c1 - решить пункт c) задания 1.\n"136"d1 - решить пункт d) задания 1.\n"137"e1 - решить пункт e) задания 1.\n"138"b2 - решить пункт b) задания 2.\n"139"c2 - решить пункт c) задания 2.\n"140"d2 - решить пункт d) задания 2.\n"141"e2 - решить пункт e) задания 2.\n"142"ВНИМАНИЕ: решение происходит только после загрузки данных из файла.\n"143"from_file - загрузить статистические данные из txt-файла.\n"144"from_k - ввести данные с клавиатуры.\n"145"data - введенные в программу статисические данные.\n"146"gen - сгенерировать файл случайных чисел.\n"147"exit - завершить работу программы.\n"148)149case Commands.GEN:150gen_data = Generator.generate_list_of_number(15180, values=(-100, 100), freq=(10, 20)152)153print(f"Файл случайных чиселв сгенерирован в папке {write_data_to_file(gen_data)}")154case Commands.EXIT:155print("Программа прекращает работу.")156break157case _:158print("Команда не распознана")159