форкнуто от main/python-labs
Сравнить коммиты
2 Коммитов
e98453c7cf
...
c6644cf6d6
| Автор | SHA1 | Дата |
|---|---|---|
|
|
c6644cf6d6 | 4 дней назад |
|
|
2b4fc6667f | 4 дней назад |
@ -0,0 +1,10 @@
|
|||||||
|
# Модуль 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
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
# Модуль 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
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
# Модуль 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("Ошибка! Коэф. корр. неверный.")
|
||||||
@ -0,0 +1 @@
|
|||||||
|
15
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
3 3 3 3 3 3 3
|
||||||
|
3 3 3 3 3
|
||||||
|
3 3
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
1 2 3 4 5
|
||||||
|
6 7 8 9 10
|
||||||
|
11 12 13 14 15
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
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
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
15 14 13 12 11
|
||||||
|
10 9 8 7 6
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
3 8 1 9 4
|
||||||
|
12 5 7 2 10
|
||||||
|
6 11 14 3 8
|
||||||
@ -0,0 +1,108 @@
|
|||||||
|
# Общее контрольное задание по Теме 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
|
||||||
|
Ошибка! Нулевая дисперсия.
|
||||||
|
```
|
||||||
Загрузка…
Ссылка в новой задаче