форкнуто от main/python-labs
main
Родитель
0273a16f88
Сommit
2186d86136
@ -0,0 +1,11 @@
|
|||||||
|
# Модуль 0
|
||||||
|
import Mod2
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
sps1, sps2 = Mod2.read_file()
|
||||||
|
plt.plot(sps1)
|
||||||
|
plt.title('График sps1')
|
||||||
|
plt.grid(True)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
# Модуль 1
|
||||||
|
import math
|
||||||
|
|
||||||
|
def func1(t1, t2):
|
||||||
|
"""Объединяет два кортежа и сортирует"""
|
||||||
|
sps1 = []
|
||||||
|
sps2 = []
|
||||||
|
for x in t1:
|
||||||
|
sps1.append(x)
|
||||||
|
sps2.append(1)
|
||||||
|
for x in t2:
|
||||||
|
sps1.append(x)
|
||||||
|
sps2.append(2)
|
||||||
|
spis3 = list(zip(sps1, sps2))
|
||||||
|
spis3.sort(key=lambda x: x[0])
|
||||||
|
sps1_sorted = [x[0] for x in spis3]
|
||||||
|
sps2_sorted = [x[1] for x in spis3]
|
||||||
|
return sps1_sorted, sps2_sorted
|
||||||
|
|
||||||
|
def func2(spis):
|
||||||
|
"""Вычисляет статистики списка"""
|
||||||
|
sred = sum(spis) / len(spis)
|
||||||
|
mini = min(spis)
|
||||||
|
maxi = max(spis)
|
||||||
|
spis_sorted = sorted(spis)
|
||||||
|
n = len(spis_sorted)
|
||||||
|
if n % 2 == 1:
|
||||||
|
med = spis_sorted[n // 2]
|
||||||
|
else:
|
||||||
|
med = (spis_sorted[n // 2 - 1] + spis_sorted[n // 2]) / 2
|
||||||
|
|
||||||
|
if len(spis) > 1:
|
||||||
|
kv_sum = sum((x - sred) ** 2 for x in spis)
|
||||||
|
std = math.sqrt(kv_sum / (len(spis) - 1))
|
||||||
|
else:
|
||||||
|
std = 0
|
||||||
|
|
||||||
|
return sred, mini, maxi, med, std
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
# Модуль 2
|
||||||
|
import pickle
|
||||||
|
import os
|
||||||
|
import Mod1
|
||||||
|
|
||||||
|
def read_file():
|
||||||
|
while True:
|
||||||
|
file_name = input("Введите имя файла: ")
|
||||||
|
if os.path.exists(file_name):
|
||||||
|
break
|
||||||
|
print("Файл не найден! Попробуйте снова.")
|
||||||
|
with open(file_name, 'rb') as f:
|
||||||
|
KRT1, KRT2 = pickle.load(f)
|
||||||
|
sps1, sps2 = Mod1.func1(KRT1, KRT2)
|
||||||
|
print("SPS1:", sps1)
|
||||||
|
print("SPS2:", sps2)
|
||||||
|
sred, mini, maxi, med, std = Mod1.func2(sps1)
|
||||||
|
print('Статистики SPS1:')
|
||||||
|
print("Среднее:" ,sred)
|
||||||
|
print("Минимум:", mini)
|
||||||
|
print("Максимум:", maxi)
|
||||||
|
print("Медиана:", med)
|
||||||
|
print("Ст.отклонение:", std)
|
||||||
|
with open('Res22.txt', 'w') as f:
|
||||||
|
f.write("sps1 sps2\n")
|
||||||
|
for i in range(len(sps1)):
|
||||||
|
f.write(str(sps1[i]))
|
||||||
|
f.write(' ')
|
||||||
|
f.write(str(sps2[i]))
|
||||||
|
f.write('\n')
|
||||||
|
return sps1, sps2
|
||||||
@ -0,0 +1,81 @@
|
|||||||
|
sps1 sps2
|
||||||
|
20 1
|
||||||
|
20 2
|
||||||
|
21 1
|
||||||
|
21 1
|
||||||
|
21 2
|
||||||
|
21 2
|
||||||
|
25 1
|
||||||
|
25 1
|
||||||
|
25 1
|
||||||
|
25 1
|
||||||
|
25 1
|
||||||
|
25 2
|
||||||
|
25 2
|
||||||
|
25 2
|
||||||
|
25 2
|
||||||
|
25 2
|
||||||
|
26 1
|
||||||
|
26 1
|
||||||
|
26 2
|
||||||
|
26 2
|
||||||
|
29 1
|
||||||
|
29 2
|
||||||
|
30 1
|
||||||
|
30 1
|
||||||
|
30 2
|
||||||
|
30 2
|
||||||
|
31 1
|
||||||
|
31 1
|
||||||
|
31 1
|
||||||
|
31 1
|
||||||
|
31 1
|
||||||
|
31 2
|
||||||
|
31 2
|
||||||
|
31 2
|
||||||
|
31 2
|
||||||
|
31 2
|
||||||
|
32 1
|
||||||
|
32 1
|
||||||
|
32 2
|
||||||
|
32 2
|
||||||
|
34 1
|
||||||
|
34 1
|
||||||
|
34 1
|
||||||
|
34 1
|
||||||
|
34 2
|
||||||
|
34 2
|
||||||
|
34 2
|
||||||
|
34 2
|
||||||
|
36 1
|
||||||
|
36 2
|
||||||
|
37 1
|
||||||
|
37 2
|
||||||
|
38 1
|
||||||
|
38 1
|
||||||
|
38 1
|
||||||
|
38 1
|
||||||
|
38 2
|
||||||
|
38 2
|
||||||
|
38 2
|
||||||
|
38 2
|
||||||
|
39 1
|
||||||
|
39 2
|
||||||
|
40 1
|
||||||
|
40 2
|
||||||
|
42 1
|
||||||
|
42 1
|
||||||
|
42 2
|
||||||
|
42 2
|
||||||
|
43 1
|
||||||
|
43 1
|
||||||
|
43 2
|
||||||
|
43 2
|
||||||
|
44 1
|
||||||
|
44 1
|
||||||
|
44 2
|
||||||
|
44 2
|
||||||
|
45 1
|
||||||
|
45 1
|
||||||
|
45 2
|
||||||
|
45 2
|
||||||
|
После Ширина: | Высота: | Размер: 15 KiB |
Двоичный файл не отображается.
@ -0,0 +1,129 @@
|
|||||||
|
# Тест по Модулю 3
|
||||||
|
Таболин Иван, А-01-23
|
||||||
|
Вариант 10
|
||||||
|
## Задание
|
||||||
|
1) Создайте модуль М1, содержащий две функции:
|
||||||
|
- функция 1: аргументы - два кортежа с целочисленными элементами, не обязательно одинаковой длины; в функции должен быть составлены два списка: SPS1 с элементами из двух входных кортежей, причем элементы SPS1 должны быть упорядочены по возрастанию величины, а также список SPS2 с элементами, равными 1 или 2, причем значение 1 берется в том случае, если соответствующий элемент в SPS1 взят из первого кортежа, а значение 2 - если из второго;
|
||||||
|
- функция 2: аргумент - числовой список; по этому списку в функции должны быть вычислены среднее, наименьшее и наибольшее значения, медиана и оценка стандартного отклонения,
|
||||||
|
2) Создайте еще один модуль М2, в котором должны выполняться операции:
|
||||||
|
- запрашивается и вводится имя бинарного файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;
|
||||||
|
- из указанного файла считываются два кортежа: KRT1 и KRT2.
|
||||||
|
- применяется функция 1 к этим двум кортежам и отображаются полученные списки;
|
||||||
|
- применяется функция 2 к списку SPS1 и отображаются результаты расчета;
|
||||||
|
- в текстовый файл с именем Res22.txt записываются результаты расчета по функции 1 так, чтобы в каждой строке был один элемент из SPS1 и один элемент из SPS2, разделенные пробелом.
|
||||||
|
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика полученный из функции 1 список SPS1.
|
||||||
|
4) Подготовьте бинарный файл с двумя кортежами, содержащими, соответственно, 40 и 50 случайных целочисленных элементов из диапазона значений от 20 до 45. Проверьте работу программы с этими данными.
|
||||||
|
## Решение
|
||||||
|
Модуль 1
|
||||||
|
```py
|
||||||
|
# Модуль 1
|
||||||
|
import math
|
||||||
|
|
||||||
|
def func1(t1, t2):
|
||||||
|
"""Объединяет два кортежа и сортирует"""
|
||||||
|
sps1 = []
|
||||||
|
sps2 = []
|
||||||
|
for x in t1:
|
||||||
|
sps1.append(x)
|
||||||
|
sps2.append(1)
|
||||||
|
for x in t2:
|
||||||
|
sps1.append(x)
|
||||||
|
sps2.append(2)
|
||||||
|
spis3 = list(zip(sps1, sps2))
|
||||||
|
spis3.sort(key=lambda x: x[0])
|
||||||
|
sps1_sorted = [x[0] for x in spis3]
|
||||||
|
sps2_sorted = [x[1] for x in spis3]
|
||||||
|
return sps1_sorted, sps2_sorted
|
||||||
|
|
||||||
|
def func2(spis):
|
||||||
|
"""Вычисляет статистики списка"""
|
||||||
|
sred = sum(spis) / len(spis)
|
||||||
|
mini = min(spis)
|
||||||
|
maxi = max(spis)
|
||||||
|
spis_sorted = sorted(spis)
|
||||||
|
n = len(spis_sorted)
|
||||||
|
if n % 2 == 1:
|
||||||
|
med = spis_sorted[n // 2]
|
||||||
|
else:
|
||||||
|
med = (spis_sorted[n // 2 - 1] + spis_sorted[n // 2]) / 2
|
||||||
|
|
||||||
|
if len(spis) > 1:
|
||||||
|
kv_sum = sum((x - sred) ** 2 for x in spis)
|
||||||
|
std = math.sqrt(kv_sum / (len(spis) - 1))
|
||||||
|
else:
|
||||||
|
std = 0
|
||||||
|
|
||||||
|
return sred, mini, maxi, med, std
|
||||||
|
```
|
||||||
|
Модуль 2
|
||||||
|
```py
|
||||||
|
# Модуль 2
|
||||||
|
import pickle
|
||||||
|
import os
|
||||||
|
import Mod1
|
||||||
|
|
||||||
|
def read_file():
|
||||||
|
while True:
|
||||||
|
file_name = input("Введите имя файла: ")
|
||||||
|
if os.path.exists(file_name):
|
||||||
|
break
|
||||||
|
print("Файл не найден! Попробуйте снова.")
|
||||||
|
with open(file_name, 'rb') as f:
|
||||||
|
KRT1, KRT2 = pickle.load(f)
|
||||||
|
sps1, sps2 = Mod1.func1(KRT1, KRT2)
|
||||||
|
print("SPS1:", sps1)
|
||||||
|
print("SPS2:", sps2)
|
||||||
|
sred, mini, maxi, med, std = Mod1.func2(sps1)
|
||||||
|
print('Статистики SPS1:')
|
||||||
|
print("Среднее:" ,sred)
|
||||||
|
print("Минимум:", mini)
|
||||||
|
print("Максимум:", maxi)
|
||||||
|
print("Медиана:", med)
|
||||||
|
print("Ст.отклонение:", std)
|
||||||
|
with open('Res22.txt', 'w') as f:
|
||||||
|
f.write("sps1 sps2\n")
|
||||||
|
for i in range(len(sps1)):
|
||||||
|
f.write(str(sps1[i]))
|
||||||
|
f.write(' ')
|
||||||
|
f.write(str(sps2[i]))
|
||||||
|
f.write('\n')
|
||||||
|
return sps1, sps2
|
||||||
|
```
|
||||||
|
Модуль 0
|
||||||
|
```py
|
||||||
|
# Модуль 0
|
||||||
|
import Mod2
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
sps1, sps2 = Mod2.read_file()
|
||||||
|
plt.plot(sps1)
|
||||||
|
plt.title('График sps1')
|
||||||
|
plt.grid(True)
|
||||||
|
plt.show()
|
||||||
|
```
|
||||||
|
Генерация входных данных
|
||||||
|
```py
|
||||||
|
import pickle
|
||||||
|
import random as rn
|
||||||
|
krt1=tuple(rn.randint(20,45) for _ in range(40))
|
||||||
|
krt2=tuple(rn.randint(20,45) for _ in range(50))
|
||||||
|
file=open('input.bin','wb')
|
||||||
|
pickle.dump((krt1,krt1),file)
|
||||||
|
file.close()
|
||||||
|
```
|
||||||
|
Выполнение
|
||||||
|
```py
|
||||||
|
import Mod0
|
||||||
|
Введите имя файла: input.txt
|
||||||
|
Файл не найден! Попробуйте снова.
|
||||||
|
Введите имя файла: input.bin
|
||||||
|
SPS1: [20, 20, 21, 21, 21, 21, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 36, 36, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 40, 40, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45]
|
||||||
|
SPS2: [1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2]
|
||||||
|
Статистики SPS1:
|
||||||
|
Среднее: 33.375
|
||||||
|
Минимум: 20
|
||||||
|
Максимум: 45
|
||||||
|
Медиана: 33.0
|
||||||
|
Ст.отклонение: 7.171277096157519
|
||||||
|
```
|
||||||
|

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