# Индивидуальное контрольное задание по модулю 3 Киреев Юрий А-02-23 ## Задание 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу; - функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции. 2) Создайте еще один модуль М2, в котором должны: - запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса; - запрос порогового значения КК; - вызов функции 1 с указанным именем; - трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов. 3) Создайте модуль М0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin. 4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу. ## Решение Модуль M1: ```py import statistics def raspil(filename, KK): numbers = [] with open(filename,'r') as fp: for line in fp: parts = line.split() for part in parts: numbers.append(float(part)) file_name = filename.split(".")[0] new_name1 = file_name + '1' + '.txt' new_name2 = file_name + '2' + '.txt' with open (new_name1, 'w') as f1, \ open (new_name2, 'w') as f2: for x in numbers: if x > KK: f1.write(str(x)+" ") else: f2.write(str(x)+" ") return numbers def raschet(filename): numbers = [] with open(filename,'r') as fp: for line in fp: parts = line.split() for part in parts: numbers.append(float(part)) mean_val = statistics.mean(numbers) median_val = statistics.median(numbers) min_val = min(numbers) max_val = max(numbers) std_val = statistics.stdev(numbers) return mean_val, median_val, min_val, max_val, std_val ``` Модуль M2: ```py import os import M1 while True: filename = input("Введите имя файла:") if os.path.isfile(filename): break else: print("Такого файла не существует, повторите ввод:") KK = float(input("Введите пороговое значение:")) numbers = M1.raspil(filename, KK) print("Данные из файла:", numbers) file_name = filename.split(".")[0] file1 = file_name + '1' + '.txt' file2 = file_name + '2' + '.txt' files = (filename, file1, file2) for file in files: mean_val, median_val, min_val, max_val, std_val = M1.raschet(file) print (f"Среднее: {mean_val}") print (f"Медиана: {median_val}") print (f"Минимальное: {min_val}") print (f"Максимальное: {max_val}") print (f"Стандартное отклонение: {std_val}") ``` Модуль M0: ```py import pylab import pickle import M2 pylab.plot(M2.numbers) pylab.title('Исходные данные') pylab.xlabel('Индекс') pylab.ylabel('Значение') pylab.show() with open('RES2a.bin', 'w') as RES: pickle.dump(M2.numbers, RES) ``` Файлы: super_test_file.txt ```py -1 2 -3 4 -5 6 -7 8 -9 10 -11 12 -13 14 -15 16 -17 18 -19 20 ``` test_file.txt ```py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ``` Проверка super_test_file ```py Введите имя файла:super_test_file.txt Введите пороговое значение:0 Данные из файла: [-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, 12.0, -13.0, 14.0, -15.0, 16.0, -17.0, 18.0, -19.0, 20.0] Среднее: 0.5 Медиана: 0.5 Минимальное: -19.0 Максимальное: 20.0 Стандартное отклонение: 12.2796365452814 Среднее: 11.0 Медиана: 11.0 Минимальное: 2.0 Максимальное: 20.0 Стандартное отклонение: 6.0553007081949835 Среднее: -10.0 Медиана: -10.0 Минимальное: -19.0 Максимальное: -1.0 Стандартное отклонение: 6.0553007081949835 ``` Проверка test_file ```py Введите имя файла:test_file.txt Введите пороговое значение:5 Данные из файла: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0] Среднее: 10.5 Медиана: 10.5 Минимальное: 1.0 Максимальное: 20.0 Стандартное отклонение: 5.916079783099616 Среднее: 13.0 Медиана: 13.0 Минимальное: 6.0 Максимальное: 20.0 Стандартное отклонение: 4.47213595499958 Среднее: 3.0 Медиана: 3.0 Минимальное: 1.0 Максимальное: 5.0 Стандартное отклонение: 1.5811388300841898 ```