# Тест модуля 3 Похил Анастасия, А-02-23, вариант 22 ## Задание 1) Создайте модуль Мm1, содержащий две функции: - функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу; - функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции. 2) Создайте еще один модуль Мm2, в котором должны: - запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса; - запрос порогового значения КК; - вызов функции 1 с указанным именем; - трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов. 3) Создайте модуль Мm0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin. 4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу. ## Решение ```py #Mmod1 import statistics def funkciya1(imya_faila, KK): f = open(imya_faila, 'r') stroki = f.readlines() f.close() vse_chisla = [] for stroka in stroki: slova = stroka.split() for slovo in slova: if slovo: chislo = float(slovo) vse_chisla.append(chislo) if imya_faila.endswith('.txt'): osnova = imya_faila[:-4] else: osnova = imya_faila imya1 = osnova + '1.txt' imya2 = osnova + '2.txt' f1 = open(imya1, 'w') f2 = open(imya2, 'w') for chislo in vse_chisla: if chislo > KK: f1.write(str(chislo) + '\n') else: f2.write(str(chislo) + '\n') f1.close() f2.close() return vse_chisla def funkciya2(imya_faila): f = open(imya_faila, 'r') stroki = f.readlines() f.close() chisla = [] for stroka in stroki: slova = stroka.split() for slovo in slova: if slovo: chisla.append(float(slovo)) if len(chisla) == 0: return None srednee = statistics.mean(chisla) mediana = statistics.median(chisla) minimum = min(chisla) maximum = max(chisla) std = statistics.stdev(chisla) return [srednee, mediana, minimum, maximum, std] ``` 2) ```py # Модуль Мmod2 import Mmod1 import os while True: imya = input("Введите имя файла с данными: ") if os.path.exists(imya): break else: print(f"Ошибка: файл '{imya}' не найден!") KK_str = input("пороговое значение КК: ") KK = float(KK_str) vse_chisla = Mmod1.funkciya1(imya, KK) print("Для исходного файла:") rez1 = Mmod1.funkciya2(imya) if rez1: print(rez1[0]) print({rez1[1]) print(rez1[2]) print(rez1[3]) print(rez1[4]) else: print(" ") if imya.endswith('.txt'): osnova = imya[:-4] else: osnova = imya imya1 = osnova + '1.txt' print(f"Для файла '{imya1}':") if os.path.exists(imya1): rez2 = Mmod1.funkciya2(imya1) if rez2: print(rez2[0]) print(rez2[1]) print(rez2[2]) print(rez2[3]) print(rez2[4]) else: print("") imya2 = osnova + '2.txt' print(f"Для файла '{imya2}':") if os.path.exists(imya2): rez3 = Mmod1.funkciya2(imya2) if rez3: print(rez3[0]) print(rez3[1]) print(rez3[2]) print(rez3[3]) print(rez3[4]) else: print("") ``` 3) ````py #Mmod0 import Mmod2 import matplotlib.pyplot as plt with open("data.txt", "r") as f: d = [float(x) for line in f for x in line.split()] plt.plot(d) plt.show() with open("RES2a.bin", "wb") as f: f.write(struct.pack("i", len(d))) for x in d: f.write(struct.pack("f", x)) ``` # Результат ```py Введите имя файла с данными: data.txt пороговое значение КК: 6 Для исходного файла: 10.5 10.5 1.0 20.0 5.916079783099616 Для файла 'data1.txt': 13.5 13.5 7.0 20.0 4.183300132670378 Для файла 'data2.txt': 3.5 3.5 1.0 6.0 1.8708286933869707 ``` ![](Fig1.PNG)