форкнуто от main/python-labs
Сравнить коммиты
Ничего общего в коммитах. 'c6644cf6d6e4ab9c6da55fce0ee1298fc8d0ce36' и 'e98453c7cf24a37a1bd461e39033bb4edd81e748' имеют совершенно разные истории.
c6644cf6d6
...
e98453c7cf
@ -1,10 +0,0 @@
|
|||||||
# Модуль 1 ОКЗ
|
|
||||||
def r_file(name):
|
|
||||||
"""Чтение данных из файла
|
|
||||||
name - имя файла"""
|
|
||||||
inp_spis=[]
|
|
||||||
with open(name) as f:
|
|
||||||
for line in f:
|
|
||||||
for x in line.split():
|
|
||||||
inp_spis.append(float(x))
|
|
||||||
return inp_spis
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
# Модуль 2
|
|
||||||
# Расчет корреляции
|
|
||||||
def corr(x,y):
|
|
||||||
if not x or not y:
|
|
||||||
# Ошибка! Отсутсвует аргумент.
|
|
||||||
return 22
|
|
||||||
import math
|
|
||||||
sum1=sum2=sum3=0
|
|
||||||
n=min(len(x),len(y))
|
|
||||||
if n<2:
|
|
||||||
# Ошибка! Малая выборка.
|
|
||||||
return 33
|
|
||||||
x=x[:n]
|
|
||||||
y=y[:n]
|
|
||||||
x_mean=sum(x)/n
|
|
||||||
y_mean=sum(y)/n
|
|
||||||
for i in range(n):
|
|
||||||
sum1+=(x[i]-x_mean)*(y[i]-y_mean)
|
|
||||||
sum2+=(x[i]-x_mean)**2
|
|
||||||
sum3+=(y[i]-y_mean)**2
|
|
||||||
if sum2!=0 and sum3!=0:
|
|
||||||
znam=math.sqrt(sum2*sum3)
|
|
||||||
else:
|
|
||||||
# Ошибка! Деление на ноль.
|
|
||||||
return 44
|
|
||||||
r=sum1/znam
|
|
||||||
return r
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
# Модуль 3
|
|
||||||
from Mod1_okz import r_file
|
|
||||||
from Mod2_okz import corr
|
|
||||||
file1=input("Введите имя первого файла: ")
|
|
||||||
file2=input("Введите имя второго файла: ")
|
|
||||||
spis1=r_file(file1)
|
|
||||||
spis2=r_file(file2)
|
|
||||||
|
|
||||||
res=corr(spis1,spis2)
|
|
||||||
if not(res in [22,33,44]):
|
|
||||||
res=round(res,3)
|
|
||||||
|
|
||||||
if res == 22:
|
|
||||||
print("Ошибка! Пустой файл.")
|
|
||||||
elif res == 33:
|
|
||||||
print("Ошибка! Малая выборка.")
|
|
||||||
elif res == 44:
|
|
||||||
print("Ошибка! Нулевая дисперсия.")
|
|
||||||
elif (res >= -1) and (res <= 1):
|
|
||||||
print("r =", res)
|
|
||||||
else:
|
|
||||||
print("Ошибка! Коэф. корр. неверный.")
|
|
||||||
@ -1 +0,0 @@
|
|||||||
15
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
3 3 3 3 3 3 3
|
|
||||||
3 3 3 3 3
|
|
||||||
3 3
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
1 2 3 4 5
|
|
||||||
6 7 8 9 10
|
|
||||||
11 12 13 14 15
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
1.1 2.2 3.1 4.3 5.2
|
|
||||||
6.1 7.3 8.2 9.1 10.3
|
|
||||||
11.2 12.1 13.3 14.2 15.1
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
15 14 13 12 11
|
|
||||||
10 9 8 7 6
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
3 8 1 9 4
|
|
||||||
12 5 7 2 10
|
|
||||||
6 11 14 3 8
|
|
||||||
@ -1,108 +0,0 @@
|
|||||||
# Общее контрольное задание по Теме 8
|
|
||||||
Таболин Иван, А-01-23
|
|
||||||
## Задание
|
|
||||||
Разработайте программу, состоящую из трех модулей:
|
|
||||||
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
|
|
||||||
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
|
||||||
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, два-жды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вы-зывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отобража-ет рассчитанное значение на экране с округлением до трех цифр после точки.
|
|
||||||
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
|
||||||
## Решение
|
|
||||||
Первый модуль `Mod1_okz.py`
|
|
||||||
```py
|
|
||||||
# Модуль 1 ОКЗ
|
|
||||||
def r_file(name):
|
|
||||||
"""Чтение данных из файла
|
|
||||||
name - имя файла"""
|
|
||||||
inp_spis=[]
|
|
||||||
with open(name) as f:
|
|
||||||
for line in f:
|
|
||||||
for x in line.split():
|
|
||||||
inp_spis.append(float(x))
|
|
||||||
return inp_spis
|
|
||||||
```
|
|
||||||
Второй модуль `Mod2_okz.py`
|
|
||||||
```py
|
|
||||||
# Модуль 2
|
|
||||||
# Расчет корреляции
|
|
||||||
def corr(x,y):
|
|
||||||
if not x or not y:
|
|
||||||
# Ошибка! Отсутствует аргумент.
|
|
||||||
return 22
|
|
||||||
import math
|
|
||||||
sum1=sum2=sum3=0
|
|
||||||
n=min(len(x),len(y))
|
|
||||||
if n<2:
|
|
||||||
# Ошибка! Малая выборка.
|
|
||||||
return 33
|
|
||||||
x=x[:n]
|
|
||||||
y=y[:n]
|
|
||||||
x_mean=sum(x)/n
|
|
||||||
y_mean=sum(y)/n
|
|
||||||
for i in range(n):
|
|
||||||
sum1+=(x[i]-x_mean)*(y[i]-y_mean)
|
|
||||||
sum2+=(x[i]-x_mean)**2
|
|
||||||
sum3+=(y[i]-y_mean)**2
|
|
||||||
if sum2!=0 and sum3!=0:
|
|
||||||
znam=math.sqrt(sum2*sum3)
|
|
||||||
else:
|
|
||||||
# Ошибка! Деление на ноль.
|
|
||||||
return 44
|
|
||||||
r=sum1/znam
|
|
||||||
return r
|
|
||||||
```
|
|
||||||
Третий модуль 'Mod3_okz.py'
|
|
||||||
```py
|
|
||||||
# Модуль 3
|
|
||||||
from Mod1_okz import r_file
|
|
||||||
from Mod2_okz import corr
|
|
||||||
file1=input("Введите имя первого файла: ")
|
|
||||||
file2=input("Введите имя второго файла: ")
|
|
||||||
spis1=r_file(file1)
|
|
||||||
spis2=r_file(file2)
|
|
||||||
|
|
||||||
res=corr(spis1,spis2)
|
|
||||||
if not(res in [22,33,44]):
|
|
||||||
res=round(res,3)
|
|
||||||
|
|
||||||
if res == 22:
|
|
||||||
print("Ошибка! Пустой файл.")
|
|
||||||
elif res == 33:
|
|
||||||
print("Ошибка! Малая выборка.")
|
|
||||||
elif res == 44:
|
|
||||||
print("Ошибка! Нулевая дисперсия.")
|
|
||||||
elif (res >= -1) and (res <= 1):
|
|
||||||
print("r =", res)
|
|
||||||
else:
|
|
||||||
print("Ошибка! Коэф. корр. неверный.")
|
|
||||||
```
|
|
||||||
Тестирование
|
|
||||||
```py
|
|
||||||
import Mod3_okz
|
|
||||||
Введите имя первого файла: selection1.txt
|
|
||||||
Введите имя второго файла: selection2.txt
|
|
||||||
r = 1.0
|
|
||||||
|
|
||||||
sys.modules.pop('Mod3_okz')
|
|
||||||
<module 'Mod3_okz' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod3_okz.py'>
|
|
||||||
import Mod3_okz
|
|
||||||
Введите имя первого файла: selection3.txt
|
|
||||||
Введите имя второго файла: selection4.txt
|
|
||||||
r = -0.235
|
|
||||||
```
|
|
||||||
Примеры ошибок
|
|
||||||
```py
|
|
||||||
import Mod3_okz
|
|
||||||
Введите имя первого файла: selection1.txt
|
|
||||||
Введите имя второго файла: empty.txt
|
|
||||||
Ошибка! Пустой файл.
|
|
||||||
|
|
||||||
import Mod3_okz
|
|
||||||
Введите имя первого файла: selection2.txt
|
|
||||||
Введите имя второго файла: few_values.txt
|
|
||||||
Ошибка! Малая выборка.
|
|
||||||
|
|
||||||
import Mod3_okz
|
|
||||||
Введите имя первого файла: selection3.txt
|
|
||||||
Введите имя второго файла: same_values.txt
|
|
||||||
Ошибка! Нулевая дисперсия.
|
|
||||||
```
|
|
||||||
Загрузка…
Ссылка в новой задаче