форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
86 строки
3.3 KiB
Markdown
86 строки
3.3 KiB
Markdown
# Общее контрольное задание по теме 8
|
|
## Бушманов А.С. А-01-23
|
|
## Задание:
|
|
Разработайте программу, состоящую из трех модулей:
|
|
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
|
|
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
|
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
|
|
|
|
|
## Решение:
|
|
```python
|
|
#1
|
|
def read_file(filename):
|
|
numbers = []
|
|
f = open(filename, "r", encoding="utf-8")
|
|
|
|
for line in f:
|
|
parts = line.split() # разбиваем строку по пробелам
|
|
for p in parts:
|
|
numbers.append(float(p)) # добавляем число в список
|
|
|
|
f.close()
|
|
return numbers
|
|
#2
|
|
import math
|
|
|
|
def correlation(l1, l2):
|
|
n = min(len(l1), len(l2))
|
|
x = l1[:n]
|
|
y = l2[:n]
|
|
|
|
sx = sum(x)
|
|
sy = sum(y)
|
|
|
|
sxx = 0
|
|
syy = 0
|
|
sxy = 0
|
|
|
|
for i in range(n):
|
|
sxx += x[i] * x[i]
|
|
syy += y[i] * y[i]
|
|
sxy += x[i] * y[i]
|
|
|
|
num = n * sxy - sx * sy
|
|
den = math.sqrt((n * sxx - sx * sx) * (n * syy - sy * sy))
|
|
|
|
return num / den
|
|
#3
|
|
import module1
|
|
import module2
|
|
|
|
file1 = input("Введите имя первого файла: ")
|
|
file2 = input("Введите имя второго файла: ")
|
|
|
|
a = module1.read_file(file1)
|
|
b = module1.read_file(file2)
|
|
|
|
r = module2.correlation(a, b)
|
|
|
|
print(f"Coef cor: {r:.3f}")
|
|
```
|
|
## Ответ:
|
|
```python
|
|
import module3.py
|
|
Введите имя первого файла: data1.txt
|
|
Введите имя второго файла: data2.txt
|
|
Coef cor: 0.105
|
|
```
|
|
|
|
## Файлы:
|
|
data1.txt
|
|
```
|
|
2 7 1
|
|
8 2
|
|
8 1 8
|
|
2 8
|
|
|
|
```
|
|
data2.txt
|
|
```
|
|
3 1 4 1
|
|
5 9
|
|
2 6 5
|
|
3
|
|
|
|
``` |