From 1360e31c87769da40e2db088d76443f54de8f312 Mon Sep 17 00:00:00 2001 From: BezhenarAN Date: Sun, 30 Nov 2025 21:49:38 +0300 Subject: [PATCH] =?UTF-8?q?new:=20=D0=9E=D0=9A=D0=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA8/task.md | 138 ++++++++++++++++++++++++++++++++++++++++++ TEMA8/task/Module1.py | 7 +++ TEMA8/task/Module2.py | 20 ++++++ TEMA8/task/Module3.py | 18 ++++++ TEMA8/task/file1.txt | 4 ++ TEMA8/task/file2.txt | 3 + 6 files changed, 190 insertions(+) create mode 100644 TEMA8/task.md create mode 100644 TEMA8/task/Module1.py create mode 100644 TEMA8/task/Module2.py create mode 100644 TEMA8/task/Module3.py create mode 100644 TEMA8/task/file1.txt create mode 100644 TEMA8/task/file2.txt diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..f3bef61 --- /dev/null +++ b/TEMA8/task.md @@ -0,0 +1,138 @@ +# Общее контрольное задание по теме 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 +``` diff --git a/TEMA8/task/Module1.py b/TEMA8/task/Module1.py new file mode 100644 index 0000000..3548aae --- /dev/null +++ b/TEMA8/task/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/task/Module2.py b/TEMA8/task/Module2.py new file mode 100644 index 0000000..e9c408d --- /dev/null +++ b/TEMA8/task/Module2.py @@ -0,0 +1,20 @@ +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 diff --git a/TEMA8/task/Module3.py b/TEMA8/task/Module3.py new file mode 100644 index 0000000..ba1467e --- /dev/null +++ b/TEMA8/task/Module3.py @@ -0,0 +1,18 @@ +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}") + diff --git a/TEMA8/task/file1.txt b/TEMA8/task/file1.txt new file mode 100644 index 0000000..7ab7966 --- /dev/null +++ b/TEMA8/task/file1.txt @@ -0,0 +1,4 @@ +1 2 +3 +4 +7 5 \ No newline at end of file diff --git a/TEMA8/task/file2.txt b/TEMA8/task/file2.txt new file mode 100644 index 0000000..a1b05f6 --- /dev/null +++ b/TEMA8/task/file2.txt @@ -0,0 +1,3 @@ +9 6 8 +2 +4 5 \ No newline at end of file