From 67b160433ff73951eaaab6253a97dfa84a8cd10f Mon Sep 17 00:00:00 2001 From: Dmitry Kolomeytsev Date: Sun, 30 Nov 2025 00:37:53 +0300 Subject: [PATCH] task done --- TEMA8/Module1.py | 7 ++++ TEMA8/Module2.py | 29 ++++++++++++++++ TEMA8/Module3.py | 24 ++++++++++++++ TEMA8/file1.txt | 4 +++ TEMA8/file2.txt | 1 + TEMA8/task.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 TEMA8/Module1.py create mode 100644 TEMA8/Module2.py create mode 100644 TEMA8/Module3.py create mode 100644 TEMA8/file1.txt create mode 100644 TEMA8/file2.txt diff --git a/TEMA8/Module1.py b/TEMA8/Module1.py new file mode 100644 index 0000000..3548aae --- /dev/null +++ b/TEMA8/Module1.py @@ -0,0 +1,7 @@ +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 diff --git a/TEMA8/Module2.py b/TEMA8/Module2.py new file mode 100644 index 0000000..bc78b72 --- /dev/null +++ b/TEMA8/Module2.py @@ -0,0 +1,29 @@ +import math + + +def calculateCorrelation(list1, list2): + if not list1 or not list2: + print("Ошибка: список не может быть пустым") + return None + + n = min(len(list1), len(list2)) + mean1 = sum(list1[:n]) / n + mean2 = sum(list2[:n]) / n + + numerator = 0 + sum1 = 0 + sum2 = 0 + + for i in range(n): + d1 = list1[i] - mean1 + d2 = list2[i] - mean2 + numerator += d1 * d2 + sum1 += d1 ** 2 + sum2 += d2 ** 2 + + denominator = math.sqrt(sum1 * sum2) + if denominator == 0: + print("Ошибка: деление на ноль") + return None + + return numerator / denominator diff --git a/TEMA8/Module3.py b/TEMA8/Module3.py new file mode 100644 index 0000000..72f5096 --- /dev/null +++ b/TEMA8/Module3.py @@ -0,0 +1,24 @@ +import os +import Module1 +import 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 is not None: + print(f"Коэффициент корреляции равен: {correlation:.3f}") diff --git a/TEMA8/file1.txt b/TEMA8/file1.txt new file mode 100644 index 0000000..9358306 --- /dev/null +++ b/TEMA8/file1.txt @@ -0,0 +1,4 @@ +1 2 +3 +4 +7 5 \ No newline at end of file diff --git a/TEMA8/file2.txt b/TEMA8/file2.txt new file mode 100644 index 0000000..92e475a --- /dev/null +++ b/TEMA8/file2.txt @@ -0,0 +1 @@ +6 7 8 9 10 \ No newline at end of file diff --git a/TEMA8/task.md b/TEMA8/task.md index b11d8e4..16e7c02 100644 --- a/TEMA8/task.md +++ b/TEMA8/task.md @@ -4,4 +4,88 @@ ## Задание -## Решение \ No newline at end of file +Разработайте программу, состоящую из трех модулей: + +* Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу. +* Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу. +* Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. + +Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы. + +## Решение + +```py +>>> # Содержимое Module1.py +>>> +>>> 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 +>>> +>>> # Содержимое Module2.py +>>> +>>> import math +... +>>> def calculateCorrelation(list1, list2): +... if not list1 or not list2: +... print("Ошибка: список не может быть пустым") +... return None +... +... n = min(len(list1), len(list2)) +... mean1 = sum(list1[:n]) / n +... mean2 = sum(list2[:n]) / n +... +... numerator = 0 +... sum1 = 0 +... sum2 = 0 +... +... for i in range(n): +... d1 = list1[i] - mean1 +... d2 = list2[i] - mean2 +... numerator += d1 * d2 +... sum1 += d1 ** 2 +... sum2 += d2 ** 2 +... +... denominator = math.sqrt(sum1 * sum2) +... if denominator == 0: +... print("Ошибка: деление на ноль") +... return None +... return numerator / denominator +>>> +>>> # Содержимое Module3.py +>>> +>>> 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 is not None: +... print(f"Коэффициент корреляции равен: {correlation:.3f}") +>>> +>>> # Результат работы программы +>>> +>>> import os +>>> os.chdir("/home/s0ba4/mpei/python-labs/TEMA8/task") +>>> import Module3 + Введите имя 1-го файла: file1.txt + Введите имя 2-го файла: file2.txt + Коэффициент корреляции равен: 0.962 +```