ответвлено от main/python-labs
Сравнить коммиты
15 Коммитов
e98453c7cf
...
main
| Автор | SHA1 | Дата | |
|---|---|---|---|
| 2186d86136 | |||
| 0273a16f88 | |||
| 5f8f58afdd | |||
| 52c4726de8 | |||
| 85e9c6daa2 | |||
| 35322e8142 | |||
| 914f5bc920 | |||
| 1c3efa7980 | |||
| f26da7aa8f | |||
| 96f4fbc1b4 | |||
| fdf672b8b7 | |||
| 0f9aaccdb4 | |||
| 5582a02246 | |||
| c6644cf6d6 | |||
| 2b4fc6667f |
@@ -201,6 +201,7 @@ func()
|
|||||||
Функция `func()` определена вторым определением, так как `typ_fun=8 != 1`.
|
Функция `func()` определена вторым определением, так как `typ_fun=8 != 1`.
|
||||||
## 4. Аргументы функции.
|
## 4. Аргументы функции.
|
||||||
## 4.1. Использование функции в качестве аргумента другой функции.
|
## 4.1. Использование функции в качестве аргумента другой функции.
|
||||||
|
Это делает код более гибким, не привязывает функцию к конкретной операции, а позволяет выполнять разные операции внутри функции.
|
||||||
```py
|
```py
|
||||||
def fun_arg(fff,a,b,c):
|
def fun_arg(fff,a,b,c):
|
||||||
"""fff-имя функции, используемой
|
"""fff-имя функции, используемой
|
||||||
@@ -235,6 +236,7 @@ qq=slozh(*b1234)
|
|||||||
print(qq)
|
print(qq)
|
||||||
[1, 2, -1, -2, 0, 2, -1, 1]
|
[1, 2, -1, -2, 0, 2, -1, 1]
|
||||||
```
|
```
|
||||||
|
Функция `slozh` ожидает четыре аргумента, поэтому нам надо "распаковать" список на четыре переменные
|
||||||
## 4.5. Аргументы функции содержатся в словаре.
|
## 4.5. Аргументы функции содержатся в словаре.
|
||||||
```py
|
```py
|
||||||
dic4={"a1":1,"a2":2,"a3":3,"a4":4}
|
dic4={"a1":1,"a2":2,"a3":3,"a4":4}
|
||||||
@@ -242,9 +244,11 @@ qqq=slozh(**dic4)
|
|||||||
print(qqq)
|
print(qqq)
|
||||||
10
|
10
|
||||||
```
|
```
|
||||||
|
`**` - оператор распаковки словаря.
|
||||||
## 4.6. Смешанные ссылки.
|
## 4.6. Смешанные ссылки.
|
||||||
```py
|
```py
|
||||||
e1=(-1,6);dd2={'a3':3,'a4':9}
|
e1=(-1,6);dd2={'a3':3,'a4':9}
|
||||||
|
qqqq=slozh(*e1,**dd2)
|
||||||
print(qqqq)
|
print(qqqq)
|
||||||
17
|
17
|
||||||
```
|
```
|
||||||
|
|||||||
33
TEMA7/test.md
Обычный файл
33
TEMA7/test.md
Обычный файл
@@ -0,0 +1,33 @@
|
|||||||
|
# Индивидуальное контрольное задание по Теме 7
|
||||||
|
Таболин Иван, А-01-23
|
||||||
|
Вариант 3
|
||||||
|
## Задание
|
||||||
|
Разработайте функцию с 4 аргументами, создающую последовательность отсчетов случайного, равномерно распределенного сигнала типа белого шума с заданными параметрами: границы диа-пазона изменения, число отсчетов (аргументы функции). Сигнал должен быть записан построчно, по 3 элемента в строке с разделителем - запятая в текстовый файл с заданным именем (4-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
|
||||||
|
## Решение
|
||||||
|
```py
|
||||||
|
def bel_shum(a_min,a_max,k,file_name):
|
||||||
|
"""Генератор белого шума
|
||||||
|
a_min,a_max - границы диапазона изменения сигнала
|
||||||
|
k - количество отсчетов
|
||||||
|
file_name - имя файла для вывода сигнала"""
|
||||||
|
import random as rn
|
||||||
|
signal=[]
|
||||||
|
for i in range(k):
|
||||||
|
a=a_min+(a_max-a_min)*rn.random()
|
||||||
|
signal.append(a)
|
||||||
|
f=open(file_name,'w')
|
||||||
|
i=0
|
||||||
|
while i<len(signal):
|
||||||
|
s=signal[i:i+3]
|
||||||
|
out=','.join(str(n) for n in s)
|
||||||
|
f.write(out+'\n')
|
||||||
|
i+=3
|
||||||
|
f.close()
|
||||||
|
return signal
|
||||||
|
|
||||||
|
bel_shum(0,1,20,'test1.txt')
|
||||||
|
[0.6121303296306144, 0.6412641200633369, 0.11685946114651469, 0.45963383247709144, 0.1396119953149234, 0.9774252470424362, 0.8214083524197986, 0.3712680592177061, 0.7679917358701837, 0.10872526758897305, 0.7277044250338426, 0.5584257054824748, 0.903225844909946, 0.7162949601167093, 0.37602800658438673, 0.7390155718732525, 0.3665326143981362, 0.8660301445143191, 0.8605103393087415, 0.8265277945070508]
|
||||||
|
|
||||||
|
bel_shum(1,5,35,'test2.txt')
|
||||||
|
[2.044262095730901, 2.9460771147067106, 3.4488422163718373, 4.501325827244864, 3.0908516348657415, 2.2486766582618416, 1.8541368543777854, 4.671136588954065, 2.0377889808927616, 2.907799881297287, 4.185430806328185, 1.3106392123128479, 1.4406582567850679, 3.066287739535445, 2.050387519395883, 2.769661281833263, 1.9383764782362034, 1.1036168746115131, 1.4156131808765569, 2.79017367419333, 3.8290609294438225, 4.342915598480614, 3.371713892072644, 2.866840758354854, 3.229631214986825, 3.671877264456392, 2.258566569052188, 3.821614716506629, 2.128574963495442, 1.8828706347794855, 2.279448934161789, 3.8514469999377954, 4.172031075019252, 3.8783957015255783, 1.2633531800325009]
|
||||||
|
```
|
||||||
7
TEMA7/test1.txt
Обычный файл
7
TEMA7/test1.txt
Обычный файл
@@ -0,0 +1,7 @@
|
|||||||
|
0.6121303296306144,0.6412641200633369,0.11685946114651469
|
||||||
|
0.45963383247709144,0.1396119953149234,0.9774252470424362
|
||||||
|
0.8214083524197986,0.3712680592177061,0.7679917358701837
|
||||||
|
0.10872526758897305,0.7277044250338426,0.5584257054824748
|
||||||
|
0.903225844909946,0.7162949601167093,0.37602800658438673
|
||||||
|
0.7390155718732525,0.3665326143981362,0.8660301445143191
|
||||||
|
0.8605103393087415,0.8265277945070508
|
||||||
12
TEMA7/test2.txt
Обычный файл
12
TEMA7/test2.txt
Обычный файл
@@ -0,0 +1,12 @@
|
|||||||
|
2.044262095730901,2.9460771147067106,3.4488422163718373
|
||||||
|
4.501325827244864,3.0908516348657415,2.2486766582618416
|
||||||
|
1.8541368543777854,4.671136588954065,2.0377889808927616
|
||||||
|
2.907799881297287,4.185430806328185,1.3106392123128479
|
||||||
|
1.4406582567850679,3.066287739535445,2.050387519395883
|
||||||
|
2.769661281833263,1.9383764782362034,1.1036168746115131
|
||||||
|
1.4156131808765569,2.79017367419333,3.8290609294438225
|
||||||
|
4.342915598480614,3.371713892072644,2.866840758354854
|
||||||
|
3.229631214986825,3.671877264456392,2.258566569052188
|
||||||
|
3.821614716506629,2.128574963495442,1.8828706347794855
|
||||||
|
2.279448934161789,3.8514469999377954,4.172031075019252
|
||||||
|
3.8783957015255783,1.2633531800325009
|
||||||
1
TEMA8/IKZ_output.txt
Обычный файл
1
TEMA8/IKZ_output.txt
Обычный файл
@@ -0,0 +1 @@
|
|||||||
|
x[i] | y[i]
|
||||||
10
TEMA8/Mod1_IKZ.py
Обычный файл
10
TEMA8/Mod1_IKZ.py
Обычный файл
@@ -0,0 +1,10 @@
|
|||||||
|
# Mod1
|
||||||
|
# Функция
|
||||||
|
def preob(x, A):
|
||||||
|
max_i=int(A*x)
|
||||||
|
for i in range(1, max_i+1):
|
||||||
|
if i*A<=x and x<(i+1)*A:
|
||||||
|
return i
|
||||||
|
elif -(i+1)*A>=x and x>(-i)*A:
|
||||||
|
return -i
|
||||||
|
return 0
|
||||||
10
TEMA8/Mod1_okz.py
Обычный файл
10
TEMA8/Mod1_okz.py
Обычный файл
@@ -0,0 +1,10 @@
|
|||||||
|
# Модуль 1 ОКЗ
|
||||||
|
def r_file(name):
|
||||||
|
"""Чтение данных из файла
|
||||||
|
name - имя файла"""
|
||||||
|
inp_spis=[]
|
||||||
|
with open(name) as f:
|
||||||
|
for line in f:
|
||||||
|
for x in line.split():
|
||||||
|
inp_spis.append(float(x))
|
||||||
|
return inp_spis
|
||||||
16
TEMA8/Mod2_IKZ.py
Обычный файл
16
TEMA8/Mod2_IKZ.py
Обычный файл
@@ -0,0 +1,16 @@
|
|||||||
|
# Mod2
|
||||||
|
# Генерация входных данных и применение функции
|
||||||
|
import random as rn
|
||||||
|
from Mod1_IKZ import preob
|
||||||
|
x=[]
|
||||||
|
for i in range(100):
|
||||||
|
x.append(rn.triangular(-5,25))
|
||||||
|
y=[]
|
||||||
|
for i in range(len(x)):
|
||||||
|
y.append(preob(x[i],1))
|
||||||
|
filename=input('Введите имя файла:')
|
||||||
|
file=open(filename,'w')
|
||||||
|
for i in range(len(x)):
|
||||||
|
s=str(x[i])+' '+str(y[i]) + '\n'
|
||||||
|
file.write(s)
|
||||||
|
file.close()
|
||||||
27
TEMA8/Mod2_okz.py
Обычный файл
27
TEMA8/Mod2_okz.py
Обычный файл
@@ -0,0 +1,27 @@
|
|||||||
|
# Модуль 2
|
||||||
|
# Расчет корреляции
|
||||||
|
def corr(x,y):
|
||||||
|
if not x or not y:
|
||||||
|
# Ошибка! Отсутсвует аргумент.
|
||||||
|
return 22
|
||||||
|
import math
|
||||||
|
sum1=sum2=sum3=0
|
||||||
|
n=min(len(x),len(y))
|
||||||
|
if n<2:
|
||||||
|
# Ошибка! Малая выборка.
|
||||||
|
return 33
|
||||||
|
x=x[:n]
|
||||||
|
y=y[:n]
|
||||||
|
x_mean=sum(x)/n
|
||||||
|
y_mean=sum(y)/n
|
||||||
|
for i in range(n):
|
||||||
|
sum1+=(x[i]-x_mean)*(y[i]-y_mean)
|
||||||
|
sum2+=(x[i]-x_mean)**2
|
||||||
|
sum3+=(y[i]-y_mean)**2
|
||||||
|
if sum2!=0 and sum3!=0:
|
||||||
|
znam=math.sqrt(sum2*sum3)
|
||||||
|
else:
|
||||||
|
# Ошибка! Деление на ноль.
|
||||||
|
return 44
|
||||||
|
r=sum1/znam
|
||||||
|
return r
|
||||||
22
TEMA8/Mod3_okz.py
Обычный файл
22
TEMA8/Mod3_okz.py
Обычный файл
@@ -0,0 +1,22 @@
|
|||||||
|
# Модуль 3
|
||||||
|
from Mod1_okz import r_file
|
||||||
|
from Mod2_okz import corr
|
||||||
|
file1=input("Введите имя первого файла: ")
|
||||||
|
file2=input("Введите имя второго файла: ")
|
||||||
|
spis1=r_file(file1)
|
||||||
|
spis2=r_file(file2)
|
||||||
|
|
||||||
|
res=corr(spis1,spis2)
|
||||||
|
if not(res in [22,33,44]):
|
||||||
|
res=round(res,3)
|
||||||
|
|
||||||
|
if res == 22:
|
||||||
|
print("Ошибка! Пустой файл.")
|
||||||
|
elif res == 33:
|
||||||
|
print("Ошибка! Малая выборка.")
|
||||||
|
elif res == 44:
|
||||||
|
print("Ошибка! Нулевая дисперсия.")
|
||||||
|
elif (res >= -1) and (res <= 1):
|
||||||
|
print("r =", res)
|
||||||
|
else:
|
||||||
|
print("Ошибка! Коэф. корр. неверный.")
|
||||||
0
TEMA8/empty.txt
Обычный файл
0
TEMA8/empty.txt
Обычный файл
1
TEMA8/few_values.txt
Обычный файл
1
TEMA8/few_values.txt
Обычный файл
@@ -0,0 +1 @@
|
|||||||
|
15
|
||||||
@@ -80,6 +80,7 @@ Mod1:Значение perm1= 12
|
|||||||
Mod1.perm1
|
Mod1.perm1
|
||||||
'35'
|
'35'
|
||||||
```
|
```
|
||||||
|
`exec()` пытается прочитать файл в кодировке `UTF-8`.
|
||||||
## 2.4. Использование инструкции `from ... import ...`.
|
## 2.4. Использование инструкции `from ... import ...`.
|
||||||
Пример 1.
|
Пример 1.
|
||||||
```py
|
```py
|
||||||
|
|||||||
3
TEMA8/same_values.txt
Обычный файл
3
TEMA8/same_values.txt
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
3 3 3 3 3 3 3
|
||||||
|
3 3 3 3 3
|
||||||
|
3 3
|
||||||
3
TEMA8/selection1.txt
Обычный файл
3
TEMA8/selection1.txt
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
1 2 3 4 5
|
||||||
|
6 7 8 9 10
|
||||||
|
11 12 13 14 15
|
||||||
3
TEMA8/selection2.txt
Обычный файл
3
TEMA8/selection2.txt
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
1.1 2.2 3.1 4.3 5.2
|
||||||
|
6.1 7.3 8.2 9.1 10.3
|
||||||
|
11.2 12.1 13.3 14.2 15.1
|
||||||
2
TEMA8/selection3.txt
Обычный файл
2
TEMA8/selection3.txt
Обычный файл
@@ -0,0 +1,2 @@
|
|||||||
|
15 14 13 12 11
|
||||||
|
10 9 8 7 6
|
||||||
3
TEMA8/selection4.txt
Обычный файл
3
TEMA8/selection4.txt
Обычный файл
@@ -0,0 +1,3 @@
|
|||||||
|
3 8 1 9 4
|
||||||
|
12 5 7 2 10
|
||||||
|
6 11 14 3 8
|
||||||
108
TEMA8/task.md
Обычный файл
108
TEMA8/task.md
Обычный файл
@@ -0,0 +1,108 @@
|
|||||||
|
# Общее контрольное задание по Теме 8
|
||||||
|
Таболин Иван, А-01-23
|
||||||
|
## Задание
|
||||||
|
Разработайте программу, состоящую из трех модулей:
|
||||||
|
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
|
||||||
|
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
||||||
|
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, два-жды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вы-зывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отобража-ет рассчитанное значение на экране с округлением до трех цифр после точки.
|
||||||
|
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
||||||
|
## Решение
|
||||||
|
Первый модуль `Mod1_okz.py`
|
||||||
|
```py
|
||||||
|
# Модуль 1 ОКЗ
|
||||||
|
def r_file(name):
|
||||||
|
"""Чтение данных из файла
|
||||||
|
name - имя файла"""
|
||||||
|
inp_spis=[]
|
||||||
|
with open(name) as f:
|
||||||
|
for line in f:
|
||||||
|
for x in line.split():
|
||||||
|
inp_spis.append(float(x))
|
||||||
|
return inp_spis
|
||||||
|
```
|
||||||
|
Второй модуль `Mod2_okz.py`
|
||||||
|
```py
|
||||||
|
# Модуль 2
|
||||||
|
# Расчет корреляции
|
||||||
|
def corr(x,y):
|
||||||
|
if not x or not y:
|
||||||
|
# Ошибка! Отсутствует аргумент.
|
||||||
|
return 22
|
||||||
|
import math
|
||||||
|
sum1=sum2=sum3=0
|
||||||
|
n=min(len(x),len(y))
|
||||||
|
if n<2:
|
||||||
|
# Ошибка! Малая выборка.
|
||||||
|
return 33
|
||||||
|
x=x[:n]
|
||||||
|
y=y[:n]
|
||||||
|
x_mean=sum(x)/n
|
||||||
|
y_mean=sum(y)/n
|
||||||
|
for i in range(n):
|
||||||
|
sum1+=(x[i]-x_mean)*(y[i]-y_mean)
|
||||||
|
sum2+=(x[i]-x_mean)**2
|
||||||
|
sum3+=(y[i]-y_mean)**2
|
||||||
|
if sum2!=0 and sum3!=0:
|
||||||
|
znam=math.sqrt(sum2*sum3)
|
||||||
|
else:
|
||||||
|
# Ошибка! Деление на ноль.
|
||||||
|
return 44
|
||||||
|
r=sum1/znam
|
||||||
|
return r
|
||||||
|
```
|
||||||
|
Третий модуль 'Mod3_okz.py'
|
||||||
|
```py
|
||||||
|
# Модуль 3
|
||||||
|
from Mod1_okz import r_file
|
||||||
|
from Mod2_okz import corr
|
||||||
|
file1=input("Введите имя первого файла: ")
|
||||||
|
file2=input("Введите имя второго файла: ")
|
||||||
|
spis1=r_file(file1)
|
||||||
|
spis2=r_file(file2)
|
||||||
|
|
||||||
|
res=corr(spis1,spis2)
|
||||||
|
if not(res in [22,33,44]):
|
||||||
|
res=round(res,3)
|
||||||
|
|
||||||
|
if res == 22:
|
||||||
|
print("Ошибка! Пустой файл.")
|
||||||
|
elif res == 33:
|
||||||
|
print("Ошибка! Малая выборка.")
|
||||||
|
elif res == 44:
|
||||||
|
print("Ошибка! Нулевая дисперсия.")
|
||||||
|
elif (res >= -1) and (res <= 1):
|
||||||
|
print("r =", res)
|
||||||
|
else:
|
||||||
|
print("Ошибка! Коэф. корр. неверный.")
|
||||||
|
```
|
||||||
|
Тестирование
|
||||||
|
```py
|
||||||
|
import Mod3_okz
|
||||||
|
Введите имя первого файла: selection1.txt
|
||||||
|
Введите имя второго файла: selection2.txt
|
||||||
|
r = 1.0
|
||||||
|
|
||||||
|
sys.modules.pop('Mod3_okz')
|
||||||
|
<module 'Mod3_okz' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod3_okz.py'>
|
||||||
|
import Mod3_okz
|
||||||
|
Введите имя первого файла: selection3.txt
|
||||||
|
Введите имя второго файла: selection4.txt
|
||||||
|
r = -0.235
|
||||||
|
```
|
||||||
|
Примеры ошибок
|
||||||
|
```py
|
||||||
|
import Mod3_okz
|
||||||
|
Введите имя первого файла: selection1.txt
|
||||||
|
Введите имя второго файла: empty.txt
|
||||||
|
Ошибка! Пустой файл.
|
||||||
|
|
||||||
|
import Mod3_okz
|
||||||
|
Введите имя первого файла: selection2.txt
|
||||||
|
Введите имя второго файла: few_values.txt
|
||||||
|
Ошибка! Малая выборка.
|
||||||
|
|
||||||
|
import Mod3_okz
|
||||||
|
Введите имя первого файла: selection3.txt
|
||||||
|
Введите имя второго файла: same_values.txt
|
||||||
|
Ошибка! Нулевая дисперсия.
|
||||||
|
```
|
||||||
47
TEMA8/test.md
Обычный файл
47
TEMA8/test.md
Обычный файл
@@ -0,0 +1,47 @@
|
|||||||
|
# Индивидуальное контрольное задание по Теме 8
|
||||||
|
Таболин Иван, А-01-23
|
||||||
|
Вариант 7
|
||||||
|
## Задание
|
||||||
|
По указанному преподавателем варианту контрольного задания
|
||||||
|
обратитесь к индивидуальному заданию с таким номером в теме 7,
|
||||||
|
разработайте функцию, на ее основе создайте модуль.
|
||||||
|
Создайте второй модуль, в котором должны быть инструкции для ввода/создания
|
||||||
|
исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
|
||||||
|
|
||||||
|
Вариант 7 из ИКЗ по Теме 7
|
||||||
|
|
||||||
|
Разработайте функцию с 2 параметрами: х и А, реализующую преобразование входного сигнала x по формуле: y=i, если i*A<=x<(i+1)*A, y=-i, если -(i+1)*A>=x>-i*A, где i принимает значения от 1 до А*х. Если не выполнится ни одно из неравенств ни при каком i, то y=0. Создайте список со 100 значениями входного сигнала х – случайными, треугольно (triangular) распределенными числами в диапазоне значений от -5 до 25. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при А=1. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
|
||||||
|
## Решение
|
||||||
|
Модуль 1
|
||||||
|
```py
|
||||||
|
# Mod1
|
||||||
|
# Функция
|
||||||
|
def preob(x, A):
|
||||||
|
max_i=int(A*x)
|
||||||
|
for i in range(1, max_i+1):
|
||||||
|
if i*A<=x and x<(i+1)*A:
|
||||||
|
return i
|
||||||
|
elif -(i+1)*A>=x and x>(-i)*A:
|
||||||
|
return -i
|
||||||
|
return 0
|
||||||
|
```
|
||||||
|
Модуль 2
|
||||||
|
```py
|
||||||
|
# Mod2
|
||||||
|
# Генерация входных данных и применение функции
|
||||||
|
import random as rn
|
||||||
|
from Mod1_IKZ import preob
|
||||||
|
x=[]
|
||||||
|
for i in range(100):
|
||||||
|
x.append(rn.triangular(-5,25))
|
||||||
|
y=[]
|
||||||
|
for i in range(len(x)):
|
||||||
|
y.append(preob(x[i],1))
|
||||||
|
filename=input('Введите имя файла:')
|
||||||
|
file=open(filename,'w')
|
||||||
|
file.write('x[i] y[i]')
|
||||||
|
for i in range(len(x)):
|
||||||
|
s=str(x[i])+' '+str(y[i]) + '\n'
|
||||||
|
file.write(s)
|
||||||
|
file.close()
|
||||||
|
```
|
||||||
100
TEMA8/test_out.txt
Обычный файл
100
TEMA8/test_out.txt
Обычный файл
@@ -0,0 +1,100 @@
|
|||||||
|
19.83763113980755 19
|
||||||
|
16.683519633109245 16
|
||||||
|
9.613937932157592 9
|
||||||
|
4.963017908969933 4
|
||||||
|
9.660130026497008 9
|
||||||
|
4.192677427076193 4
|
||||||
|
2.8042897405957676 2
|
||||||
|
7.004180515732655 7
|
||||||
|
13.593516894395366 13
|
||||||
|
10.38778089627398 10
|
||||||
|
23.524552246854263 23
|
||||||
|
10.408378867939485 10
|
||||||
|
12.11908886265757 12
|
||||||
|
13.722587336888672 13
|
||||||
|
9.599035410843936 9
|
||||||
|
16.182722607179095 16
|
||||||
|
15.960737898669425 15
|
||||||
|
20.453332281292724 20
|
||||||
|
9.351758251975712 9
|
||||||
|
4.715296915378227 4
|
||||||
|
21.713766919024486 21
|
||||||
|
0.5766163127695902 0
|
||||||
|
8.764382760761023 8
|
||||||
|
7.023206736247321 7
|
||||||
|
10.380398342708045 10
|
||||||
|
14.71079199542745 14
|
||||||
|
9.327675742027745 9
|
||||||
|
6.379809079109103 6
|
||||||
|
6.478312277893931 6
|
||||||
|
0.9453591189849897 0
|
||||||
|
17.810398025399493 17
|
||||||
|
9.500089559677443 9
|
||||||
|
10.206335274636286 10
|
||||||
|
13.119123320799352 13
|
||||||
|
12.152291629686335 12
|
||||||
|
17.672173423083027 17
|
||||||
|
-1.3318207939976006 0
|
||||||
|
16.201396905672105 16
|
||||||
|
6.813514064477367 6
|
||||||
|
9.386637502670942 9
|
||||||
|
6.829696632809032 6
|
||||||
|
-2.358188970070025 0
|
||||||
|
-1.8953657622144822 0
|
||||||
|
12.163997113559677 12
|
||||||
|
16.246743920828237 16
|
||||||
|
18.082861735802094 18
|
||||||
|
8.161677718632582 8
|
||||||
|
13.096553199692709 13
|
||||||
|
3.4793080092423683 3
|
||||||
|
14.410061733084142 14
|
||||||
|
2.8415355967140616 2
|
||||||
|
7.827245427286652 7
|
||||||
|
-0.2683352964665069 0
|
||||||
|
2.5318198114412107 2
|
||||||
|
14.741462609540093 14
|
||||||
|
9.309479183851334 9
|
||||||
|
8.719026442686971 8
|
||||||
|
15.097020825961328 15
|
||||||
|
20.836394245081628 20
|
||||||
|
9.664289544985778 9
|
||||||
|
0.8788652718512342 0
|
||||||
|
12.801681925869698 12
|
||||||
|
9.221793961478204 9
|
||||||
|
7.473865176092325 7
|
||||||
|
8.93244222349147 8
|
||||||
|
21.276485422746923 21
|
||||||
|
0.9186139053532276 0
|
||||||
|
15.614780434508106 15
|
||||||
|
23.72548157518309 23
|
||||||
|
2.286817323138184 2
|
||||||
|
9.39166993120276 9
|
||||||
|
17.54026543856295 17
|
||||||
|
15.96232105645722 15
|
||||||
|
17.402341242065198 17
|
||||||
|
8.064826473440498 8
|
||||||
|
13.969534898590881 13
|
||||||
|
2.7987177875076386 2
|
||||||
|
11.604604823060031 11
|
||||||
|
11.307488847855737 11
|
||||||
|
11.683304043759009 11
|
||||||
|
9.924038399834346 9
|
||||||
|
10.638645358046208 10
|
||||||
|
6.594015975799261 6
|
||||||
|
0.02987019195388818 0
|
||||||
|
2.9540472170256677 2
|
||||||
|
4.273258511639778 4
|
||||||
|
14.616967538004785 14
|
||||||
|
13.722438873502576 13
|
||||||
|
19.81038211300028 19
|
||||||
|
7.99574094616143 7
|
||||||
|
4.330799633595037 4
|
||||||
|
19.54150269676732 19
|
||||||
|
8.165940914694414 8
|
||||||
|
14.33141467468756 14
|
||||||
|
22.697364809616474 22
|
||||||
|
14.472567937917809 14
|
||||||
|
4.509353418534642 4
|
||||||
|
12.138577182051138 12
|
||||||
|
5.911408597590821 5
|
||||||
|
3.303353684790464 3
|
||||||
11
TEMA9/Mod0.py
Обычный файл
11
TEMA9/Mod0.py
Обычный файл
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
38
TEMA9/Mod1.py
Обычный файл
38
TEMA9/Mod1.py
Обычный файл
@@ -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
|
||||||
31
TEMA9/Mod2.py
Обычный файл
31
TEMA9/Mod2.py
Обычный файл
@@ -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
|
||||||
11
TEMA9/Mod3.py
Обычный файл
11
TEMA9/Mod3.py
Обычный файл
@@ -0,0 +1,11 @@
|
|||||||
|
# Модуль 3
|
||||||
|
class Class1:
|
||||||
|
def zad_zn(self,znach):
|
||||||
|
self.data=znach
|
||||||
|
def otobraz(self):
|
||||||
|
print(self.data)
|
||||||
|
class Class2(Class1):
|
||||||
|
def otobraz(self):
|
||||||
|
print('значение =',self.data)
|
||||||
|
def otobraz(objekt):
|
||||||
|
print('значение объекта =',objekt)
|
||||||
81
TEMA9/Res22.txt
Обычный файл
81
TEMA9/Res22.txt
Обычный файл
@@ -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
|
||||||
Двоичные данные
TEMA9/Ris1.png
Обычный файл
Двоичные данные
TEMA9/Ris1.png
Обычный файл
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 14 KiB |
Двоичные данные
TEMA9/Ris2.png
Обычный файл
Двоичные данные
TEMA9/Ris2.png
Обычный файл
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 15 KiB |
22
TEMA9/SAU.py
Обычный файл
22
TEMA9/SAU.py
Обычный файл
@@ -0,0 +1,22 @@
|
|||||||
|
# SAU
|
||||||
|
class SAU:
|
||||||
|
def __init__(self,zn_param):
|
||||||
|
self.param=zn_param
|
||||||
|
self.ypr=[0,0]
|
||||||
|
|
||||||
|
def zdn_zn(self,upr):
|
||||||
|
self.x=upr
|
||||||
|
|
||||||
|
def model(self):
|
||||||
|
def inerz(x,T,yy):
|
||||||
|
return (x+T*yy)/(T+1)
|
||||||
|
|
||||||
|
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
|
||||||
|
y1=self.param[0]*y0 #Усилитель1
|
||||||
|
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
|
||||||
|
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
|
||||||
|
self.ypr[0]=y2
|
||||||
|
self.ypr[1]=y3
|
||||||
|
|
||||||
|
def otobraz(self):
|
||||||
|
print('y=',self.ypr[1])
|
||||||
Двоичные данные
TEMA9/input.bin
Обычный файл
Двоичные данные
TEMA9/input.bin
Обычный файл
Двоичный файл не отображается.
249
TEMA9/report.md
Обычный файл
249
TEMA9/report.md
Обычный файл
@@ -0,0 +1,249 @@
|
|||||||
|
# Отчет по Теме 9
|
||||||
|
Таболин Иван, А-01-23
|
||||||
|
## 1. Запуск и настройка рабочего каталога.
|
||||||
|
```py
|
||||||
|
import os
|
||||||
|
os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA9')
|
||||||
|
```
|
||||||
|
## 2. Создание классов и их наследников.
|
||||||
|
## 2.1. Создание автономного класса.
|
||||||
|
```py
|
||||||
|
class Class1:
|
||||||
|
def zad_zn(self,znach):
|
||||||
|
self.data=znach
|
||||||
|
def otobraz(self):
|
||||||
|
print(self.data)
|
||||||
|
|
||||||
|
|
||||||
|
z1=Class1()
|
||||||
|
z1
|
||||||
|
<__main__.Class1 object at 0x0000018646F32A50>
|
||||||
|
z2=Class1()
|
||||||
|
z1.zad_zn('экз. класса 1')
|
||||||
|
z2.zad_zn(-632.453)
|
||||||
|
z1.otobraz()
|
||||||
|
экз. класса 1
|
||||||
|
z2.otobraz()
|
||||||
|
-632.453
|
||||||
|
```
|
||||||
|
```py
|
||||||
|
z1.data='Новое значение атрибута у экз.1'
|
||||||
|
z1.otobraz()
|
||||||
|
Новое значение атрибута у экз.1
|
||||||
|
```
|
||||||
|
## 2.2. Создание класса-наследника.
|
||||||
|
```py
|
||||||
|
class Class2(Class1):
|
||||||
|
def otobraz(self):
|
||||||
|
print('значение =',self.data)
|
||||||
|
|
||||||
|
|
||||||
|
z3=Class2()
|
||||||
|
dir(z3)
|
||||||
|
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobraz', 'zad_zn']
|
||||||
|
```
|
||||||
|
```py
|
||||||
|
z3.zad_zn('Совсем новое')
|
||||||
|
z3.otobraz()
|
||||||
|
значение = Совсем новое
|
||||||
|
```
|
||||||
|
Сработал метод класса `Class2`
|
||||||
|
```py
|
||||||
|
z1.otobraz()
|
||||||
|
Новое значение атрибута у экз.1
|
||||||
|
del z1,z2,z3
|
||||||
|
```
|
||||||
|
## 3. Использование классов, содержащихся в модулях.
|
||||||
|
Создан модуль `Mod3.py` с кодом
|
||||||
|
```py
|
||||||
|
# Модуль 3
|
||||||
|
class Class1:
|
||||||
|
def zad_zn(self,znach):
|
||||||
|
self.data=znach
|
||||||
|
def otobraz(self):
|
||||||
|
print(self.data)
|
||||||
|
class Class2(Class1):
|
||||||
|
def otobraz(self):
|
||||||
|
print('значение =',self.data)
|
||||||
|
def otobraz(objekt):
|
||||||
|
print('значение объекта =',objekt)
|
||||||
|
```
|
||||||
|
Далее работаем в командной строке
|
||||||
|
```py
|
||||||
|
from Mod3 import Class1
|
||||||
|
z4=Class1()
|
||||||
|
z4.otobraz()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#35>", line 1, in <module>
|
||||||
|
z4.otobraz()
|
||||||
|
File "C:\Users\User\Desktop\python-labs\TEMA9\Mod3.py", line 6, in otobraz
|
||||||
|
print(self.data)
|
||||||
|
AttributeError: 'Class1' object has no attribute 'data'
|
||||||
|
```
|
||||||
|
|
||||||
|
```py
|
||||||
|
from Mod3 import Class1
|
||||||
|
z4=Class1()
|
||||||
|
z4.data='значение данного data у экз. 4'
|
||||||
|
z4.otobraz()
|
||||||
|
значение данного data у экз. 4
|
||||||
|
```
|
||||||
|
```py
|
||||||
|
import Mod3
|
||||||
|
z4=Mod3.Class2()
|
||||||
|
z4.zad_zn('класс из модуля')
|
||||||
|
z4.otobraz()
|
||||||
|
значение = класс из модуля
|
||||||
|
Mod3.otobraz('Объект')
|
||||||
|
значение объекта = Объект
|
||||||
|
```
|
||||||
|
## 4. Использование специальных методов.
|
||||||
|
```py
|
||||||
|
class Class3(Class2):
|
||||||
|
def __init__(self,znach):
|
||||||
|
self.data=znach
|
||||||
|
def __add__(self,drug_zn):
|
||||||
|
return Class3(self.data+drug_zn)
|
||||||
|
def zad_dr_zn(self,povtor):
|
||||||
|
self.data*=povtor
|
||||||
|
|
||||||
|
z5=Class3('abc')
|
||||||
|
z5.otobraz()
|
||||||
|
значение = abc
|
||||||
|
z6=z5+'def'
|
||||||
|
z6.otobraz()
|
||||||
|
значение = abcdef
|
||||||
|
z6.zad_dr_zn(3)
|
||||||
|
z6.otobraz()
|
||||||
|
значение = abcdefabcdefabcdef
|
||||||
|
```
|
||||||
|
## 5. Присоединение атрибутов к классу.
|
||||||
|
```py
|
||||||
|
dir(Class3)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobraz', 'zad_dr_zn', 'zad_zn']
|
||||||
|
Class3.fio='Иванов И.И.'
|
||||||
|
dir(Class3)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobraz', 'zad_dr_zn', 'zad_zn']
|
||||||
|
'fio' in dir(Class3)
|
||||||
|
True
|
||||||
|
z7=Class3(123)
|
||||||
|
dir(z7)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobraz', 'zad_dr_zn', 'zad_zn']
|
||||||
|
dir(z7)==dir(Class3)
|
||||||
|
False
|
||||||
|
z7.rozden='1987'
|
||||||
|
dir(z7)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobraz', 'rozden', 'zad_dr_zn', 'zad_zn']
|
||||||
|
'rozden' in dir(z7)
|
||||||
|
True
|
||||||
|
'rozden' in dir(Class3)
|
||||||
|
False
|
||||||
|
```
|
||||||
|
## 6. Выявление родительских классов.
|
||||||
|
```py
|
||||||
|
Class3.__bases__
|
||||||
|
(<class '__main__.Class2'>,)
|
||||||
|
Class2.__bases__
|
||||||
|
(<class '__main__.Class1'>,)
|
||||||
|
Class1.__bases__
|
||||||
|
Class3.__mro__
|
||||||
|
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
|
||||||
|
ZeroDivisionError.__mro__
|
||||||
|
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
|
||||||
|
```
|
||||||
|
## 7. Создание свойства класса.
|
||||||
|
```py
|
||||||
|
class Class4:
|
||||||
|
def __init__(sam,znach):
|
||||||
|
sam.__prm=znach
|
||||||
|
def chten(sam):
|
||||||
|
return sam.__prm
|
||||||
|
def zapis(sam,znch):
|
||||||
|
sam.__prm=znch
|
||||||
|
def stiran(sam):
|
||||||
|
del sam.__prm
|
||||||
|
svojstvo=property(chten,zapis,stiran)
|
||||||
|
|
||||||
|
exempl=Class4(12)
|
||||||
|
exempl.svojstvo
|
||||||
|
12
|
||||||
|
exempl.svojstvo=45
|
||||||
|
print(exempl.svojstvo)
|
||||||
|
45
|
||||||
|
del exempl.svojstvo
|
||||||
|
exempl.svojstvo
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#113>", line 1, in <module>
|
||||||
|
exempl.svojstvo
|
||||||
|
File "<pyshell#106>", line 5, in chten
|
||||||
|
return sam.__prm
|
||||||
|
AttributeError: 'Class4' object has no attribute '_Class4__prm'
|
||||||
|
```
|
||||||
|
## 8. Пример.
|
||||||
|
Представление в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
|
||||||
|
Модуль `SAU.py`
|
||||||
|
```py
|
||||||
|
class SAU:
|
||||||
|
def __init__(self,zn_param):
|
||||||
|
self.param=zn_param
|
||||||
|
self.ypr=[0,0]
|
||||||
|
|
||||||
|
def zdn_zn(self,upr):
|
||||||
|
self.x=upr
|
||||||
|
|
||||||
|
def model(self):
|
||||||
|
def inerz(x,T,yy):
|
||||||
|
return (x+T*yy)/(T+1)
|
||||||
|
|
||||||
|
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
|
||||||
|
y1=self.param[0]*y0 #Усилитель1
|
||||||
|
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
|
||||||
|
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
|
||||||
|
self.ypr[0]=y2
|
||||||
|
self.ypr[1]=y3
|
||||||
|
|
||||||
|
def otobraz(self):
|
||||||
|
print('y=',self.ypr[1])
|
||||||
|
```
|
||||||
|
Содержимое модуля `test_SAU.py` для тестирования программы
|
||||||
|
```py
|
||||||
|
###main_SAU
|
||||||
|
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
||||||
|
from SAU import *
|
||||||
|
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
|
||||||
|
SAUe=SAU(prm) # Создаём экземпляр класса
|
||||||
|
yt=[]
|
||||||
|
for xt in xx: # Прохождение входного сигнала
|
||||||
|
SAUe.zdn_zn(xt)
|
||||||
|
SAUe.model()
|
||||||
|
SAUe.otobraz()
|
||||||
|
yt.append(SAUe.ypr[1])
|
||||||
|
import pylab
|
||||||
|
pylab.plot(yt)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
Результат запуска теста
|
||||||
|
```py
|
||||||
|
y= 0.0
|
||||||
|
y= 0.2173913043478261
|
||||||
|
y= 0.4763705103969754
|
||||||
|
y= 0.686594887811293
|
||||||
|
y= 0.8199324616478645
|
||||||
|
y= 0.8837201137353929
|
||||||
|
y= 0.8994188484874774
|
||||||
|
y= 0.8892777072047301
|
||||||
|
y= 0.870097963179993
|
||||||
|
y= 0.8518346102696789
|
||||||
|
y= 0.8387499784485772
|
||||||
|
y= 0.8314204114211459
|
||||||
|
y= 0.8286051955249649
|
||||||
|
y= 0.8285656555914835
|
||||||
|
y= 0.8297915186846528
|
||||||
|
y= 0.8312697736438287
|
||||||
|
y= 0.8324765218921963
|
||||||
|
y= 0.8332456979978418
|
||||||
|
y= 0.8336163607592184
|
||||||
|
y= 0.8337101315489143
|
||||||
|
y= 0.833654237067147
|
||||||
|
```
|
||||||
|

|
||||||
81
TEMA9/task.md
Обычный файл
81
TEMA9/task.md
Обычный файл
@@ -0,0 +1,81 @@
|
|||||||
|
# Общее контрольное задание по Теме 9
|
||||||
|
Таболин Иван, А-01-23
|
||||||
|
## Задание
|
||||||
|
Создайте и запишите в модуль класс, содержащий следующие компоненты:
|
||||||
|
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамиилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
|
||||||
|
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
|
||||||
|
- метод для обеспечения перевода сотрудника из одного отдела в другой;
|
||||||
|
- метод для изменения должности сотрудника;
|
||||||
|
- свойство, содержащее перечень (список) поощрений сотрудника.
|
||||||
|
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
|
||||||
|
## Решение
|
||||||
|
```py
|
||||||
|
class Workers:
|
||||||
|
def __init__(self,fio='',otdel='',dolznost='',oklad=0):
|
||||||
|
self.fio=fio
|
||||||
|
self.otdel=otdel
|
||||||
|
self.dolznost=dolznost
|
||||||
|
self.oklad=oklad
|
||||||
|
self.__poos=[]
|
||||||
|
|
||||||
|
def pov_oklad(self,uvel):
|
||||||
|
self.oklad+=uvel
|
||||||
|
print('Сотрудник', self.fio, 'теперь имеет оклад', self.oklad)
|
||||||
|
return self.oklad
|
||||||
|
|
||||||
|
def perevod(self,new_otdel):
|
||||||
|
self.otdel=new_otdel
|
||||||
|
print('Сотрудник', self.fio, 'переведен в отдел', self.otdel)
|
||||||
|
return self.otdel
|
||||||
|
|
||||||
|
def new_dolznost(self,new_dolzn):
|
||||||
|
self.dolznost=new_dolzn
|
||||||
|
print('Сотрудник', self.fio, 'переведен на должность', self.dolznost)
|
||||||
|
return self.dolznost
|
||||||
|
@property
|
||||||
|
def view_poos(self):
|
||||||
|
print('Поощрения сотрудника', self.fio)
|
||||||
|
print(self.__poos)
|
||||||
|
return self.__poos
|
||||||
|
|
||||||
|
def add_poos(self, new_poos):
|
||||||
|
self.__poos.append(new_poos)
|
||||||
|
```
|
||||||
|
Тестирование
|
||||||
|
```py
|
||||||
|
worker1=Workers('TabolinIA','IVTI','bakalavr_3',2400)
|
||||||
|
worker2=Workers('BerezhkovDA','IVTI','bakalavr_3',2400)
|
||||||
|
|
||||||
|
print('ФИО:', worker1.fio,'\n', 'Должность:',worker1.dolznost,'\n', 'Институт:', worker1.otdel,'\n', 'Оклад (стипендия):', worker1.oklad)
|
||||||
|
ФИО: TabolinIA
|
||||||
|
Должность: bakalavr_3
|
||||||
|
Институт: IVTI
|
||||||
|
Оклад (стипендия): 2400
|
||||||
|
|
||||||
|
worker1.new_dolznost('bakalavr_4')
|
||||||
|
Сотрудник TabolinIA переведен на должность bakalavr_4
|
||||||
|
'bakalavr_4'
|
||||||
|
print('ФИО:', worker1.fio,'\n', 'Должность:',worker1.dolznost,'\n', 'Институт:', worker1.otdel,'\n', 'Оклад (стипендия):', worker1.oklad)
|
||||||
|
ФИО: TabolinIA
|
||||||
|
Должность: bakalavr_4
|
||||||
|
Институт: IVTI
|
||||||
|
Оклад (стипендия): 2400
|
||||||
|
|
||||||
|
worker2.perevod('GPI')
|
||||||
|
Сотрудник BerezhkovDA переведен в отдел GPI
|
||||||
|
'GPI'
|
||||||
|
worker2.pov_oklad(worker2.oklad*2)
|
||||||
|
Сотрудник BerezhkovDA теперь имеет оклад 7200
|
||||||
|
7200
|
||||||
|
|
||||||
|
print('ФИО:', worker2.fio,'\n', 'Должность:',worker2.dolznost,'\n', 'Институт:', worker2.otdel,'\n', 'Оклад (стипендия):', worker2.oklad)
|
||||||
|
ФИО: BerezhkovDA
|
||||||
|
Должность: bakalavr_3
|
||||||
|
Институт: GPI
|
||||||
|
Оклад (стипендия): 7200
|
||||||
|
|
||||||
|
worker1.add_poos('Благодарность 08.12.2025')
|
||||||
|
worker1.view_poos
|
||||||
|
Поощрения сотрудника TabolinIA
|
||||||
|
['Благодарность 08.12.2025']
|
||||||
|
```
|
||||||
129
TEMA9/test.md
Обычный файл
129
TEMA9/test.md
Обычный файл
@@ -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
|
||||||
|
```
|
||||||
|

|
||||||
14
TEMA9/test_SAU.py
Обычный файл
14
TEMA9/test_SAU.py
Обычный файл
@@ -0,0 +1,14 @@
|
|||||||
|
###main_SAU
|
||||||
|
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
||||||
|
from SAU import *
|
||||||
|
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
|
||||||
|
SAUe=SAU(prm) # Создаём экземпляр класса
|
||||||
|
yt=[]
|
||||||
|
for xt in xx: # Прохождение входного сигнала
|
||||||
|
SAUe.zdn_zn(xt)
|
||||||
|
SAUe.model()
|
||||||
|
SAUe.otobraz()
|
||||||
|
yt.append(SAUe.ypr[1])
|
||||||
|
import pylab
|
||||||
|
pylab.plot(yt)
|
||||||
|
pylab.show()
|
||||||
Ссылка в новой задаче
Block a user