Files
python-labs/TEMA8/task.md

163 строки
3.6 KiB
Markdown
Исходник Ответственный История

Этот файл содержит невидимые символы Юникода
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\# Общее контрольное задание по теме 8
Володин Денис, А-02-23
\## Задание
Разработайте программу, состоящую из трех модулей:
\- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
\- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
\- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
\## Решение
```py
\#okz1.py
def reading (file):
  nums = \[]
  with open(file, 'r') as file:
  for line in file:
  nums.extend(map(float, line.split()))
  return nums
\#okz2.py
import math
def correlation(a1, a2):
  n = min(len(a1), len(a2))
  sum1 = sum(a1)
  sum2 = sum(a2)
  sum1sq = sum(now \*\* 2 for now in a1)
  sum2sq = sum(now \*\* 2 for now in a2)
  sum12 = sum(x \* y for x, y in zip(a1, a2))
  part1 = n \* sum12 - sum1 \* sum2
  part2 = math.sqrt((n \* sum1sq - sum1 \*\* 2) \* (n \* sum2sq - sum2 \*\* 2))
  try:
  corr = part1 / part2
  return corr
  except ZeroDivisionError:
  print("Ошибка деления на ноль!")
  return
\#okz3.py
from okz1 import reading
from okz2 import correlation
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = reading(file1)
arr2 = reading(file2)
if arr1 is None or arr2 is None:
  print("Не удалось считать данные из файлов.")
else:
  corr = correlation(arr1, arr2)
  if corr is not None:
  print(f"Коэффициент корреляции: {corr:.2f}")
\#Проверка
data1.txt
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
data2.txt
10.0 9.0 9.5 8.0 7.0 5.0 4.0 2.0 1.0 7.5
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.76
Process finished with exit code 0
``