lab5

Форк
0
/
lb5.py 
158 строк · 6.5 Кб
1
from calculator import Calculator
2
from generator import Generator
3

4
import os
5
import sys
6
from enum import Enum
7

8
import matplotlib.pyplot as plt
9

10

11
class Commands(Enum):
12
    B1 = "b1"
13
    C1 = "c1"
14
    D1 = "d1"
15
    E1 = "e1"
16
    B2 = "b2"
17
    C2 = "c2"
18
    D2 = "d2"
19
    E2 = "e2"
20
    FROM_FILE = "from_file"
21
    FROM_K = "from_k"
22
    DATA = "data"
23
    EXIT = "exit"
24
    HELP = "help"
25
    GEN = "gen"
26

27

28
def com_contains_str_com(com: str) -> bool:
29
    return com in (c.value for c in Commands)
30

31

32
def get_data_from_file(path: str) -> list[...]:
33
    with open(path, 'r') as file:
34
        str_data = file.read().replace(' ', '').replace('\n', '')
35
        return [int(n) for n in str_data.split(',')]
36

37

38
def write_data_to_file(data: list[...]) -> str:
39
    with open("gen_data.txt", 'w') as file:
40
        file.write(', '.join(map(str, data)))
41
    path = os.path.abspath(sys.argv[0])
42
    return path[0: path.rfind('\\')]
43

44

45
def check_data(data: list[...]) -> bool:
46
    if data is None:
47
        print("Статистические данные не введены.")
48
        return False
49
    return True
50

51

52
# if __name__ == "__main__":
53
#     ## ошибка точности
54
#     data = [1, 2, 3, 4]  # test data
55
#     calc = Calculator()
56
#     calc.solveB2(data, 10)
57

58
if __name__ == "__main__":
59
    print("------------------------------------------\n"
60
          "Программа решение лабораторной работы №5.\n"
61
          "Разработчики: Рыжков М.М, Матвеев С.А.\n"
62
          "Группа: ПрИн-268.\n"
63
          "Волгоград 2024.\n"
64
          "-----------------------------------------")
65
    calc = Calculator()
66
    data = None
67
    while True:
68
        com = input("Введите команду\n")
69
        com = com.replace(' ', '')
70
        command = Commands(com) if com_contains_str_com(com) else None
71

72
        match command:
73
            case Commands.B1:
74
                if check_data(data):
75
                    print("______решение B1______")
76
                    print(calc.solveB1(data))
77
                    print("----------------------")
78
            case Commands.C1:
79
                if check_data(data):
80
                    print("______решение C1______")
81
                    for t in calc.solveC1(data):
82
                        print(t)
83
                    print("----------------------")
84
                    plt.show()
85
            case Commands.D1:
86
                if check_data(data):
87
                    print("______решение D1______")
88
                    ans = calc.solveD1(data)
89
                    print(ans[0])
90
                    for f in ans[1]:
91
                        print(f)
92
                    print("----------------------")
93
                    plt.show()
94
            case Commands.E1:
95
                if check_data(data):
96
                    print("______решение E1______")
97
                    for i in calc.solveE1(data):
98
                        print(i)
99
                    print("----------------------")
100
            case Commands.B2:
101
                if check_data(data):
102
                    print("______решение B2______")
103
                    intervals = int(input("Введите количество интервалов.\n"))
104
                    assert intervals > 0, "Количество интервалов должно быть > 0."
105
                    print(calc.solveB2(data, intervals))
106
                    print("----------------------")
107
                    plt.show()
108
            case Commands.C2:
109
                if check_data(data):
110
                    print("______решение C2______")
111
                    intervals = int(input("Введите количество интервалов.\n"))
112
                    assert intervals > 0, "Количество интервалов должно быть > 0."
113
                    print(calc.solveC2(data, intervals))
114
                    print("----------------------")
115
                    plt.show()
116
            case Commands.FROM_FILE:
117
                path = input("Введите путь до файла.\n")
118
                try:
119
                    data = get_data_from_file(path)
120
                except Exception:
121
                    print("Невозможно прочитать файл.")
122
                    data = None
123
            case Commands.FROM_K:
124
                str_data = input("Введите статистические данные.\n")
125
                str_data = str_data.replace(' ', '').split(',')
126
                data = list(map(int, str_data))
127
            case Commands.DATA:
128
                if check_data(data):
129
                    print(data)
130
            case Commands.HELP:
131
                print(
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
                )
149
            case Commands.GEN:
150
                gen_data = Generator.generate_list_of_number(
151
                    80, values=(-100, 100), freq=(10, 20)
152
                )
153
                print(f"Файл случайных чиселв сгенерирован в папке {write_data_to_file(gen_data)}")
154
            case Commands.EXIT:
155
                print("Программа прекращает работу.")
156
                break
157
            case _:
158
                print("Команда не распознана")
159

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.