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

4.3 KiB

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

Степанов Артём, А-02-23

Задание

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

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

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

Решение

>>> # Содержимое Module1
>>>  
    def readList(filename):
        numList = []
        with open(filename, "r") as file:
            for line in file:
                for num in line.strip().split():
                    numList.append(float(num))
        return numList
>>>
>>> # Содержимое Module2
>>>
    import math

    def calculateCorrelation(list1, list2):
        if not list1 or not list2:
            print("Ошибка: Список не может быть пустым")
            return None

        numerator = 0
        sum1 = 0
        sum2 = 0
    
        n = min(len(list1), len(list2))
        mean1 = sum(list1[:n]) / n
        mean2 = sum(list2[:n]) / n

        for i in range(n):
            numerator += (list1[i] - mean1) * (list2[i] - mean2)
            sum1 += (list1[i] - mean1) ** 2
            sum2 += (list2[i] - mean2) ** 2
        
        denominator = math.sqrt(sum1 * sum2)
    
        if denominator == 0:
            print("Ошибка: Деление на ноль")
            return None
        return numerator / denominator
>>>
>>> # Содержимое Module3
>>>
    import os, Module1, Module2

    for i in range(1, 3):
        while True:
            filename = os.path.abspath(input(f"Введите имя {i}-го файла: "))
        
            if not os.path.isfile(filename):
                print("Ошибка: Введено неверное имя файла")
                continue
        
            newList = Module1.readList(filename)

            if not newList:
                print("Ошибка: В данном файле содержится пустой список значений")
                continue

            globals() [f"list{i}"] = newList
            break

    correlation = Module2.calculateCorrelation(list1, list2)
    if correlation != None:
        print(f"Коэффициент корреляции равен: {correlation:.3f}")
>>>
>>> # Результат работы программы 
>>>
>>> import os
>>> os.chdir("C:\\Users\\User\\Desktop\\StepanovAV\\python-labs\\TEMA8\\task")
>>> import Module3
    Введите имя 1-го файла: file1.txt
    Введите имя 2-го файла: file2.txt
    Коэффициент корреляции равен: 0.962