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

207 строки
5.9 KiB
Markdown

# Тест модуля 3
Похил Анастасия, А-02-23, вариант 22
## Задание
1) Создайте модуль Мm1, содержащий две функции:
- функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу;
- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции.
2) Создайте еще один модуль Мm2, в котором должны:
- запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;
- запрос порогового значения КК;
- вызов функции 1 с указанным именем;
- трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов.
3) Создайте модуль Мm0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin.
4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу.
## Решение
```py
#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]
```
2)
```py
# Модуль М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("")
```
3)
````py
#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(str(len(chisla))
for x in chisla:
f.write(str(x) + '\n')
```
## Результат
```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)