# Модуль 3 варианть 2 Ефимова Людмила, А-03-23 Создайте модуль М1, содержащий две функции: - функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу; - функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции. ```py import math import statistics def func1(filename, KK): with open(filename, 'r', encoding = 'utf-8') as f: nums = [] for i in f: nums_line = list(map(float,line.strip().split())) nums.extend(nums_line) above = [] below = [] for n in nums: if n > KK: above.append(n) else: below.append(n) x = filename.split('.')[0] with open(x + '1.txt') as f: # запись в новый файл превышающих for num in above: f.write(str(num) +'\n') with open(x + '2.txt') as f: # запись в новый файл не превышающих for num in below: f.write(str(num) +'\n') return nums def func2(filename): with open(filename, 'r', encoding = 'utf-8') as f: nums = [] for i in f: nums_line = list(map(float,line.strip().split())) nums.extend(nums_line) n = len(nums) mean = sum(nums)/n median = statistics.median(nums) # медиана std = statistics.stdev(nums) # стандартное отклонение print(mean, median, min(nums), max(nums), std) return [mean, median, min(nums), max(nums), std] ``` Создайте еще один модуль М2, в котором должны: - запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса; - запрос порогового значения КК; - вызов функции 1 с указанным именем; - трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов. ```py import os from M1 import func1, func2 def main(): while True: filename = input("Исходный файл: ") if os.path.exists(filename): break print("Нет такого файла...") KK = float(input("Введите пороговое значение K: ")) data = func1(filename, KK) x = filename.split('.')[0] print("CТАТИСТИКИ") print("1. Исходный файл: ", func2(filename)) print("2. Выше порога: ", func2(x + '1.txt')) print("3. Ниже порога: ", func2(x + '2.txt')) return data ``` Создайте модуль М0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin. ```py import M2 import matplotlib.pyplot as plt import pickle if __name__ == "__main__": data = M2.main() print("ГРАФИК:") plt.figure(figsize=(12, 5)) plt.plot(numbers) plt.axhline(y=k, color='r') plt.title(f"Данные из файла: {filename}") plt.xlabel("Номер элемента") plt.ylabel("Значение") plt.grid(True) plt.show() with open("Res2a.bin", 'wb') as f: pickle.dump(data, f) ``` Подготовьте файл с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ним разработанную программу. Создала файл datatest.txt с содержимым ```py 10 20 30 20 22 33 60 70 80 90 15 23 25 27 76 5 12 34 67 36 ``` Результат работы программы ```py Введите имя файла (например: data.txt): datatest.txt Введите пороговое значение K: 23 СТАТИСТИКИ: 1. Исходный файл: Среднее: 37.75, Медиана: 28.50, Мин: 5.00, Макс: 90.00, Отклонение: 26.02 2. Выше порога: Среднее: 52.33, Медиана: 48.00, Мин: 25.00, Макс: 90.00, Отклонение: 23.73 3. Ниже порога: Среднее: 15.88, Медиана: 17.50, Мин: 5.00, Макс: 23.00, Отклонение: 6.45 ГРАФИК: Данные сохранены в файл 'Res2a.bin' ``` ![Скриншот построенного графика](Ris10.PNG) Содержимое файла above: ```py 30.0 33.0 60.0 70.0 80.0 90.0 25.0 27.0 76.0 34.0 67.0 36.0 ``` Содержимое файла below: ```py 10.0 20.0 20.0 22.0 15.0 23.0 5.0 12.0 ```