# Выполнение модульного задания Симанков Б., А-02-23 # Задание M3_2 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу; - функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции. 2) Создайте еще один модуль М2, в котором должны: - запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса; - запрос порогового значения КК; - вызов функции 1 с указанным именем; - трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов. 3) Создайте модуль М0 - главную программу, которая вызывает М2, и записывает данные в бинарный файл RES2a.bin. 4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу. # Решение 1. Модуль MOD1.py ```py def func_1 (file, KK):   """"Разделение чисел на два файла по пороговому значению KK"""   numbers=[]   with open(file, 'r') as f:   for line in f:   parts=line.split()   for x in parts:   num=float(x)   numbers.append(num)   file_1=[]   file_2=[]   for x in numbers:   if x>KK:   file_1.append(x)   else:   file_2.append(x)   name_1=file.replace('.txt', '1.txt')   name_2=file.replace('.txt', '2.txt')   with open(name_1, 'w') as f:   for x in file_1:   f.write(f"{x} ")   with open(name_2, 'w') as f:   for x in file_2:   f.write(f"{x} ")   return numbers def func_2 (file):   import statistics   import math   numbers=[]   with open(file, 'r') as f:   for line in f:   parts=line.split()   for x in parts:   num=float(x)   numbers.append(num)   sred=sum(numbers)/len(numbers)   mediana = statistics.median(numbers)   minimum = min(numbers)   maximum = max(numbers)   sum_kvadratov = 0   for x in numbers:   kvadrat = (x-sred)*(x-sred)   sum_kvadratov+=kvadrat   std=math.sqrt(sum_kvadratov/(len(numbers)-1))   return sred, mediana, minimum, maximum, std ``` 2. Модуль MOD2.py ```py import os import MOD1 def process_file(): while True: file = input("Введите имя файла: ") if os.path.exists(file): break print("Такого файла нет!") KK = float(input("Пороговое значение KK: ")) MOD1.func_1(file, KK) file_1 = file.replace('.txt', '1.txt') file_2 = file.replace('.txt', '2.txt') stats = [] read_1 = MOD1.func_2(file) if read_1: stats.append(('Исходный', read_1)) if os.path.exists(file_1): read_2 = MOD1.func_2(file_1) if read_2: stats.append(('> KK', read_2)) if os.path.exists(file_2): read_3 = MOD1.func_2(file_2) if read_3: stats.append(('≤ KK', read_3)) print("\nИсходный файл:") if read_1: a, b, c, d, e = read_1 print(f" Среднее: {a:.2f}") print(f" Медиана: {b:.2f}") print(f" От {c:.2f} до {d:.2f}") print(f" Отклонение: {e:.2f}") else: print(" Не удалось рассчитать статистику") print("\nФайл с числами > KK:") if read_2: a, b, c, d, e = read_2 print(f" Среднее: {a:.2f}") print(f" Медиана: {b:.2f}") print(f" От {c:.2f} до {d:.2f}") print(f" Отклонение: {e:.2f}") print("\nФайл с числами ≤ KK:") if read_3: a, b, c, d, e = read_3 print(f" Среднее: {a:.2f}") print(f" Медиана: {b:.2f}") print(f" От {c:.2f} до {d:.2f}") print(f" Отклонение: {e:.2f}") return file, stats ``` 3. Модуль MOD0.py ```py import pickle import MOD2 fname, stats_all = MOD2.process_file() with open("RES2a.bin", 'wb') as f: pickle.dump(stats_all, f) print(f"Сохранено статистик: {len(stats_all)}") ``` 4. Результаты Для файла data.txt: ```py >>> import MOD0 Введите имя файла: data.txt Пороговое значение KK: 10 Исходный файл: Среднее: 24.81 Медиана: 21.50 От 3.10 до 60.00 Отклонение: 14.83 Файл с числами > KK: Среднее: 28.18 Медиана: 25.80 От 10.50 до 60.00 Отклонение: 13.41 Файл с числами ≤ KK: Среднее: 5.73 Медиана: 5.20 От 3.10 до 8.90 Отклонение: 2.94 Исходный файл из MOD2: data.txt Сохранено статистик: 3 ```