# Выполнение модульного задания Филиппов Даниил Юрьевич, А-01-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 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') # Файл с числами > KK file_2 = file.replace('.txt', '2.txt') # Файл с числами ≤ KK print("\nИсходный файл:") read_1 = MOD1.func_2(file) 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 os.path.exists(file_1): read_2 = MOD1.func_2(file_1) 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 os.path.exists(file_2): read_3 = MOD1.func_2(file_2) 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}") ``` 3. Модуль MOD0.py ```py import MOD2 import pickle filename = input("Введите имя файла для сохранения в бинарный: ") numbers = [] with open(filename, 'r') as f: for line in f: for x in line.split(): numbers.append(float(x)) with open("RES2a.bin", 'wb') as f: pickle.dump(numbers, f) print(f"\nДанные сохранены в RES2a.bin") print(f"Записано {len(numbers)} чисел") ``` 4. Результаты Для файла data.txt: ```py import MOD0 Введите имя файла: data.txt Пороговое значение KK: 12 Исходный файл: Среднее: 24.81 Медиана: 21.50 От 3.10 до 60.00 Отклонение: 14.83 Файл с числами > KK: Среднее: 29.28 Медиана: 27.10 От 12.40 до 60.00 Отклонение: 13.02 Файл с числами ≤ KK: Среднее: 6.92 Медиана: 7.05 От 3.10 до 10.50 Отклонение: 3.38 Введите имя файла для сохранения в бинарный: data.txt Данные сохранены в RES2a.bin Записано 20 чисел ``` Для файла dat.txt ```py >>> import MOD0 Введите имя файла: dat.txt Пороговое значение KK: 40 Исходный файл: Среднее: 329.17 Медиана: 325.00 От 50.00 до 650.00 Отклонение: 187.64 Файл с числами > KK: Среднее: 329.17 Медиана: 325.00 От 50.00 до 650.00 Отклонение: 187.64 Файл с числами ≤ KK: Введите имя файла для сохранения в бинарный: dat.txt Данные сохранены в RES2a.bin Записано 12 чисел ```