# Общее контрольное задание по теме 8 Степанов Артём, А-02-23 ## Задание Разработайте программу, состоящую из трех модулей: * Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. * Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. * Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. ## Решение ```py >>> # Содержимое Module1 >>> def readList(filename): numList = [] with open(filename, "r") as file: for line in file: for num in line.strip().split(): numList.append(float(num)) return numList >>> >>> # Содержимое Module1 >>> import math def calculateCorrelation(list1, list2): if not list1 or not list2: print("Ошибка: Список не может быть пустым") return None numerator = 0 sum1 = 0 sum2 = 0 n = min(len(list1), len(list2)) mean1 = sum(list1[:n]) / n mean2 = sum(list2[:n]) / n for i in range(n): numerator += (list1[i] - mean1) * (list2[i] - mean2) sum1 += (list1[i] - mean1) ** 2 sum2 += (list2[i] - mean2) ** 2 denominator = math.sqrt(sum1 * sum2) if denominator == 0: print("Ошибка: Деление на ноль") return None return numerator / denominator >>> >>> # Содержимое Module1 >>> import os, Module1, Module2 for i in range(1, 3): while True: filename = os.path.abspath(input(f"Введите имя {i}-го файла: ")) if not os.path.isfile(filename): print("Ошибка: Введено неверное имя файла") continue newList = Module1.readList(filename) if not newList: print("Ошибка: В данном файле содержится пустой список значений") continue globals() [f"list{i}"] = newList break correlation = Module2.calculateCorrelation(list1, list2) if correlation != None: print(f"Коэффициент корреляции равен: {correlation:.3f}") >>> >>> # Результат работы программы >>> >>> import os >>> os.chdir("C:\\Users\\User\\Desktop\\StepanovAV\\python-labs\\TEMA8\\task") >>> import Module3 Введите имя 1-го файла: file1.txt Введите имя 2-го файла: file2.txt Коэффициент корреляции равен: 0.962 ```