форкнуто от main/python-labs
Родитель
cf9bc4b772
Сommit
69ded5e71c
@ -0,0 +1,160 @@
|
|||||||
|
# Индивидуальное контрольное задание по модулю 3
|
||||||
|
Киреев Юрий А-02-23
|
||||||
|
## Задание
|
||||||
|
1) Создайте модуль М1, содержащий две функции:
|
||||||
|
|
||||||
|
- функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его. Исходные данные в виде списка возвращаются в вызывающую программу;
|
||||||
|
|
||||||
|
- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции.
|
||||||
|
|
||||||
|
2) Создайте еще один модуль М2, в котором должны:
|
||||||
|
|
||||||
|
- запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;
|
||||||
|
|
||||||
|
- запрос порогового значения КК;
|
||||||
|
|
||||||
|
- вызов функции 1 с указанным именем;
|
||||||
|
|
||||||
|
- трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов.
|
||||||
|
|
||||||
|
3) Создайте модуль М0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin.
|
||||||
|
|
||||||
|
4) Подготовьте 2 файла с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ними разработанную программу.
|
||||||
|
## Решение
|
||||||
|
Модуль M1:
|
||||||
|
```py
|
||||||
|
import statistics
|
||||||
|
|
||||||
|
def raspil(filename, KK):
|
||||||
|
numbers = []
|
||||||
|
with open(filename,'r') as fp:
|
||||||
|
for line in fp:
|
||||||
|
parts = line.split()
|
||||||
|
for part in parts:
|
||||||
|
numbers.append(float(part))
|
||||||
|
file_name = filename.split(".")[0]
|
||||||
|
new_name1 = file_name + '1' + '.txt'
|
||||||
|
new_name2 = file_name + '2' + '.txt'
|
||||||
|
with open (new_name1, 'w') as f1, \
|
||||||
|
open (new_name2, 'w') as f2:
|
||||||
|
for x in numbers:
|
||||||
|
if x > KK:
|
||||||
|
f1.write(str(x)+" ")
|
||||||
|
else:
|
||||||
|
f2.write(str(x)+" ")
|
||||||
|
return numbers
|
||||||
|
|
||||||
|
def raschet(filename):
|
||||||
|
numbers = []
|
||||||
|
with open(filename,'r') as fp:
|
||||||
|
for line in fp:
|
||||||
|
parts = line.split()
|
||||||
|
for part in parts:
|
||||||
|
numbers.append(float(part))
|
||||||
|
mean_val = statistics.mean(numbers)
|
||||||
|
median_val = statistics.median(numbers)
|
||||||
|
min_val = min(numbers)
|
||||||
|
max_val = max(numbers)
|
||||||
|
std_val = statistics.stdev(numbers)
|
||||||
|
return mean_val, median_val, min_val, max_val, std_val
|
||||||
|
```
|
||||||
|
Модуль M2:
|
||||||
|
```py
|
||||||
|
import os
|
||||||
|
import M1
|
||||||
|
while True:
|
||||||
|
filename = input("Введите имя файла:")
|
||||||
|
if os.path.isfile(filename):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("Такого файла не существует, повторите ввод:")
|
||||||
|
KK = float(input("Введите пороговое значение:"))
|
||||||
|
numbers = M1.raspil(filename, KK)
|
||||||
|
print("Данные из файла:", numbers)
|
||||||
|
file_name = filename.split(".")[0]
|
||||||
|
file1 = file_name + '1' + '.txt'
|
||||||
|
file2 = file_name + '2' + '.txt'
|
||||||
|
files = (filename, file1, file2)
|
||||||
|
for file in files:
|
||||||
|
mean_val, median_val, min_val, max_val, std_val = M1.raschet(file)
|
||||||
|
print (f"Среднее: {mean_val}")
|
||||||
|
print (f"Медиана: {median_val}")
|
||||||
|
print (f"Минимальное: {min_val}")
|
||||||
|
print (f"Максимальное: {max_val}")
|
||||||
|
print (f"Стандартное отклонение: {std_val}")
|
||||||
|
```
|
||||||
|
Модуль M0:
|
||||||
|
```py
|
||||||
|
import pylab
|
||||||
|
import pickle
|
||||||
|
import M2
|
||||||
|
|
||||||
|
pylab.plot(M2.numbers)
|
||||||
|
pylab.title('Исходные данные')
|
||||||
|
pylab.xlabel('Индекс')
|
||||||
|
pylab.ylabel('Значение')
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
with open('RES2a.bin', 'w') as RES:
|
||||||
|
pickle.dump(M2.numbers, RES)
|
||||||
|
```
|
||||||
|
Файлы:
|
||||||
|
super_test_file.txt
|
||||||
|
```py
|
||||||
|
-1
|
||||||
|
2 -3
|
||||||
|
4 -5 6
|
||||||
|
-7 8 -9 10
|
||||||
|
-11 12 -13 14 -15
|
||||||
|
16 -17 18 -19 20
|
||||||
|
```
|
||||||
|
test_file.txt
|
||||||
|
```py
|
||||||
|
1 2 3
|
||||||
|
4 5 6 7 8
|
||||||
|
9 10
|
||||||
|
11 12 13 14
|
||||||
|
15 16 17 18 19 20
|
||||||
|
```
|
||||||
|
Проверка super_test_file
|
||||||
|
```py
|
||||||
|
Введите имя файла:super_test_file.txt
|
||||||
|
Введите пороговое значение:0
|
||||||
|
Данные из файла: [-1.0, 2.0, -3.0, 4.0, -5.0, 6.0, -7.0, 8.0, -9.0, 10.0, -11.0, 12.0, -13.0, 14.0, -15.0, 16.0, -17.0, 18.0, -19.0, 20.0]
|
||||||
|
Среднее: 0.5
|
||||||
|
Медиана: 0.5
|
||||||
|
Минимальное: -19.0
|
||||||
|
Максимальное: 20.0
|
||||||
|
Стандартное отклонение: 12.2796365452814
|
||||||
|
Среднее: 11.0
|
||||||
|
Медиана: 11.0
|
||||||
|
Минимальное: 2.0
|
||||||
|
Максимальное: 20.0
|
||||||
|
Стандартное отклонение: 6.0553007081949835
|
||||||
|
Среднее: -10.0
|
||||||
|
Медиана: -10.0
|
||||||
|
Минимальное: -19.0
|
||||||
|
Максимальное: -1.0
|
||||||
|
Стандартное отклонение: 6.0553007081949835
|
||||||
|
```
|
||||||
|
Проверка test_file
|
||||||
|
```py
|
||||||
|
Введите имя файла:test_file.txt
|
||||||
|
Введите пороговое значение:5
|
||||||
|
Данные из файла: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0]
|
||||||
|
Среднее: 10.5
|
||||||
|
Медиана: 10.5
|
||||||
|
Минимальное: 1.0
|
||||||
|
Максимальное: 20.0
|
||||||
|
Стандартное отклонение: 5.916079783099616
|
||||||
|
Среднее: 13.0
|
||||||
|
Медиана: 13.0
|
||||||
|
Минимальное: 6.0
|
||||||
|
Максимальное: 20.0
|
||||||
|
Стандартное отклонение: 4.47213595499958
|
||||||
|
Среднее: 3.0
|
||||||
|
Медиана: 3.0
|
||||||
|
Минимальное: 1.0
|
||||||
|
Максимальное: 5.0
|
||||||
|
Стандартное отклонение: 1.5811388300841898
|
||||||
|
```
|
||||||
Загрузка…
Ссылка в новой задаче