форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
207 строки
5.9 KiB
Markdown
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(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
|
|
```
|
|
|
|
 |