# Общее контрольное задание по теме 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 ``` ```py # Содержимое Module2 import math def correlation(list1, list2): if not list1 or not list2: print("Ошибка: Список не может быть пустым") return None chislitel = 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): chislitel += (list1[i] - mean1) * (list2[i] - mean2) sum1 += (list1[i] - mean1) ** 2 sum2 += (list2[i] - mean2) ** 2 znamenatel = math.sqrt(sum1 * sum2) if znamenatel == 0: print("Ошибка: Деление на ноль") return None return chislitel / znamenatel ``` ```py # Содержимое Module3 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.correlation(list1, list2) if correlation != None: print(f"Коэффициент корреляции равен: {correlation:.3f}") ``` Результат работы программы при разных условиях file1.txt : ```py 1 2 3 4 7 5 ``` file2.txt : ```py ``` ```py >>> # Результат работы программы >>> import os >>> os.chdir("C:\\Users\\Дружок\\Desktop\\ПОАС\\python-labs\\TEMA8\\task") >>> import Module3 Введите имя 1-го файла: file1.txt Введите имя 2-го файла: file2.txt Ошибка: В данном файле содержится пустой список значений Введите имя 2-го файла: file1.txt Коэффициент корреляции равен: 1.000 ``` 2 случай file1.txt : ```py 1 2 3 4 7 5 ``` file2.txt : ```py 0 ``` ```py >>> # Результат работы программы >>> sys.modules.pop("Module3") >>> import Module3 Введите имя 1-го файла: file1.txt Введите имя 2-го файла: file2.txt Ошибка: Деление на ноль ``` 3 случай file1.txt : ```py 1 2 3 4 7 5 ``` file2.txt : ```py 9 6 8 2 4 5 ``` ```py >>> # Результат работы программы >>> sys.modules.pop("Module3") >>> import Module3 Введите имя 1-го файла: file1.txt Введите имя 2-го файла: file2.txt Коэффициент корреляции равен: -0.669 ```