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

5.9 KiB

Тест модуля 3

Похил Анастасия, А-02-23, вариант 22

Задание

  1. Создайте модуль Мm1, содержащий две функции:
  • функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу;

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

  1. Создайте еще один модуль Мm2, в котором должны:
  • запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;

  • запрос порогового значения КК;

  • вызов функции 1 с указанным именем;

  • трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов.

  1. Создайте модуль Мm0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin.

  2. Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу.

Решение

#Mmod1
import statistics

def funkciya1(imya_faila, KK):
    f = open(imya_faila, 'r')
    stroki = f.readlines()
    f.close()
    vse_chisla = []

    
    for stroka in stroki:
        slova = stroka.split()
        
        for slovo in slova:
            if slovo:  
                chislo = float(slovo)
                vse_chisla.append(chislo)
    
    if imya_faila.endswith('.txt'):
        osnova = imya_faila[:-4]
    else:
        osnova = imya_faila
    
    imya1 = osnova + '1.txt'
    imya2 = osnova + '2.txt'
    
    f1 = open(imya1, 'w')
    
    f2 = open(imya2, 'w')

    
    for chislo in vse_chisla:
        if chislo > KK:
            f1.write(str(chislo) + '\n')
        else:
            f2.write(str(chislo) + '\n')
    
    f1.close()
    f2.close()

    return vse_chisla


def funkciya2(imya_faila):
    f = open(imya_faila, 'r')
    stroki = f.readlines()
    f.close()
    chisla = []
    
    for stroka in stroki:
        slova = stroka.split()
        
        for slovo in slova:
            if slovo:  
                chisla.append(float(slovo))
    
    if len(chisla) == 0:
        return None
    

    srednee = statistics.mean(chisla)
    mediana = statistics.median(chisla)
    minimum = min(chisla)
    maximum = max(chisla)
    std = statistics.stdev(chisla)
    
    return [srednee, mediana, minimum, maximum, std]

# Модуль Мmod2
import Mmod1
import os

while True:
    imya = input("Введите имя файла с данными: ")
    if os.path.exists(imya):
        break
    else:
        print(f"Ошибка: файл '{imya}' не найден!")

KK_str = input("пороговое значение КК: ")
KK = float(KK_str)
vse_chisla = Mmod1.funkciya1(imya, KK)


print("Для исходного файла:")
rez1 = Mmod1.funkciya2(imya)
if rez1:
    print(rez1[0])
    print({rez1[1])
    print(rez1[2])
    print(rez1[3])
    print(rez1[4])
else:
    print(" ")



if imya.endswith('.txt'):
    osnova = imya[:-4]
else:
    osnova = imya

imya1 = osnova + '1.txt'

print(f"Для файла '{imya1}':")
if os.path.exists(imya1):
    rez2 = Mmod1.funkciya2(imya1)
    if rez2:
        print(rez2[0])
        print(rez2[1])
        print(rez2[2])
        print(rez2[3])
        print(rez2[4])
    else:
        print("")


imya2 = osnova + '2.txt'

print(f"Для файла '{imya2}':")
if os.path.exists(imya2):
    rez3 = Mmod1.funkciya2(imya2)
    if rez3:
        print(rez3[0])
        print(rez3[1])
        print(rez3[2])
        print(rez3[3])
        print(rez3[4])
    else:
        print("")
#Mmod0
import Mmod2
import matplotlib.pyplot as plt

with open("data.txt", "r") as f:
    d = [float(x) for line in f for x in line.split()]

plt.plot(d)
plt.show()

with open("RES2a.bin", "wb") as f:
    f.write(struct.pack("i", len(d)))
    for x in d:
        f.write(struct.pack("f", x))
```


## Результат 
```py
Введите имя файла с данными: data.txt
пороговое значение КК: 6
Для исходного файла:
10.5
10.5
1.0
20.0
5.916079783099616
Для файла 'data1.txt':
13.5
13.5
7.0
20.0
4.183300132670378
Для файла 'data2.txt':
3.5
3.5
1.0
6.0
1.8708286933869707
```

![](Fig1.PNG)