форкнуто от main/python-labs
main
Родитель
739f043219
Сommit
0b10f61827
|
После Ширина: | Высота: | Размер: 18 KiB |
@ -0,0 +1,206 @@
|
||||
# Тест модуля 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
|
||||
```
|
||||
|
||||

|
||||
Загрузка…
Ссылка в новой задаче