Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

3.5 KiB

Общее контрольное задание по теме 8

Грудинин Егор, А-03-23

Задание

Разработайте программу, состоящую из трех модулей:

  • Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.

  • Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.

  • Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.

Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.

Решение

Задача 1

Содержание модуля M1:

def readFile(fName):
    fp = open(fName, 'r')
    data = fp.read()
    fp.close()
    ls = list(map(int, data.replace('\n', ' ').split(' ')))
    return ls

Содержание файла test_task.txt:

1 2 3
3 4 5
6 7
8

Проверка:


>>> import M1

>>> M1.readFile('test_task.txt')

[1, 2, 3, 3, 4, 5, 6, 7, 8]

Задача 2

Содержание модуля M2:

def corr(l1, l2):
    N = len(l1)
    m1 = sum(l1) / N
    m2 = sum(l2) / N
    
    a1 = 0
    a2 = 0
    a3 = 0
    
    for i in range(N):
        a1 += (l1[i] - m1) * (l2[i] - m2)
        a2 += (l1[i] - m1) ** 2
        a3 += (l2[i] - m2) ** 2
    
    res = a1 / (((a2) * (a3)) ** 0.5)
    return res

>>> import M2

>>> M2.corr([1,2,3,4,5,6,7], [2,1,6,7,10,11,14])

0.9743547036924464

Задача 3

Содержание модуля M3:


from M1 import readFile
from M2 import corr

name1 = input('Введите имя первого файла: ')
name2 = input('Введите имя второго файла: ')

l1 = readFile(name1)
l2 = readFile(name2)

print(round(corr(l1, l2), 3))

Содержание файла test1.txt:


1 2 3 4 5 1 2 3 4 5

Содержание файла test2.txt:


2 3 6 8 10 1 2 3 4 9

>>> import M3

Введите имя первого файла: test1.txt

Введите имя второго файла: test2.txt

0.901