@ -0,0 +1,21 @@
|
|||||||
|
import random
|
||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
os.chdir('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA6')
|
||||||
|
|
||||||
|
random.seed(5)
|
||||||
|
|
||||||
|
sps = []
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
sps.append(random.randint(2,5))
|
||||||
|
|
||||||
|
fp = open('test.txt','w')
|
||||||
|
st = str(sps[1:])
|
||||||
|
print(st)
|
||||||
|
st = st.replace("[","")
|
||||||
|
st = st.replace("]","")
|
||||||
|
print(st)
|
||||||
|
fp.write(st)
|
||||||
|
fp.close()
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
random.seed(5)
|
||||||
|
|
||||||
|
sps = []
|
||||||
|
for i in range(50):
|
||||||
|
sps.append(random.randint(-1, 1))
|
||||||
|
sps2 = [random.randint(-1, 1) for i in range(50)]
|
||||||
|
print("Полученный список ",sps)
|
||||||
|
|
||||||
|
men = 0
|
||||||
|
bol = 0
|
||||||
|
rav = 0
|
||||||
|
|
||||||
|
for i in range(1,50):
|
||||||
|
if sps[i-1] < sps[i]:
|
||||||
|
bol+=1
|
||||||
|
elif sps[i-1] > sps[i]:
|
||||||
|
men+=1
|
||||||
|
else:
|
||||||
|
rav+=1
|
||||||
|
print(f"Больше = {bol}, меньше = {men}, равно = {rav}")
|
||||||
|
|
||||||
|
|
||||||
|
После Ширина: | Высота: | Размер: 63 KiB |
|
После Ширина: | Высота: | Размер: 29 KiB |
@ -1,6 +1,6 @@
|
|||||||
# Тема 0: образец оформления материалов
|
# Тема 0: образец оформления материалов
|
||||||
|
|
||||||
* `README.md` — этот документ, в своих темах создавать не нужно;
|
* `README.md` — этот документ, в своих темах создавать не нужно;
|
||||||
* [`report.md`](report.md) — отчет;
|
* [`report.md`](TEMA0/report.md) — отчет;
|
||||||
* [`task.md`](task.md) — общее контрольное задание;
|
* [`task.md`](TEMA0/task.md) — общее контрольное задание;
|
||||||
* [`test.md`](test.md) — индивидуальное контрольное задание.
|
* [`test.md`](TEMA0/test.md) — индивидуальное контрольное задание.
|
||||||
|
|||||||
@ -0,0 +1,32 @@
|
|||||||
|
'''2 Создайте объект-словарь с 3 элементами, в которых ключами являются
|
||||||
|
строки с названиями профессий, а значениями - списки с элементами:
|
||||||
|
средняя зарплата по соответствующей профессии, вероятность
|
||||||
|
устроиться на работу и возможность профессионального роста (логическое значение).
|
||||||
|
Значения придумайте самостоятельно.'''
|
||||||
|
dic1 = {'Программист': [500000,0.9, False], 'Уборщик': [1000000000, 1.0, True],
|
||||||
|
'Президент': [10, 0.1, True]}
|
||||||
|
print(dic1)
|
||||||
|
|
||||||
|
''' 3 Создайте объект-строку с названием одной из профессий и
|
||||||
|
напишите инструкцию, позволяющую для этого объекта
|
||||||
|
определить из словаря список с ее характеристиками.'''
|
||||||
|
|
||||||
|
st = list(dic1.keys())
|
||||||
|
#print(st)
|
||||||
|
strk = ('Характеристики профессии {prof}: {har}')
|
||||||
|
print(strk.format(prof = st[0], har = dic1[st[0]]))
|
||||||
|
|
||||||
|
'''4 Напишите инструкцию, создающую на основе словаря
|
||||||
|
список со значениями средних зарплат по представленным в словаре профессиям.'''
|
||||||
|
|
||||||
|
spis = list(dic1.values())
|
||||||
|
spis = sum(spis,[])
|
||||||
|
zp = spis[0::3]
|
||||||
|
print('Средние зарплаты:', zp)
|
||||||
|
|
||||||
|
''' 5 Напишите инструкцию, вычисляющую
|
||||||
|
среднюю вероятность трудоустройства по представленным в словаре профессиям.'''
|
||||||
|
|
||||||
|
ver = spis[1::3]
|
||||||
|
#print(ver)
|
||||||
|
print('Средняя вероятность трудоустройства:', round(sum(ver)/len(ver),2))
|
||||||
@ -0,0 +1,625 @@
|
|||||||
|
Python 3.13.2 (tags/v3.13.2:4f8bb39, Feb 4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)] on win32
|
||||||
|
Type "help", "copyright", "credits" or "license()" for more information.
|
||||||
|
logiz1=bool(56)
|
||||||
|
logiz2=bool(0)
|
||||||
|
logiz2=bool(0)
|
||||||
|
logiz4=bool("")
|
||||||
|
logiz4
|
||||||
|
False
|
||||||
|
logiz3=bool("Beta")
|
||||||
|
|
||||||
|
|
||||||
|
tt1=int(198.6) #Отбрасывается дробная часть
|
||||||
|
tt1
|
||||||
|
198
|
||||||
|
tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
|
||||||
|
tt2
|
||||||
|
-76
|
||||||
|
tt3=int("B",16)
|
||||||
|
tt3
|
||||||
|
11
|
||||||
|
tt4=int("71",8)
|
||||||
|
tt4
|
||||||
|
57
|
||||||
|
tt5=int("98.76")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#16>", line 1, in <module>
|
||||||
|
tt5=int("98.76")
|
||||||
|
ValueError: invalid literal for int() with base 10: '98.76'
|
||||||
|
# Т.к. число является вещественным и представлено в виде строки, то для преобразования его в целочисленный тип данных нужно сперва преобразовать строку в тип данных float, а потом из float в int
|
||||||
|
|
||||||
|
|
||||||
|
flt1=float(789)
|
||||||
|
flt1
|
||||||
|
789.0
|
||||||
|
flt2=float(-6.78e2)
|
||||||
|
flt2
|
||||||
|
-678.0
|
||||||
|
flt3=float("Infinity")
|
||||||
|
flt3
|
||||||
|
inf
|
||||||
|
flt4=float("-inf")
|
||||||
|
flt4
|
||||||
|
-inf
|
||||||
|
|
||||||
|
|
||||||
|
hh=123
|
||||||
|
dv1=bin(hh) #Преобразование в строку с двоичным представлением
|
||||||
|
dv1
|
||||||
|
'0b1111011'
|
||||||
|
vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
|
||||||
|
vos1
|
||||||
|
'0o173'
|
||||||
|
shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
|
||||||
|
shs1
|
||||||
|
'0x7b'
|
||||||
|
int(dv1,2)
|
||||||
|
123
|
||||||
|
int(vos1,8)
|
||||||
|
123
|
||||||
|
int(shs1,8*2)
|
||||||
|
123
|
||||||
|
|
||||||
|
|
||||||
|
strk1=str(23.6)
|
||||||
|
strk1
|
||||||
|
'23.6'
|
||||||
|
strk2=str(logiz3)
|
||||||
|
strk2
|
||||||
|
'True'
|
||||||
|
strk3=str(["A","B","C"]) #Преобразуем список
|
||||||
|
strk3
|
||||||
|
"['A', 'B', 'C']"
|
||||||
|
strk4=str(("A","B","C")) #Преобразуем кортеж
|
||||||
|
strk4
|
||||||
|
"('A', 'B', 'C')"
|
||||||
|
strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
|
||||||
|
strk5
|
||||||
|
"{'A': 1, 'B': 2, 'C': 9}"
|
||||||
|
|
||||||
|
|
||||||
|
spis1=list("Строка символов") #Заданная строка разделяется на символы
|
||||||
|
spis1
|
||||||
|
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
|
||||||
|
spis2=list((124,236,-15,908)) #Кортеж превращается в список
|
||||||
|
spis2
|
||||||
|
[124, 236, -15, 908]
|
||||||
|
spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
|
||||||
|
spis3
|
||||||
|
['A', 'B', 'C']
|
||||||
|
spis3 = list({"A":1,"B":2,"C":9}.values())
|
||||||
|
spis3
|
||||||
|
[1, 2, 9]
|
||||||
|
|
||||||
|
|
||||||
|
kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
|
||||||
|
лщке
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#68>", line 1, in <module>
|
||||||
|
лщке
|
||||||
|
NameError: name 'лщке' is not defined
|
||||||
|
kort7
|
||||||
|
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
|
||||||
|
kort8=tuple(spis2) #Преобразование списка в кортеж
|
||||||
|
kort8
|
||||||
|
(124, 236, -15, 908)
|
||||||
|
kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
|
||||||
|
kort9
|
||||||
|
('A', 'B', 'C')
|
||||||
|
|
||||||
|
|
||||||
|
del strk5, kort8
|
||||||
|
strk5
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#88>", line 1, in <module>
|
||||||
|
strk5
|
||||||
|
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
|
||||||
|
dir()
|
||||||
|
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'dv1', 'flt1', 'flt2', 'flt3', 'flt4', 'hh', 'kort7', 'kort9', 'logiz1', 'logiz2', 'logiz3', 'logiz4', 'shs1', 'spis1', 'spis2', 'spis3', 'strk1', 'strk2', 'strk3', 'strk4', 'tt1', 'tt2', 'tt3', 'tt4', 'vos1']
|
||||||
|
fam = "Хатюхин Е.С."
|
||||||
|
fam_ls = list(fam)
|
||||||
|
fam_ls
|
||||||
|
['Х', 'а', 'т', 'ю', 'х', 'и', 'н', ' ', 'Е', '.', 'С', '.']
|
||||||
|
fam_krt = tuple(fam_ls)
|
||||||
|
fam_krt
|
||||||
|
('Х', 'а', 'т', 'ю', 'х', 'и', 'н', ' ', 'Е', '.', 'С', '.')
|
||||||
|
fam_str = str(fam_krt)
|
||||||
|
fam_str
|
||||||
|
"('Х', 'а', 'т', 'ю', 'х', 'и', 'н', ' ', 'Е', '.', 'С', '.')"
|
||||||
|
|
||||||
|
"strk5" in dir()
|
||||||
|
False
|
||||||
|
|
||||||
|
12+7+90 # Сложение целых чисел
|
||||||
|
109
|
||||||
|
5.689e-1 - 0.456 #Вычитание вещественных чисел
|
||||||
|
0.11289999999999994
|
||||||
|
23.6+54 #Сложение вещественного и целого чисел
|
||||||
|
77.6
|
||||||
|
14-56.7+89 # Сложение и вычитание целых и вещественных чисел
|
||||||
|
46.3
|
||||||
|
|
||||||
|
|
||||||
|
-6.7*12 #Умножение вещественного числа на целое число
|
||||||
|
-80.4
|
||||||
|
-234.5/6 #Деление вещественного числа на целое
|
||||||
|
-39.083333333333336
|
||||||
|
a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
|
||||||
|
type(a)
|
||||||
|
<class 'float'>
|
||||||
|
a
|
||||||
|
3.9555555555555557
|
||||||
|
|
||||||
|
|
||||||
|
b=178//45 #Деление двух целых чисел
|
||||||
|
b
|
||||||
|
3
|
||||||
|
c=-24.6//12.1 #Деление двух вещественных чисел
|
||||||
|
c
|
||||||
|
-3.0
|
||||||
|
d = -52.2 // 5
|
||||||
|
d
|
||||||
|
-11.0
|
||||||
|
148%33 #Остаток от деления двух целых чисел
|
||||||
|
16
|
||||||
|
12.6%3.8 #Остаток от деления двух вещественных чисел
|
||||||
|
1.2000000000000002
|
||||||
|
12.6%4
|
||||||
|
0.5999999999999996
|
||||||
|
12%4.0
|
||||||
|
0.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
14**3 #Целое число возводится в целую степень
|
||||||
|
2744
|
||||||
|
e=2.7**3.6 #Вещественное число возводится в вещественную степень
|
||||||
|
e
|
||||||
|
35.719843790663525
|
||||||
|
14**(1/2)
|
||||||
|
3.7416573867739413
|
||||||
|
2**(1/2)
|
||||||
|
1.4142135623730951
|
||||||
|
km1 = 5 - 7j
|
||||||
|
km2 = 10 - 14j
|
||||||
|
km1;km2
|
||||||
|
(5-7j)
|
||||||
|
(10-14j)
|
||||||
|
km1 + km2
|
||||||
|
(15-21j)
|
||||||
|
km1-km2
|
||||||
|
(-5+7j)
|
||||||
|
km1//km2
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#10>", line 1, in <module>
|
||||||
|
km1//km2
|
||||||
|
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
|
||||||
|
km1/km2
|
||||||
|
(0.5-0j)
|
||||||
|
km1**km2
|
||||||
|
(-1312.815003718761-3445.7568233592656j)
|
||||||
|
km1%km2
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#13>", line 1, in <module>
|
||||||
|
km1%km2
|
||||||
|
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dv1=9
|
||||||
|
dv2=~dv1
|
||||||
|
dv2
|
||||||
|
-10
|
||||||
|
dv3 = bin(dv1)
|
||||||
|
dv3
|
||||||
|
'0b1001'
|
||||||
|
dv4 = bin(dv2)
|
||||||
|
dv4
|
||||||
|
'-0b1010'
|
||||||
|
dec(110)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#24>", line 1, in <module>
|
||||||
|
dec(110)
|
||||||
|
NameError: name 'dec' is not defined
|
||||||
|
int(110,2)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#25>", line 1, in <module>
|
||||||
|
int(110,2)
|
||||||
|
TypeError: int() can't convert non-string with explicit base
|
||||||
|
int(0b0110,2)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#26>", line 1, in <module>
|
||||||
|
int(0b0110,2)
|
||||||
|
TypeError: int() can't convert non-string with explicit base
|
||||||
|
int('0b0110',2)
|
||||||
|
6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
7&9 # 111 и 1001 = 0001
|
||||||
|
1
|
||||||
|
7&8 # 111 и 1000 = 0000
|
||||||
|
0
|
||||||
|
6&9
|
||||||
|
0
|
||||||
|
7&3
|
||||||
|
3
|
||||||
|
15&3
|
||||||
|
3
|
||||||
|
15&7
|
||||||
|
7
|
||||||
|
7
|
||||||
|
7
|
||||||
|
|
||||||
|
|
||||||
|
7|9 # 111 или 1001 = 1111
|
||||||
|
15
|
||||||
|
bin(15&3)
|
||||||
|
'0b11'
|
||||||
|
7|8 # 111 или 1000 = 1111
|
||||||
|
15
|
||||||
|
14|5 # 1110 или 0101 = 1111
|
||||||
|
15
|
||||||
|
7|3
|
||||||
|
7
|
||||||
|
|
||||||
|
|
||||||
|
14^5 # 1110 исключающее или 0101 = 1011
|
||||||
|
11
|
||||||
|
|
||||||
|
|
||||||
|
h=14 #Двоичное представление = 1110
|
||||||
|
g=h<<2 # Новое двоичное представление = 111000
|
||||||
|
g
|
||||||
|
56
|
||||||
|
g1=h>>1 # Новое двоичное представление = 0111
|
||||||
|
g1
|
||||||
|
7
|
||||||
|
g2=h>>2 # Новое двоичное представление = 0011
|
||||||
|
g2
|
||||||
|
3
|
||||||
|
|
||||||
|
|
||||||
|
bin1 = int('0101010',2)
|
||||||
|
bin2 = int('1010101',2)
|
||||||
|
bin1;bin2
|
||||||
|
42
|
||||||
|
85
|
||||||
|
bin1&bin2
|
||||||
|
0
|
||||||
|
bin1|bin2
|
||||||
|
127
|
||||||
|
bin1^bin2
|
||||||
|
127
|
||||||
|
bin3 = ~bin1
|
||||||
|
bin3
|
||||||
|
-43
|
||||||
|
|
||||||
|
'Система '+'регулирования' #Соединение двух строк символов
|
||||||
|
'Система регулирования'
|
||||||
|
['abc','de','fg']+['hi','jkl'] # Объединение двух списков
|
||||||
|
['abc', 'de', 'fg', 'hi', 'jkl']
|
||||||
|
('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
|
||||||
|
('abc', 'de', 'fg', 'hi', 'jkl')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
'ля-'*5 #Повторение строки 5 раз
|
||||||
|
'ля-ля-ля-ля-ля-'
|
||||||
|
['ку','-']*3 #Повторение списка 3 раза
|
||||||
|
['ку', '-', 'ку', '-', 'ку', '-']
|
||||||
|
('кис','-')*4 #Повторение кортежа 4 раза
|
||||||
|
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
|
||||||
|
signal1=[0]*3+[1]*99
|
||||||
|
signal1
|
||||||
|
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
signal2=(0,)*3+(1,)*5+(0,)*7
|
||||||
|
signal2
|
||||||
|
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
|
||||||
|
|
||||||
|
|
||||||
|
stroka='Система автоматического управления'
|
||||||
|
stroka
|
||||||
|
'Система автоматического управления'
|
||||||
|
'автомат' in stroka #Наличие подстроки в строке
|
||||||
|
True
|
||||||
|
'ку' in ['ку','-']*3 #Наличие контекста в списке
|
||||||
|
True
|
||||||
|
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
|
stroka='Температура = %g %s %g'
|
||||||
|
stroka
|
||||||
|
'Температура = %g %s %g'
|
||||||
|
stroka % (16,' меньше ',25)
|
||||||
|
'Температура = 16 меньше 25'
|
||||||
|
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
|
||||||
|
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
|
||||||
|
'Температура = 16 меньше 25'
|
||||||
|
zz=-12
|
||||||
|
zz
|
||||||
|
-12
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
zz=-12
|
||||||
|
zz
|
||||||
|
-12
|
||||||
|
|
||||||
|
|
||||||
|
zz+=5 # Значение zz увеличивается на 5
|
||||||
|
zz
|
||||||
|
-7
|
||||||
|
zz-=3 # Значение уменьшается на 3
|
||||||
|
zz
|
||||||
|
-10
|
||||||
|
|
||||||
|
|
||||||
|
zz/=2
|
||||||
|
zz
|
||||||
|
-5.0
|
||||||
|
zz*=5
|
||||||
|
zz
|
||||||
|
-25.0
|
||||||
|
a = 'bb'
|
||||||
|
a *= 2
|
||||||
|
a
|
||||||
|
'bbbb'
|
||||||
|
|
||||||
|
|
||||||
|
zz //= 4
|
||||||
|
zz
|
||||||
|
-7.0
|
||||||
|
a = 20
|
||||||
|
a //= 6
|
||||||
|
a
|
||||||
|
3
|
||||||
|
a %= 2
|
||||||
|
a
|
||||||
|
1
|
||||||
|
a = 2
|
||||||
|
a **= 4
|
||||||
|
a
|
||||||
|
16
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
w=v=10 # Переменным присваивается одно и то же значение
|
||||||
|
w
|
||||||
|
10
|
||||||
|
v
|
||||||
|
10
|
||||||
|
n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
|
||||||
|
n1
|
||||||
|
11
|
||||||
|
n2
|
||||||
|
-3
|
||||||
|
n3
|
||||||
|
'all'
|
||||||
|
n1,n2,n3="11", "-3", "all"
|
||||||
|
n1;n2;n3
|
||||||
|
'11'
|
||||||
|
'-3'
|
||||||
|
'all'
|
||||||
|
n1,n2,n3=[11,-3,'all']
|
||||||
|
n1;n2;n3
|
||||||
|
11
|
||||||
|
-3
|
||||||
|
'all'
|
||||||
|
n1,n2,n3={11: 3,-3:7,'all':8}
|
||||||
|
n1;n2;n3
|
||||||
|
11
|
||||||
|
-3
|
||||||
|
'all'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
w==v
|
||||||
|
True
|
||||||
|
w>v
|
||||||
|
False
|
||||||
|
w<v
|
||||||
|
False
|
||||||
|
w<=v
|
||||||
|
True
|
||||||
|
w>=v
|
||||||
|
True
|
||||||
|
w!=v
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||||
|
'book' in mnoz1
|
||||||
|
True
|
||||||
|
'cap' in mnoz1
|
||||||
|
False
|
||||||
|
|
||||||
|
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||||
|
'Vologda' in dic1
|
||||||
|
True
|
||||||
|
'Pskov' in dic1
|
||||||
|
False
|
||||||
|
56 in dic1.values()
|
||||||
|
True
|
||||||
|
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
|
||||||
|
'UII' in dct1['Depart']
|
||||||
|
True
|
||||||
|
dct1['Depart'][1] == 'MM'
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
|
a=17
|
||||||
|
b=-6
|
||||||
|
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
|
||||||
|
True
|
||||||
|
(5>6) and 'cap' in mnoz1 and not(56 in dic1.values())
|
||||||
|
False
|
||||||
|
(5<6) and 'cap' in mnoz1 and not(56 in dic1.values())
|
||||||
|
False
|
||||||
|
(4==2*2) and (2**4 == 16) and not(100 > 1000)
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
|
||||||
|
w is v
|
||||||
|
True
|
||||||
|
w1=['A','B']
|
||||||
|
v1=['A','B']
|
||||||
|
w1 is v1
|
||||||
|
False
|
||||||
|
w1=v1=['A','B']
|
||||||
|
w1 is v1
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
stroka='Микропроцессорная система управления'
|
||||||
|
dir(stroka)
|
||||||
|
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
|
||||||
|
|
||||||
|
|
||||||
|
stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
|
||||||
|
5
|
||||||
|
stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
|
||||||
|
4
|
||||||
|
stroka.replace(' у',' автоматического у')
|
||||||
|
'Микропроцессорная система автоматического управления'
|
||||||
|
spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
|
||||||
|
spis22
|
||||||
|
['Микропроцессорная', 'система', 'управления']
|
||||||
|
stroka.upper() #Возвращает строку со всеми заглавными буквами
|
||||||
|
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
|
||||||
|
stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
|
||||||
|
stroka3
|
||||||
|
'Микропроцессорная система управления'
|
||||||
|
stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
|
||||||
|
('Микропроце', 'с', 'сорная система управления')
|
||||||
|
stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
|
||||||
|
('Микропроцессорная си', 'с', 'тема управления')
|
||||||
|
|
||||||
|
|
||||||
|
strk1='Момент времени {}, значение = {}'
|
||||||
|
strk1.format(1,89.7)
|
||||||
|
'Момент времени 1, значение = 89.7'
|
||||||
|
strk2='Момент времени {1}, значение = {0}:{2}'
|
||||||
|
strk2.format(36.7,2,'норма!')
|
||||||
|
'Момент времени 2, значение = 36.7:норма!'
|
||||||
|
strk3='Момент времени {num}, значение = {znch}'
|
||||||
|
strk3.format(znch=89.7,num=2)
|
||||||
|
'Момент времени 2, значение = 89.7'
|
||||||
|
|
||||||
|
|
||||||
|
sp = ['a','b','c','1','5']
|
||||||
|
sp
|
||||||
|
['a', 'b', 'c', '1', '5']
|
||||||
|
spsk = sp
|
||||||
|
dir(spsk)
|
||||||
|
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
|
||||||
|
dir(spsk)
|
||||||
|
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
|
||||||
|
spsk.pop(2)
|
||||||
|
'c'
|
||||||
|
spsk.append('c')
|
||||||
|
spsk
|
||||||
|
['a', 'b', '1', '5', 'c']
|
||||||
|
spsk.insert(2,'a')
|
||||||
|
spsk
|
||||||
|
['a', 'b', 'a', '1', '5', 'c']
|
||||||
|
spsk.count('a')
|
||||||
|
2
|
||||||
|
spsk = sp
|
||||||
|
spsk.pop(2)
|
||||||
|
'a'
|
||||||
|
spsk
|
||||||
|
['a', 'b', '1', '5', 'c']
|
||||||
|
sp.pop(1)
|
||||||
|
'b'
|
||||||
|
sp
|
||||||
|
['a', '1', '5', 'c']
|
||||||
|
|
||||||
|
|
||||||
|
kor = ('a','b','a','1','2')
|
||||||
|
kor
|
||||||
|
('a', 'b', 'a', '1', '2')
|
||||||
|
dir(kor)
|
||||||
|
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
|
||||||
|
kor.index('1')
|
||||||
|
3
|
||||||
|
kor.count('a')
|
||||||
|
2
|
||||||
|
kor.count(a)
|
||||||
|
0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sl = {"A":3, "B":4}
|
||||||
|
sl
|
||||||
|
{'A': 3, 'B': 4}
|
||||||
|
dir(sl)
|
||||||
|
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
|
||||||
|
sl.keys()
|
||||||
|
dict_keys(['A', 'B'])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Общее КЗ
|
||||||
|
a = int("45", 8)
|
||||||
|
a
|
||||||
|
37
|
||||||
|
D={"усиление":23, "запаздывание":12, "постоянная времени":78}
|
||||||
|
spis1=list(D)
|
||||||
|
spis2=list(D.values())
|
||||||
|
spis1
|
||||||
|
['усиление', 'запаздывание', 'постоянная времени']
|
||||||
|
spis2
|
||||||
|
[23, 12, 78]
|
||||||
|
kor=tuple(spis1)+tuple(spis2)
|
||||||
|
kor
|
||||||
|
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
|
||||||
|
((1768//24.8)%3)**2.4
|
||||||
|
5.278031643091577
|
||||||
|
((~(13&27))^14)<<2
|
||||||
|
-32
|
||||||
|
spis3 = ['колебат']*4
|
||||||
|
spis3
|
||||||
|
['колебат', 'колебат', 'колебат', 'колебат']
|
||||||
|
'аткол' in spis3[1] + spis3[2]
|
||||||
|
True
|
||||||
|
dir(D)
|
||||||
|
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
|
||||||
|
D.keys()
|
||||||
|
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
|
||||||
|
D.values()
|
||||||
|
dict_values([23, 12, 78])
|
||||||
|
help(D.keys)
|
||||||
|
Help on built-in function keys:
|
||||||
|
|
||||||
|
keys() method of builtins.dict instance
|
||||||
|
Return a set-like object providing a view on the dict's keys.
|
||||||
|
|
||||||
|
help(D.values)
|
||||||
|
Help on built-in function values:
|
||||||
|
|
||||||
|
values() method of builtins.dict instance
|
||||||
|
Return an object providing a view on the dict's values.
|
||||||
|
|
||||||
|
S="Создать объект - символьную строку с текстом данного предложения"
|
||||||
|
L=list(S.split())
|
||||||
|
L
|
||||||
|
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
|
||||||
|
L[L.index("-")] = ","
|
||||||
|
l
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#200>", line 1, in <module>
|
||||||
|
l
|
||||||
|
NameError: name 'l' is not defined
|
||||||
|
L
|
||||||
|
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
|
||||||
|
L.remove("данного")
|
||||||
|
L
|
||||||
|
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
Python 3.13.2 (tags/v3.13.2:4f8bb39, Feb 4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)] on win32
|
||||||
|
Type "help", "copyright", "credits" or "license()" for more information.
|
||||||
|
14**3 #Целое число возводится в целую степень
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
# Общее КЗ
|
||||||
|
a = int("45", 8)
|
||||||
|
a
|
||||||
|
37
|
||||||
|
D={"усиление":23, "запаздывание":12, "постоянная времени":78}
|
||||||
|
spis1=list(D)
|
||||||
|
spis2=list(D.values())
|
||||||
|
spis1
|
||||||
|
['усиление', 'запаздывание', 'постоянная времени']
|
||||||
|
spis2
|
||||||
|
[23, 12, 78]
|
||||||
|
kor=tuple(spis1)+tuple(spis2)
|
||||||
|
kor
|
||||||
|
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
|
||||||
|
((1768//24.8)%3)**2.4
|
||||||
|
5.278031643091577
|
||||||
|
((~(13&27))^14)<<2
|
||||||
|
-32
|
||||||
|
spis3 = ['колебат']*4
|
||||||
|
spis3
|
||||||
|
['колебат', 'колебат', 'колебат', 'колебат']
|
||||||
|
'аткол' in spis3[1] + spis3[2]
|
||||||
|
True
|
||||||
|
dir(D)
|
||||||
|
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
|
||||||
|
D.keys()
|
||||||
|
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
|
||||||
|
D.values()
|
||||||
|
dict_values([23, 12, 78])
|
||||||
|
help(D.keys)
|
||||||
|
Help on built-in function keys:
|
||||||
|
|
||||||
|
keys() method of builtins.dict instance
|
||||||
|
Return a set-like object providing a view on the dict's keys.
|
||||||
|
|
||||||
|
help(D.values)
|
||||||
|
Help on built-in function values:
|
||||||
|
|
||||||
|
values() method of builtins.dict instance
|
||||||
|
Return an object providing a view on the dict's values.
|
||||||
|
|
||||||
|
S="Создать объект - символьную строку с текстом данного предложения"
|
||||||
|
L=list(S.split())
|
||||||
|
L
|
||||||
|
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
|
||||||
|
L[L.index("-")] = ","
|
||||||
|
l
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#200>", line 1, in <module>
|
||||||
|
l
|
||||||
|
NameError: name 'l' is not defined
|
||||||
|
L
|
||||||
|
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
|
||||||
|
L.remove("данного")
|
||||||
|
L
|
||||||
|
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
|
||||||
@ -0,0 +1,389 @@
|
|||||||
|
Python 3.13.2 (tags/v3.13.2:4f8bb39, Feb 4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)] on win32
|
||||||
|
Type "help", "copyright", "credits" or "license()" for more information.
|
||||||
|
round(123.456,1)
|
||||||
|
123.5
|
||||||
|
a = round(123.456,1)
|
||||||
|
b = round(123.456, 0)
|
||||||
|
a
|
||||||
|
123.5
|
||||||
|
b
|
||||||
|
123.0
|
||||||
|
type(a);type(b)
|
||||||
|
<class 'float'>
|
||||||
|
<class 'float'>
|
||||||
|
round(123.456)
|
||||||
|
123
|
||||||
|
c = round(123.456)
|
||||||
|
type(c)
|
||||||
|
<class 'int'>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gg=range(76,123,9)
|
||||||
|
gg
|
||||||
|
range(76, 123, 9)
|
||||||
|
list(gg)
|
||||||
|
[76, 85, 94, 103, 112, 121]
|
||||||
|
range(23)
|
||||||
|
range(0, 23)
|
||||||
|
list(range(23))
|
||||||
|
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
qq = ['Khatiukhin','Shabatov','Efremov','Turovec']
|
||||||
|
qq
|
||||||
|
['Khatiukhin', 'Shabatov', 'Efremov', 'Turovec']
|
||||||
|
ff = zip(gg,qq)
|
||||||
|
ff
|
||||||
|
<zip object at 0x000001D9754CB040>
|
||||||
|
tuple(ff)
|
||||||
|
((76, 'Khatiukhin'), (85, 'Shabatov'), (94, 'Efremov'), (103, 'Turovec'))
|
||||||
|
ff[1]
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#25>", line 1, in <module>
|
||||||
|
ff[1]
|
||||||
|
TypeError: 'zip' object is not subscriptable
|
||||||
|
|
||||||
|
|
||||||
|
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
|
||||||
|
коэффициент усиления=40
|
||||||
|
dan
|
||||||
|
44.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KeyboardInterrupt
|
||||||
|
|
||||||
|
exec(input('введите инструкции:'))
|
||||||
|
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
|
||||||
|
gg
|
||||||
|
221.456
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
abs(-2)
|
||||||
|
2
|
||||||
|
len('jhb')
|
||||||
|
3
|
||||||
|
max(1,2)
|
||||||
|
2
|
||||||
|
min(1,2)
|
||||||
|
1
|
||||||
|
pow(2,3
|
||||||
|
)
|
||||||
|
8
|
||||||
|
pow(2,3,4)
|
||||||
|
0
|
||||||
|
pow(2,3,3)
|
||||||
|
2
|
||||||
|
sum([1,2])
|
||||||
|
3
|
||||||
|
divmod(10,4)
|
||||||
|
(2, 2)
|
||||||
|
list(map(lambda x: x**2, [1,2,3,4,5]))
|
||||||
|
[1, 4, 9, 16, 25]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import math
|
||||||
|
dir(math)
|
||||||
|
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
|
||||||
|
help(math.factorial)
|
||||||
|
Help on built-in function factorial in module math:
|
||||||
|
|
||||||
|
factorial(n, /)
|
||||||
|
Find n!.
|
||||||
|
|
||||||
|
Raise a ValueError if x is negative or non-integral.
|
||||||
|
|
||||||
|
math.factorial(5)
|
||||||
|
120
|
||||||
|
math.sin(0.5)
|
||||||
|
0.479425538604203
|
||||||
|
math.acos(0.5)
|
||||||
|
1.0471975511965979
|
||||||
|
math.degrees(0.55)
|
||||||
|
31.51267873219528
|
||||||
|
math.radians(30)
|
||||||
|
0.5235987755982988
|
||||||
|
math.exp(1)
|
||||||
|
2.718281828459045
|
||||||
|
math.log(10)
|
||||||
|
2.302585092994046
|
||||||
|
math.log10(10)
|
||||||
|
1.0
|
||||||
|
math.sqrt(25)
|
||||||
|
5.0
|
||||||
|
math.ceil(4.3)
|
||||||
|
5
|
||||||
|
math.floor(4.8)
|
||||||
|
4
|
||||||
|
math.pi
|
||||||
|
3.141592653589793
|
||||||
|
math.sin((2*math.pi)/7+math.exp(0.23))
|
||||||
|
0.8334902641414562
|
||||||
|
|
||||||
|
|
||||||
|
import cmath
|
||||||
|
dir(cmath)
|
||||||
|
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
|
||||||
|
cmath.sqrt(1.2-0.5j)
|
||||||
|
(1.118033988749895-0.22360679774997896j)
|
||||||
|
cmath.phase(1-0.5j)
|
||||||
|
-0.4636476090008061
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import random
|
||||||
|
dir(random)
|
||||||
|
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_parse_args', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', 'betavariate', 'binomialvariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'main', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
|
||||||
|
help(random.seed)
|
||||||
|
Help on method seed in module random:
|
||||||
|
|
||||||
|
seed(a=None, version=2) method of random.Random instance
|
||||||
|
Initialize internal state from a seed.
|
||||||
|
|
||||||
|
The only supported seed types are None, int, float,
|
||||||
|
str, bytes, and bytearray.
|
||||||
|
|
||||||
|
None or no argument seeds from current time or from an operating
|
||||||
|
system specific randomness source if available.
|
||||||
|
|
||||||
|
If *a* is an int, all bits are used.
|
||||||
|
|
||||||
|
For version 2 (the default), all of the bits are used if *a* is a str,
|
||||||
|
bytes, or bytearray. For version 1 (provided for reproducing random
|
||||||
|
sequences from older versions of Python), the algorithm for str and
|
||||||
|
bytes generates a narrower range of seeds.
|
||||||
|
|
||||||
|
random.seed
|
||||||
|
<bound method Random.seed of <random.Random object at 0x000001D9756DE570>>
|
||||||
|
random.seed()
|
||||||
|
r = random.random()
|
||||||
|
r
|
||||||
|
0.6274277749743772
|
||||||
|
u = random.uniform(1, 10)
|
||||||
|
u
|
||||||
|
8.795217202035065
|
||||||
|
rnd = random.randint(1, 10)
|
||||||
|
rnd
|
||||||
|
4
|
||||||
|
g = random.gauss(0,5)
|
||||||
|
g
|
||||||
|
-10.142595842458078
|
||||||
|
g = random.gauss(0,1)
|
||||||
|
g
|
||||||
|
-1.2762551362834256
|
||||||
|
ls = ['a','b','c','d']
|
||||||
|
ch = random.choice(ls)
|
||||||
|
ch
|
||||||
|
'a'
|
||||||
|
sh = random.shuffle(ls)
|
||||||
|
sh
|
||||||
|
random.shuffle(ls)
|
||||||
|
ls
|
||||||
|
['d', 'c', 'a', 'b']
|
||||||
|
s = random.sample(ls,3)
|
||||||
|
s
|
||||||
|
['c', 'b', 'd']
|
||||||
|
b = random.batavariate(2, 5)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#102>", line 1, in <module>
|
||||||
|
b = random.batavariate(2, 5)
|
||||||
|
AttributeError: module 'random' has no attribute 'batavariate'. Did you mean: 'betavariate'?
|
||||||
|
b = random.betavariate(2, 5)
|
||||||
|
b
|
||||||
|
0.2662037969664268
|
||||||
|
g = random.gammavariate(2,2)
|
||||||
|
g
|
||||||
|
4.673121545436751
|
||||||
|
rnd_ls = [random.uniform(1, 10), random.gauss(5, 2), random.betavariate(2, 5), random.gammavariate(2, 2)]
|
||||||
|
rnd_ls
|
||||||
|
[4.085707425290092, 5.648252018761857, 0.05544308773047868, 5.588311173368095]
|
||||||
|
|
||||||
|
import time
|
||||||
|
dir(time)
|
||||||
|
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
|
||||||
|
c1=time.time()
|
||||||
|
c1
|
||||||
|
1760259525.185354
|
||||||
|
c2=time.time()-c1
|
||||||
|
c2
|
||||||
|
12.37006688117981
|
||||||
|
dat=time.gmtime()
|
||||||
|
dat
|
||||||
|
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=8, tm_min=59, tm_sec=20, tm_wday=6, tm_yday=285, tm_isdst=0)
|
||||||
|
dat.tm_mon
|
||||||
|
10
|
||||||
|
dat.tm_year
|
||||||
|
2025
|
||||||
|
dat.tm_min
|
||||||
|
59
|
||||||
|
tm = time.localtime()
|
||||||
|
tm
|
||||||
|
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=12, tm_min=20, tm_sec=40, tm_wday=6, tm_yday=285, tm_isdst=0)
|
||||||
|
time.asctime()
|
||||||
|
'Sun Oct 12 12:21:46 2025'
|
||||||
|
time.ctime()
|
||||||
|
'Sun Oct 12 12:21:56 2025'
|
||||||
|
time.sleep(5)
|
||||||
|
ti
|
||||||
|
time.mktime(tm)
|
||||||
|
1760260840.0
|
||||||
|
time.localtime(c1)
|
||||||
|
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=11, tm_min=58, tm_sec=45, tm_wday=6, tm_yday=285, tm_isdst=0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import pylab
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#23>", line 1, in <module>
|
||||||
|
import pylab
|
||||||
|
ModuleNotFoundError: No module named 'pylab'
|
||||||
|
import sys
|
||||||
|
sys.path.append('C:\\Users\\Евгений\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.13\\lib\\site-packages')
|
||||||
|
import pylab
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#26>", line 1, in <module>
|
||||||
|
import pylab
|
||||||
|
ModuleNotFoundError: No module named 'pylab'
|
||||||
|
sys.path
|
||||||
|
['', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\idlelib', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\python313.zip', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\DLLs', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages', 'C:\\Users\\Евгений\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.13\\lib\\site-packages']
|
||||||
|
sys.path.append('C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages')
|
||||||
|
import pylab
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#29>", line 1, in <module>
|
||||||
|
import pylab
|
||||||
|
ModuleNotFoundError: No module named 'pylab'
|
||||||
|
py -m site
|
||||||
|
SyntaxError: invalid syntax
|
||||||
|
sys.path
|
||||||
|
['', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\idlelib', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\python313.zip', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\DLLs', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages', 'C:\\Users\\Евгений\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Python 3.13\\lib\\site-packages', 'C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\Lib\\site-packages']
|
||||||
|
sys.path.append('C:\\Users\\Евгений\\AppData\\Local\\Programs\\Python\\Python313\\lib\\site-packages')
|
||||||
|
import pylab
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#33>", line 1, in <module>
|
||||||
|
import pylab
|
||||||
|
ModuleNotFoundError: No module named 'pylab'
|
||||||
|
import pylab
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import pylab
|
||||||
|
x=list(range(-3,55,4))
|
||||||
|
x
|
||||||
|
[-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53]
|
||||||
|
t=list(range(15))
|
||||||
|
t
|
||||||
|
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||||||
|
pylab.plot(t,x) #Создание графика в оперативной памяти
|
||||||
|
[<matplotlib.lines.Line2D object at 0x000002CD3BC6EC10>]
|
||||||
|
pylab.title('Первый график')
|
||||||
|
Text(0.5, 1.0, 'Первый график')
|
||||||
|
pylab.xlabel('время')
|
||||||
|
Text(0.5, 0, 'время')
|
||||||
|
pylab.ylabel('сигнал')
|
||||||
|
Text(0, 0.5, 'сигнал')
|
||||||
|
pylab.show() #Отображение графика на экране
|
||||||
|
|
||||||
|
pylab.show() #Отображение графика на экране
|
||||||
|
|
||||||
|
pylab.title('Первый график')
|
||||||
|
Text(0.5, 1.0, 'Первый график')
|
||||||
|
pylab.xlabel('время')
|
||||||
|
Text(0.5, 0, 'время')
|
||||||
|
pylab.ylabel('сигнал')
|
||||||
|
Text(0, 0.5, 'сигнал')
|
||||||
|
pylab.show() #Отображение графика на экране
|
||||||
|
SyntaxError: multiple statements found while compiling a single statement
|
||||||
|
pylab.plot(t,x) #Создание графика в оперативной памяти
|
||||||
|
[<matplotlib.lines.Line2D object at 0x000002CD3BC6EC10>]
|
||||||
|
pylab.title('Первый график')
|
||||||
|
Text(0.5, 1.0, 'Первый график')
|
||||||
|
pylab.xlabel('время')
|
||||||
|
Text(0.5, 0, 'время')
|
||||||
|
pylab.ylabel('сигнал')
|
||||||
|
Text(0, 0.5, 'сигнал')
|
||||||
|
pylab.show() #Отображение графика на экране
|
||||||
|
SyntaxError: multiple statements found while compiling a single statement
|
||||||
|
|
||||||
|
|
||||||
|
X1=[12,6,8,10,7];X2=[5,7,9,11,13]
|
||||||
|
X1
|
||||||
|
[12, 6, 8, 10, 7]
|
||||||
|
X2
|
||||||
|
[5, 7, 9, 11, 13]
|
||||||
|
pylab.plot(X1)
|
||||||
|
[<matplotlib.lines.Line2D object at 0x000002CD3CD6F4D0>]
|
||||||
|
pylab.plot(X2)
|
||||||
|
[<matplotlib.lines.Line2D object at 0x000002CD3CD6F610>]
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
|
||||||
|
region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
|
||||||
|
naselen=[65,12,23,17] # Значения для диаграммы
|
||||||
|
pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
|
||||||
|
([<matplotlib.patches.Wedge object at 0x000002CD3BD38050>, <matplotlib.patches.Wedge object at 0x000002CD3CE14F50>, <matplotlib.patches.Wedge object at 0x000002CD3CE15310>, <matplotlib.patches.Wedge object at 0x000002CD3CE15590>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
|
||||||
|
pylab.show() #Отображение диаграммы
|
||||||
|
|
||||||
|
|
||||||
|
pylab.plot(X1)
|
||||||
|
[<matplotlib.lines.Line2D object at 0x000002CD3CA98CD0>]
|
||||||
|
pylab.plot(X2)
|
||||||
|
[<matplotlib.lines.Line2D object at 0x000002CD3CA98E10>]
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
|
||||||
|
ls = [1, 1, 5, 5, 2, 3, 3, 3, 2, 4, 4]
|
||||||
|
pylab.hist(ls, bins=5)
|
||||||
|
(array([2., 2., 3., 2., 2.]), array([1. , 1.8, 2.6, 3.4, 4.2, 5. ]), <BarContainer object of 5 artists>)
|
||||||
|
pylab.title('Гистограмма')
|
||||||
|
Text(0.5, 1.0, 'Гистограмма')
|
||||||
|
pylab.show()
|
||||||
|
ls = [1, 5, 2, 3, 3, 3, 2, 4, 4]
|
||||||
|
ls = [1, 5, 2, 3, 3, 3, 2, 4, 4, 3]
|
||||||
|
pylab.hist(ls, bins=5)
|
||||||
|
(array([1., 2., 4., 2., 1.]), array([1. , 1.8, 2.6, 3.4, 4.2, 5. ]), <BarContainer object of 5 artists>)
|
||||||
|
pylab.title('Гистограмма')
|
||||||
|
Text(0.5, 1.0, 'Гистограмма')
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
|
||||||
|
a = ['One', 'Two', 'Three']
|
||||||
|
b = [20, 50, 25]
|
||||||
|
pylab.bar(a, b)
|
||||||
|
<BarContainer object of 3 artists>
|
||||||
|
pylab.title("Столбиковая диаграмма")
|
||||||
|
Text(0.5, 1.0, 'Столбиковая диаграмма')
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
|
||||||
|
import statistics
|
||||||
|
dir(statistics)
|
||||||
|
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtuple', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance']
|
||||||
|
mean = statistics.mean(ls)
|
||||||
|
mean
|
||||||
|
3
|
||||||
|
med = statistic.median(ls)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#105>", line 1, in <module>
|
||||||
|
med = statistic.median(ls)
|
||||||
|
NameError: name 'statistic' is not defined. Did you mean: 'statistics'?
|
||||||
|
med = statistics.median(ls)
|
||||||
|
med
|
||||||
|
3.0
|
||||||
|
mode = statistics.mode(ls)
|
||||||
|
mode
|
||||||
|
3
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
import time
|
||||||
|
import random
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
dic = {
|
||||||
|
'Студент': ['Хатюхин','Шабатов','Туровец'],
|
||||||
|
'Институт': ('ИВТИ','ИАЭ','ИТАЭ','ЭнМИ'),
|
||||||
|
'Корпус': ['А','Б','Г','Д','К','М']
|
||||||
|
}
|
||||||
|
|
||||||
|
rnd_institut = random.sample(dic['Институт'],1)
|
||||||
|
|
||||||
|
print(f'Выбран институт = {rnd_institut}')
|
||||||
|
end_time = time.time()
|
||||||
|
delta = end_time - start_time
|
||||||
|
print(f'Времени прошло: {delta}')
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
f = 0
|
||||||
|
for i in range(1,2):
|
||||||
|
if i % 2 == 0:
|
||||||
|
f+=1
|
||||||
|
print(i)
|
||||||
|
if f == 2:
|
||||||
|
break
|
||||||
|
else: print("gtgtgttg")
|
||||||
@ -0,0 +1 @@
|
|||||||
|
запись строки в файл
|
||||||
@ -0,0 +1 @@
|
|||||||
|
4, 2, 5, 3, 2, 3, 2, 4, 5
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
import os
|
||||||
|
import math
|
||||||
|
|
||||||
|
os.chdir('C:\\Users\\Евгений\\Desktop\\python-labs\\TEMA7')
|
||||||
|
|
||||||
|
f = lambda x, a, b: math.exp(-(x - a)**2 / b) / math.sqrt(2 * math.pi * b)
|
||||||
|
|
||||||
|
a = 1; b = 16
|
||||||
|
values = []
|
||||||
|
x = a - 3 * math.sqrt(b)
|
||||||
|
|
||||||
|
while x <= a + 3 * math.sqrt(b):
|
||||||
|
values.append(f(x,a,b))
|
||||||
|
x += 0.2 * math.sqrt(b)
|
||||||
|
print(values)
|
||||||
|
|
||||||
|
fp=open('IKZ.txt','w')
|
||||||
|
for i in range(0,len(values),2):
|
||||||
|
new = str(values[i])+","+str(values[i+1]) + "\n"
|
||||||
|
fp.write(new)
|
||||||
|
fp.close()
|
||||||
@ -1,15 +1,15 @@
|
|||||||
3.48132629866869e-05,0.00011105198605141639
|
1.23083471665585e-05,3.926280620059535e-05
|
||||||
0.0003270125124308196,0.0008889121702194339
|
0.00011561638253634189,0.0003142779117207081
|
||||||
0.0022305387662290435,0.005166746338523005
|
0.0007886145436500209,0.0018267206863201975
|
||||||
0.011047930833002744,0.0218072646584863
|
0.0039060334050481055,0.007710032359572725
|
||||||
0.03973542691931943,0.06683608675088473
|
0.014048594913996654,0.02363012508476152
|
||||||
0.10377687435514864,0.1487464465643672
|
0.036690665793434996,0.05258981052153328
|
||||||
0.19681085792857178,0.24038532470982693
|
0.06958314612621767,0.0849890466000244
|
||||||
0.2710336967762158,0.28209479177387814
|
0.09582488246026036,0.09973557010035818
|
||||||
0.2710336967762158,0.24038532470982693
|
0.09582488246026034,0.08498904660002438
|
||||||
0.19681085792857178,0.1487464465643672
|
0.06958314612621765,0.052589810521533234
|
||||||
0.10377687435514864,0.06683608675088476
|
0.03669066579343496,0.02363012508476149
|
||||||
0.039735426919319465,0.021807264658486338
|
0.014048594913996638,0.007710032359572712
|
||||||
0.011047930833002768,0.0051667463385230185
|
0.003906033405048095,0.001826720686320191
|
||||||
0.002230538766229052,0.0008889121702194355
|
0.0007886145436500168,0.0003142779117207059
|
||||||
0.0003270125124308196,0.00011105198605141618
|
0.00011561638253634108,3.9262806200595064e-05
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
def f(a,b,s):
|
||||||
|
for i in range(a,b,s):
|
||||||
|
yield(i)
|
||||||
|
for m in f(2,11,5):
|
||||||
|
print(m)
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
import MM2
|
||||||
|
print('y=',MM2.vyhod)
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
def realdvig(xtt,kk1,TT,yti1,ytin1):
|
||||||
|
#Модель реального двигателя
|
||||||
|
yp=kk1*xtt #усилитель
|
||||||
|
yti1=yp+yti1 #Интегратор
|
||||||
|
ytin1=(yti1+TT*ytin1)/(TT+1)
|
||||||
|
return [yti1,ytin1]
|
||||||
|
|
||||||
|
def tahogen(xtt,kk2,yti2):
|
||||||
|
#Модель тахогенератора
|
||||||
|
yp=kk2*xtt #усилитель
|
||||||
|
yti2=yp+yti2 #интегратор
|
||||||
|
return yti2
|
||||||
|
|
||||||
|
def nechus(xtt,gran):
|
||||||
|
#зона нечувствительности
|
||||||
|
if xtt<gran and xtt>(-gran):
|
||||||
|
ytt=0
|
||||||
|
elif xtt>=gran:
|
||||||
|
ytt=xtt-gran
|
||||||
|
elif xtt<=(-gran):
|
||||||
|
ytt=xtt+gran
|
||||||
|
return ytt
|
||||||
|
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
|
||||||
|
k1=float(znach[0])
|
||||||
|
T=float(znach[1])
|
||||||
|
k2=float(znach[2])
|
||||||
|
Xm=float(znach[3])
|
||||||
|
A=float(znach[4])
|
||||||
|
F=float(znach[5])
|
||||||
|
N=int(znach[6])
|
||||||
|
|
||||||
|
import math
|
||||||
|
vhod=[]
|
||||||
|
for i in range(N):
|
||||||
|
vhod.append(A*math.sin((2*i*math.pi)/F))
|
||||||
|
|
||||||
|
import MM1 as mod
|
||||||
|
yi1=0;yin1=0;yi2=0
|
||||||
|
vyhod=[]
|
||||||
|
for xt in vhod:
|
||||||
|
xt1=xt-yi2 #отрицательная обратная связь
|
||||||
|
[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
|
||||||
|
yi2=mod.tahogen(yin1,k2,yi2)
|
||||||
|
yt=mod.nechus(yin1,Xm)
|
||||||
|
vyhod.append(yt)
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
def calculate_correlation(list1, list2):
|
||||||
|
n = min(len(list1), len(list2)) # Используем меньшую длину
|
||||||
|
sum_x = sum(list1[:n])
|
||||||
|
sum_y = sum(list2[:n])
|
||||||
|
sum_x_squared = sum(x**2 for x in list1[:n])
|
||||||
|
sum_y_squared = sum(y**2 for y in list2[:n])
|
||||||
|
sum_xy = sum(list1[i] * list2[i] for i in range(n))
|
||||||
|
|
||||||
|
numerator = n * sum_xy - sum_x * sum_y
|
||||||
|
denominator = math.sqrt((n * sum_x_squared - sum_x**2) * (n * sum_y_squared - sum_y**2))
|
||||||
|
|
||||||
|
if denominator == 0:
|
||||||
|
print("Предупреждение: Деление на ноль при вычислении корреляции.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
return numerator / denominator
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
def read_number_list(filename):
|
||||||
|
number_list = []
|
||||||
|
with open(filename, 'r') as file:
|
||||||
|
for line in file:
|
||||||
|
numbers = line.strip().split()
|
||||||
|
for num in numbers:
|
||||||
|
number_list.append(float(num))
|
||||||
|
return number_list
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
import math
|
||||||
|
|
||||||
|
def calculate_correlation(list1, list2):
|
||||||
|
if not list1 or not list2:
|
||||||
|
print("Ошибка: Один или оба списка пусты.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
n = min(len(list1), len(list2)) # Используем меньшую длину
|
||||||
|
sum_x = sum(list1[:n])
|
||||||
|
sum_y = sum(list2[:n])
|
||||||
|
sum_x_squared = sum(x**2 for x in list1[:n])
|
||||||
|
sum_y_squared = sum(y**2 for y in list2[:n])
|
||||||
|
sum_xy = sum(list1[i] * list2[i] for i in range(n))
|
||||||
|
|
||||||
|
numerator = n * sum_xy - sum_x * sum_y
|
||||||
|
denominator = math.sqrt((n * sum_x_squared - sum_x**2) * (n * sum_y_squared - sum_y**2))
|
||||||
|
|
||||||
|
if denominator == 0:
|
||||||
|
print("Предупреждение: Деление на ноль при вычислении корреляции.")
|
||||||
|
return None
|
||||||
|
|
||||||
|
return numerator / denominator
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
import Module1
|
||||||
|
import Module2
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
file1_name = input("Введите имя первого файла: ")
|
||||||
|
file2_name = input("Введите имя второго файла: ")
|
||||||
|
|
||||||
|
list1 = Module1.read_number_list(file1_name)
|
||||||
|
list2 = Module1.read_number_list(file2_name)
|
||||||
|
|
||||||
|
if list1 is not None and list2 is not None:
|
||||||
|
correlation = Module2.calculate_correlation(list1, list2)
|
||||||
|
if correlation is not None:
|
||||||
|
print(f"Коэффициент корреляции: {correlation:.3f}")
|
||||||
@ -0,0 +1,299 @@
|
|||||||
|
# Отчет по лабораторной работе 8
|
||||||
|
|
||||||
|
Хатюхин Евгений, А-02-23
|
||||||
|
|
||||||
|
## 1 Открытие и настройка интерактивной оболочки IDLE
|
||||||
|
|
||||||
|
Была запущена интерактивная оболочка IDLE, указан рабочий каталог и импортированы необходимые модули.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>import os
|
||||||
|
>>>os.chdir('C:\\Users\\u522-16\\Desktop\\tema8')
|
||||||
|
>>>os.getcwd() #Контролируем корректность установки текущего каталога
|
||||||
|
'C:\\Users\\u522-16\\Desktop\\tema8'
|
||||||
|
>>>import importlib
|
||||||
|
>>>import sys
|
||||||
|
```
|
||||||
|
## 2
|
||||||
|
|
||||||
|
## 2.1 Запуск модуля на выполнение
|
||||||
|
|
||||||
|
Был запущен созданный модуль на выполнение, введенное на запрос число было сохранено в переменную perm1, созданную в модуле. Были просмотрены атрибуты и тип модуля. Была неудачно произведена попытка заново запустить модуль на выполнение. После этого модуль был запущен еще раз с помощью метода reload. Была просмотрена переменная perm1 и установлено, что данная переменная была переопределена.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>import Mod1
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
>>>type(Mod1)
|
||||||
|
<class 'module'>
|
||||||
|
>>>dir(Mod1)
|
||||||
|
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
|
||||||
|
>>>Mod1.perm1
|
||||||
|
'5'
|
||||||
|
>>>import Mod1
|
||||||
|
>>>imp.reload(Mod1)
|
||||||
|
Mod1:Введите значение = 3
|
||||||
|
Mod1:Значение perm1= 3
|
||||||
|
<module 'Mod1' from 'C:\\Users\\u522-16\\Desktop\\tema8\\Mod1.py'>
|
||||||
|
>>>Mod1.perm1
|
||||||
|
'3'
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2.2 Изучение удаления модуля из словаря
|
||||||
|
|
||||||
|
Был выведен словарь - значение атрибута sys.modules, среди которых был модуль Mod1. Далее этот модуль был удален, и снова изображен словарь, в котором Mod1 отсутствовал. Потом модуль был снова запущен и снова удален из словаря.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>print(sorted(sys.modules.keys()))
|
||||||
|
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_distutils_hack', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha512', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_thread', '_tkinter', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'imp', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'pywin32_bootstrap', 'pywin32_system32', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||||
|
>>>sys.modules.pop('Mod1')
|
||||||
|
<module 'Mod1' from 'C:\\Users\\u522-16\\Desktop\\tema8\\Mod1.py'>
|
||||||
|
>>>print(sorted(sys.modules.keys()))
|
||||||
|
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_distutils_hack', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha512', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_thread', '_tkinter', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'imp', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'pywin32_bootstrap', 'pywin32_system32', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||||
|
>>>import Mod1
|
||||||
|
Mod1:Введите значение = 9
|
||||||
|
Mod1:Значение perm1= 9
|
||||||
|
>>>sys.modules.pop('Mod1')
|
||||||
|
<module 'Mod1' from 'C:\\Users\\u522-16\\Desktop\\tema8\\Mod1.py'>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2.3 Изучение запуска модуля с помощью exec
|
||||||
|
|
||||||
|
Модуль был запущен на выполнение с помощью функции exec, которая читает код. Далее трижды было введено значение perm1, и выведено на экран.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>exec(open('Mod1.py').read())
|
||||||
|
Mod1:Введите значение = 8
|
||||||
|
Mod1:Значение perm1= 8
|
||||||
|
>>>exec(open('Mod1.py', encoding='utf-8').read()) #Здесь указана кодировка, чтобы в консоли выводился текст на кириллице.
|
||||||
|
Mod1:Введите значение = 4
|
||||||
|
Mod1:Значение perm1= 4
|
||||||
|
>>>perm1
|
||||||
|
'4'
|
||||||
|
>>>exec(open('Mod1.py', encoding='utf-8').read())
|
||||||
|
Mod1:Введите значение = 8
|
||||||
|
Mod1:Значение perm1= 8
|
||||||
|
>>>perm1
|
||||||
|
'8'
|
||||||
|
>>>exec(open('Mod1.py', encoding='utf-8').read())
|
||||||
|
Mod1:Введите значение = 9
|
||||||
|
Mod1:Значение perm1= 9
|
||||||
|
>>>perm1
|
||||||
|
'9'
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2.4 Изучение запуска модуля с помощью from … import …
|
||||||
|
|
||||||
|
Была импортирована лишь часть модуля, просмотрены обьекты, а так же выведено значение переменной perm1.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>from Mod1 import perm1
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
>>>dir()
|
||||||
|
['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'fg', 'imp', 'importlib', 'os', 'perm1', 'summa', 'sys']
|
||||||
|
>>>perm1
|
||||||
|
'5'
|
||||||
|
```
|
||||||
|
|
||||||
|
Создан модуль с двумя функциями и изначально импортирована одна функция из этого модуля. Просмотрено значение переменной g. Просмотрены обьекты. Была произведена попытка вызова неимпортированной функции из модуля 2. Под псевдонимом была импортирована вторая функция из модуля и вызвана эта функция. Далее функции были удалены, потом обе снова импортированы одной инструкцией. Далее был испортирован весь модуль и применена его функция.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>from Mod2 import beta
|
||||||
|
>>>g=beta(2)
|
||||||
|
>>>g
|
||||||
|
535.4916555247646
|
||||||
|
>>>dir()
|
||||||
|
['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'beta', 'fg', 'g', 'imp', 'importlib', 'os', 'perm1', 'summa', 'sys']
|
||||||
|
>>>alpha()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#42>", line 1, in <module>
|
||||||
|
alpha()
|
||||||
|
NameError: name 'alpha' is not defined
|
||||||
|
>>>from Mod2 import alpha as al
|
||||||
|
>>>al()
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=4
|
||||||
|
'4'
|
||||||
|
>>>del al,beta
|
||||||
|
>>>from Mod2 import alpha as al, beta as bt
|
||||||
|
>>>del al
|
||||||
|
>>>del bt
|
||||||
|
>>>from Mod2 import * #Звездочка означает, что импортируется весь модуль, а не конкретные функции.
|
||||||
|
tt=alpha() #На запрос введите значение 0.12
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=0.12
|
||||||
|
>>>uu=beta(float(tt))
|
||||||
|
>>>uu
|
||||||
|
1.4578913609506803
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3
|
||||||
|
|
||||||
|
## 3.1
|
||||||
|
|
||||||
|
Был создан еще один модуль Mod0, в котором вызываются модуль 1 и функции из модуля 2. Также выведены значения обьектов, созданных во время выполнения программы.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>sys.modules.pop('Mod1')
|
||||||
|
>>>sys.modules.pop('Mod2')
|
||||||
|
>>>import Mod0
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
perm1= 5
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=8
|
||||||
|
tt= 8
|
||||||
|
qq= 82226315585.59491
|
||||||
|
>>>Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
|
||||||
|
'8'
|
||||||
|
82226315585.59491
|
||||||
|
'5'
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3.2 Создание модулей для реализации программы моделирования системы управления
|
||||||
|
|
||||||
|
Были созданы модули MM1 - с функциями реализующими реальный двигатель, тахогенератор и нелинейное звено; MM2 - с инструкциями, обеспечивающими ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала; MM0 - содержащую импорт модуля MM2 и печатающую получившийся выходной сигнал. Был вызван модуль MM0.
|
||||||
|
|
||||||
|
```py
|
||||||
|
================= RESTART: C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\MM0.py =================
|
||||||
|
k1,T,k2,Xm,A,F,N=0.5,35,0.6,5,1000,5,15
|
||||||
|
y= [0, 8.209118281877132, 29.104924685415277, 40.86232427117668, 38.3075414151359, 34.68635884409398, 42.90679739719954, 57.19526562043458, 60.53754513466764, 47.64611630565597, 31.742316122264157, 25.812753880749888, 24.278160244795345, 10.44509996519298, -10.518946273258612]
|
||||||
|
```py
|
||||||
|
|
||||||
|
## 3.3 Изучение области действия обьектов в модулях
|
||||||
|
|
||||||
|
Была изучена область действия обьектов в модулях. Исходя из примеров, приведенных ниже, можно сказать, что обьекты входящие в один модуль будут локализованы в этом модуле и доступны в нем. К переменным из другого модуля, даже импортированного в главный (выполняемый) модуль, прямого доступа не будет.
|
||||||
|
|
||||||
|
## 3.3.1 Изучение области действия обьектов в модулях (пример 1)
|
||||||
|
|
||||||
|
Внутрь модуля Mod2 в функцию alpha был добавлен вызов функции beta.
|
||||||
|
|
||||||
|
```
|
||||||
|
def alpha():
|
||||||
|
print('****ALPHA****')
|
||||||
|
t=input('Значение t=')
|
||||||
|
n = beta(6)
|
||||||
|
print(n)
|
||||||
|
return t
|
||||||
|
```
|
||||||
|
Далее запущен модуль и вызвана функция alpha. Можно заметить, что инструкции успешно выполнились.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>>alpha()
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=9
|
||||||
|
153552935.39544657
|
||||||
|
'9'
|
||||||
|
```
|
||||||
|
Далее в модуле в функции beta был добавлен вызов функции alpha.
|
||||||
|
|
||||||
|
```py
|
||||||
|
def beta(q):
|
||||||
|
import math
|
||||||
|
expi=q*math.pi
|
||||||
|
alpha()
|
||||||
|
return math.exp(expi)
|
||||||
|
```
|
||||||
|
|
||||||
|
Функция beta была успешно вызвана
|
||||||
|
|
||||||
|
```
|
||||||
|
beta(6)
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=9
|
||||||
|
153552935.39544657
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3.3.2 Изучение области действия обьектов в модулях (пример 2)
|
||||||
|
|
||||||
|
В модуль Mod0 была добавлена функция печати переменных t и expi, которые есть в Mod2.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#Модуль Mod0
|
||||||
|
import Mod1
|
||||||
|
print('perm1=',Mod1.perm1)
|
||||||
|
from Mod2 import alpha as al
|
||||||
|
tt=al()
|
||||||
|
print('tt=',tt)
|
||||||
|
from Mod2 import beta
|
||||||
|
qq=beta(float(tt))
|
||||||
|
print('qq=',qq)
|
||||||
|
print(t, expi)
|
||||||
|
```
|
||||||
|
При запуске модуля на моменте печати этих переменных была выдана ошибка.
|
||||||
|
|
||||||
|
```py
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
perm1= 5
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=7
|
||||||
|
tt= 7
|
||||||
|
qq= 3553321280.847041
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\Mod0.py", line 10, in <module>
|
||||||
|
print(t, expi)
|
||||||
|
NameError: name 't' is not defined. Did you mean: 'tt'?
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3.3.3 Изучение области действия обьектов в модулях (пример 3)
|
||||||
|
|
||||||
|
В модуле Mod0 были добавлены инструкции, где переменная perm1 была увеличена в 3 раза и напечатана
|
||||||
|
|
||||||
|
```py
|
||||||
|
#Модуль Mod0
|
||||||
|
import Mod1
|
||||||
|
print('perm1=',Mod1.perm1)
|
||||||
|
from Mod2 import alpha as al
|
||||||
|
tt=al()
|
||||||
|
print('tt=',tt)
|
||||||
|
from Mod2 import beta
|
||||||
|
qq=beta(float(tt))
|
||||||
|
print('qq=',qq)
|
||||||
|
perm1 = Mod1.perm1*3
|
||||||
|
print("perm1*3= ", perm1)
|
||||||
|
```
|
||||||
|
|
||||||
|
При запуске модуля напечаталась переменная perm1 умноженная на 3. Так как эта переменная класса строка, то строка была повторена трижды и сформирована новая строка.
|
||||||
|
|
||||||
|
```py
|
||||||
|
Mod1:Введите значение = 4
|
||||||
|
Mod1:Значение perm1= 4
|
||||||
|
perm1= 4
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=3
|
||||||
|
tt= 3
|
||||||
|
qq= 12391.647807916694
|
||||||
|
perm1*3= 444
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3.3.4 Изучение области действия обьектов в модулях (пример 4)
|
||||||
|
|
||||||
|
В командной строке после выполнения главного модуля была произведена попытка изменить переменные perm1, tt, qq. В итоге tt и qq изменились, а при обращении к perm1 была выведена ошибка.
|
||||||
|
|
||||||
|
```py
|
||||||
|
================= RESTART: C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\Mod0.py ================
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
perm1= 5
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=7
|
||||||
|
tt= 7
|
||||||
|
qq= 3553321280.847041
|
||||||
|
>>>perm1 = perm1*2
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#5>", line 1, in <module>
|
||||||
|
perm1 = perm1*2
|
||||||
|
NameError: name 'perm1' is not defined
|
||||||
|
>>>tt = tt*2
|
||||||
|
>>>tt
|
||||||
|
'77'
|
||||||
|
>>>qq = qq*2
|
||||||
|
>>>qq
|
||||||
|
7106642561.694082
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4 Завершение работы в IDLE
|
||||||
|
|
||||||
|
Был завершен сеанс в среде IDLE.
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
# Общее контрольное задание по теме 8
|
||||||
|
|
||||||
|
Добровольска Елизавета, А-02-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
Разработайте программу, состоящую из трех модулей:
|
||||||
|
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
|
||||||
|
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
||||||
|
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
|
||||||
|
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Были созданы три модуля, реализующие инструкции задания. Запущен модуль 3 на выполнение.
|
||||||
|
|
||||||
|
```py
|
||||||
|
=============== RESTART: C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\Module3.py ===============
|
||||||
|
Введите имя первого файла: text1.txt
|
||||||
|
Введите имя второго файла: text2.txt
|
||||||
|
Коэффициент корреляции: 0.962
|
||||||
|
```
|
||||||
@ -0,0 +1 @@
|
|||||||
|
1 2 3 4 7
|
||||||
@ -0,0 +1 @@
|
|||||||
|
6 7 8 9 10
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
import M2
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("ГЛАВНАЯ ПРОГРАММА M3_27")
|
||||||
|
print("Проведем расчеты для 2-х разных исходных файлов")
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
print("РАСЧЕТ 1:")
|
||||||
|
M2.main()
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
print("РАСЧЕТ 2:")
|
||||||
|
M2.main()
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
print("Все расчеты завершены!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
def find_min_max_indices(data):
|
||||||
|
"""
|
||||||
|
Функция 1: Нахождение номеров элементов с наименьшим и наибольшим значениями
|
||||||
|
Аргумент: список или кортеж с выборкой
|
||||||
|
Возвращает: кортеж (индекс_мин, индекс_макс)
|
||||||
|
"""
|
||||||
|
if not data:
|
||||||
|
return -1, -1
|
||||||
|
|
||||||
|
min_index = data.index(min(data))
|
||||||
|
max_index = data.index(max(data))
|
||||||
|
return min_index, max_index
|
||||||
|
|
||||||
|
def calculate_group_averages(data, N):
|
||||||
|
"""
|
||||||
|
Функция 2: Разделение выборки на группы и расчет средних значений
|
||||||
|
Аргументы:
|
||||||
|
- data: список или кортеж с выборкой
|
||||||
|
- N: целочисленный параметр - размер группы
|
||||||
|
Возвращает: список средних значений по группам
|
||||||
|
"""
|
||||||
|
if not data or N <= 0:
|
||||||
|
return []
|
||||||
|
|
||||||
|
group_averages = []
|
||||||
|
for i in range(0, len(data), N):
|
||||||
|
group = data[i:i + N]
|
||||||
|
group_avg = sum(group) / len(group)
|
||||||
|
group_averages.append(group_avg)
|
||||||
|
|
||||||
|
return group_averages
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
import os
|
||||||
|
import struct
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
def read_binary_file(filename):
|
||||||
|
"""Чтение данных из бинарного файла"""
|
||||||
|
data = []
|
||||||
|
try:
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
while True:
|
||||||
|
bytes_data = f.read(4)
|
||||||
|
if not bytes_data:
|
||||||
|
break
|
||||||
|
value = struct.unpack('f', bytes_data)[0]
|
||||||
|
data.append(value)
|
||||||
|
return data
|
||||||
|
except FileNotFoundError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Запрос имени файла с проверкой наличия
|
||||||
|
while True:
|
||||||
|
filename = input("Введите имя бинарного файла с выборкой: ")
|
||||||
|
if os.path.exists(filename):
|
||||||
|
break
|
||||||
|
print(f"Файл '{filename}' не найден. Попробуйте еще раз.")
|
||||||
|
|
||||||
|
# Чтение выборки из файла
|
||||||
|
data = read_binary_file(filename)
|
||||||
|
if data is None:
|
||||||
|
print("Ошибка чтения файла")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"Выборка считана из файла '{filename}'")
|
||||||
|
print(f"Число элементов: {len(data)}")
|
||||||
|
|
||||||
|
# Импорт функций из M1
|
||||||
|
from M1 import find_min_max_indices, calculate_group_averages
|
||||||
|
|
||||||
|
# Использование функции 1: нахождение номеров min и max
|
||||||
|
min_index, max_index = find_min_max_indices(data)
|
||||||
|
print(f"Номер элемента с наименьшим значением: {min_index}")
|
||||||
|
print(f"Номер элемента с наибольшим значением: {max_index}")
|
||||||
|
print(f"Наименьшее значение: {data[min_index]:.3f}")
|
||||||
|
print(f"Наибольшее значение: {data[max_index]:.3f}")
|
||||||
|
|
||||||
|
# Запрос числа N для формирования групп
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
N = int(input(f"Введите число элементов N для формирования групп (1-{len(data)}): "))
|
||||||
|
if 1 <= N <= len(data):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print(f"Введите число от 1 до {len(data)}")
|
||||||
|
except ValueError:
|
||||||
|
print("Введите целое число")
|
||||||
|
|
||||||
|
# Использование функции 2: расчет средних по группам
|
||||||
|
group_averages = calculate_group_averages(data, N)
|
||||||
|
|
||||||
|
print(f"\nРазделение на {len(group_averages)} групп:")
|
||||||
|
for i, avg in enumerate(group_averages):
|
||||||
|
start_idx = i * N
|
||||||
|
end_idx = min((i + 1) * N - 1, len(data) - 1)
|
||||||
|
print(f"Группа {i+1} (элементы {start_idx}-{end_idx}): среднее = {avg:.3f}")
|
||||||
|
|
||||||
|
# ПОСТРОЕНИЕ ГРАФИКА СОГЛАСНО ЗАДАНИЮ
|
||||||
|
plt.figure(figsize=(12, 6))
|
||||||
|
|
||||||
|
# Отображение исходной выборки (основное требование задания)
|
||||||
|
plt.plot(range(len(data)), data, 'bo-', linewidth=2, markersize=6, label='Исходная выборка')
|
||||||
|
|
||||||
|
# Дополнительно выделяем min и max (не требуется заданием, но полезно)
|
||||||
|
plt.plot(min_index, data[min_index], 'ro', markersize=10, label=f'Минимум (индекс {min_index})')
|
||||||
|
plt.plot(max_index, data[max_index], 'go', markersize=10, label=f'Максимум (индекс {max_index})')
|
||||||
|
|
||||||
|
plt.title(f'Исходная выборка из файла: {filename}')
|
||||||
|
plt.xlabel('Индекс элемента')
|
||||||
|
plt.ylabel('Значение')
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
class Class1: #Объявление класса Class1 в модуле
|
||||||
|
def zad_zn(self,znach): # 1 Метод класса
|
||||||
|
self.data=znach # self - ссылка на экземпляр класса Class1
|
||||||
|
def otobrazh(self): # 2 Метод класса
|
||||||
|
print(self.data) #Отображение данных экземпляра
|
||||||
|
class Class2(Class1): #Class2 - наследник класса Class1
|
||||||
|
def otobrazh(self): # Метод класса Class2
|
||||||
|
print('значение=',self.data)#Отображение данных экземпляра
|
||||||
|
def otobrazh(objekt): #Объявление самостоятельной функции
|
||||||
|
print('значение объекта=',objekt)
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
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])
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
import struct
|
||||||
|
import random
|
||||||
|
|
||||||
|
def create_test_files():
|
||||||
|
"""Создание тестовых бинарных файлов для задания M3_27"""
|
||||||
|
|
||||||
|
# Файл 1: 15 элементов
|
||||||
|
data1 = [random.uniform(10, 50) for _ in range(15)]
|
||||||
|
with open('data1.bin', 'wb') as f:
|
||||||
|
for value in data1:
|
||||||
|
f.write(struct.pack('f', value))
|
||||||
|
print("Создан файл 'data1.bin' (15 элементов)")
|
||||||
|
|
||||||
|
# Файл 2: 20 элементов
|
||||||
|
data2 = [random.uniform(-5, 5) for _ in range(20)]
|
||||||
|
with open('data2.bin', 'wb') as f:
|
||||||
|
for value in data2:
|
||||||
|
f.write(struct.pack('f', value))
|
||||||
|
print("Создан файл 'data2.bin' (20 элементов)")
|
||||||
|
|
||||||
|
print("\nТестовые файлы готовы!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
create_test_files()
|
||||||
@ -0,0 +1,133 @@
|
|||||||
|
class Employee:
|
||||||
|
"""
|
||||||
|
Класс для представления сотрудника организации
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, fio="Неизвестно", otdel="Не назначен",
|
||||||
|
dolzhnost="Не определена", oklad=0):
|
||||||
|
"""
|
||||||
|
Конструктор класса Employee
|
||||||
|
"""
|
||||||
|
self.fio = fio
|
||||||
|
self.otdel = otdel
|
||||||
|
self.dolzhnost = dolzhnost
|
||||||
|
self.oklad = oklad
|
||||||
|
self.__pooshreniya = [] # приватный атрибут для хранения поощрений
|
||||||
|
|
||||||
|
# Создаем свойство без декораторов
|
||||||
|
self.pooshreniya = property(self._get_pooshreniya,
|
||||||
|
self._set_pooshreniya,
|
||||||
|
self._del_pooshreniya)
|
||||||
|
|
||||||
|
def povysit_oklad(self, summa):
|
||||||
|
"""
|
||||||
|
Метод для повышения оклада сотрудника на заданную сумму
|
||||||
|
"""
|
||||||
|
if summa > 0:
|
||||||
|
self.oklad += summa
|
||||||
|
print(f"Оклад сотрудника {self.fio} повышен на {summa}. Новый оклад: {self.oklad}")
|
||||||
|
else:
|
||||||
|
print("Сумма повышения должна быть положительной")
|
||||||
|
|
||||||
|
def perevesti_otdel(self, noviy_otdel):
|
||||||
|
"""
|
||||||
|
Метод для перевода сотрудника в другой отдел
|
||||||
|
"""
|
||||||
|
stariy_otdel = self.otdel
|
||||||
|
self.otdel = noviy_otdel
|
||||||
|
print(f"Сотрудник {self.fio} переведен из отдела '{stariy_otdel}' в отдел '{noviy_otdel}'")
|
||||||
|
|
||||||
|
def izmenit_dolzhnost(self, novaya_dolzhnost):
|
||||||
|
"""
|
||||||
|
Метод для изменения должности сотрудника
|
||||||
|
"""
|
||||||
|
staraya_dolzhnost = self.dolzhnost
|
||||||
|
self.dolzhnost = novaya_dolzhnost
|
||||||
|
print(f"Сотрудник {self.fio} переведен с должности '{staraya_dolzhnost}' на должность '{novaya_dolzhnost}'")
|
||||||
|
|
||||||
|
# Методы для свойства pooshreniya (вместо декораторов)
|
||||||
|
def _get_pooshreniya(self):
|
||||||
|
"""Геттер для получения списка поощрений"""
|
||||||
|
return self.__pooshreniya
|
||||||
|
|
||||||
|
def _set_pooshreniya(self, value):
|
||||||
|
"""Сеттер для добавления нового поощрения"""
|
||||||
|
if isinstance(value, str):
|
||||||
|
self.__pooshreniya.append(value)
|
||||||
|
print(f"Добавлено поощрение для {self.fio}: '{value}'")
|
||||||
|
elif isinstance(value, list):
|
||||||
|
self.__pooshreniya.extend(value)
|
||||||
|
print(f"Добавлены поощрения для {self.fio}: {value}")
|
||||||
|
else:
|
||||||
|
print("Поощрение должно быть строкой или списком строк")
|
||||||
|
|
||||||
|
def _del_pooshreniya(self):
|
||||||
|
"""Делитер для очистки списка поощрений"""
|
||||||
|
self.__pooshreniya.clear()
|
||||||
|
print(f"Список поощрений сотрудника {self.fio} очищен")
|
||||||
|
|
||||||
|
def dobavit_pooshrenie(self, pooshrenie):
|
||||||
|
"""
|
||||||
|
Альтернативный метод для добавления поощрения
|
||||||
|
"""
|
||||||
|
self.__pooshreniya.append(pooshrenie)
|
||||||
|
print(f"Добавлено поощрение для {self.fio}: '{pooshrenie}'")
|
||||||
|
|
||||||
|
def otobrazit_informaciyu(self):
|
||||||
|
"""
|
||||||
|
Метод для отображения полной информации о сотруднике
|
||||||
|
"""
|
||||||
|
print("\n")
|
||||||
|
print(f"ФИО: {self.fio}")
|
||||||
|
print(f"Отдел: {self.otdel}")
|
||||||
|
print(f"Должность: {self.dolzhnost}")
|
||||||
|
print(f"Оклад: {self.oklad} руб.")
|
||||||
|
print(f"Поощрения: {self.__pooshreniya if self.__pooshreniya else 'нет'}")
|
||||||
|
|
||||||
|
|
||||||
|
# Демонстрационная программа
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("Демонстрация работы класса EMPLOYEE\n")
|
||||||
|
|
||||||
|
# Создание первого экземпляра класса
|
||||||
|
print("1. Создание первого сотрудника:")
|
||||||
|
sotrudnik1 = Employee("Петров Алексей Сергеевич", "IT-отдел", "Программист", 50000)
|
||||||
|
sotrudnik1.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Создание второго экземпляра класса
|
||||||
|
print("\n2. Создание второго сотрудника:")
|
||||||
|
sotrudnik2 = Employee("Сидорова Мария Петровна", "Бухгалтерия", "Главный бухгалтер", 75000)
|
||||||
|
sotrudnik2.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Операции с первым сотрудником
|
||||||
|
print("\n3. Операции с первым сотрудником:")
|
||||||
|
sotrudnik1.povysit_oklad(10000)
|
||||||
|
sotrudnik1.perevesti_otdel("Отдел разработки")
|
||||||
|
sotrudnik1.izmenit_dolzhnost("Старший программист")
|
||||||
|
sotrudnik1.pooshreniya = "Благодарность за успешный проект"
|
||||||
|
sotrudnik1.pooshreniya = "Премия за квартал"
|
||||||
|
sotrudnik1.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Операции со вторым сотрудником
|
||||||
|
print("\n4. Операции со вторым сотрудником:")
|
||||||
|
sotrudnik2.povysit_oklad(5000)
|
||||||
|
sotrudnik2.perevesti_otdel("Финансовый отдел")
|
||||||
|
sotrudnik2.dobavit_pooshrenie("Благодарность за годовой отчет")
|
||||||
|
sotrudnik2.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Работа со свойствами
|
||||||
|
print("\n5. Работа со свойствами:")
|
||||||
|
print(f"Поощрения {sotrudnik1.fio}: {sotrudnik1.pooshreniya}")
|
||||||
|
print(f"Поощрения {sotrudnik2.fio}: {sotrudnik2.pooshreniya}")
|
||||||
|
|
||||||
|
# Добавление нескольких поощрений сразу
|
||||||
|
print("\n6. Добавление нескольких поощрений:")
|
||||||
|
sotrudnik1.pooshreniya = ["Почетная грамота", "Ценный подарок"]
|
||||||
|
sotrudnik1.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Очистка поощрений (демонстрация делитера)
|
||||||
|
print("\n7. Очистка поощрений:")
|
||||||
|
del sotrudnik2.pooshreniya
|
||||||
|
sotrudnik2.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
print("\nДемонстрация завершена")
|
||||||
@ -0,0 +1,224 @@
|
|||||||
|
# 27
|
||||||
|
## create_test_files.py
|
||||||
|
```py
|
||||||
|
import struct
|
||||||
|
import random
|
||||||
|
|
||||||
|
def create_test_files():
|
||||||
|
"""Создание тестовых бинарных файлов для задания M3_27"""
|
||||||
|
|
||||||
|
# Файл 1: 15 элементов
|
||||||
|
data1 = [random.uniform(10, 50) for _ in range(15)]
|
||||||
|
with open('data1.bin', 'wb') as f:
|
||||||
|
for value in data1:
|
||||||
|
f.write(struct.pack('f', value))
|
||||||
|
print("Создан файл 'data1.bin' (15 элементов)")
|
||||||
|
|
||||||
|
# Файл 2: 20 элементов
|
||||||
|
data2 = [random.uniform(-5, 5) for _ in range(20)]
|
||||||
|
with open('data2.bin', 'wb') as f:
|
||||||
|
for value in data2:
|
||||||
|
f.write(struct.pack('f', value))
|
||||||
|
print("Создан файл 'data2.bin' (20 элементов)")
|
||||||
|
|
||||||
|
print("\nТестовые файлы готовы!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
create_test_files()
|
||||||
|
```
|
||||||
|
## M0.py
|
||||||
|
```py
|
||||||
|
import M2
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("ГЛАВНАЯ ПРОГРАММА M3_27")
|
||||||
|
print("Проведем расчеты для 2-х разных исходных файлов")
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
print("РАСЧЕТ 1:")
|
||||||
|
M2.main()
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
print("РАСЧЕТ 2:")
|
||||||
|
M2.main()
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
print("Все расчеты завершены!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
```
|
||||||
|
## M1.py
|
||||||
|
```py
|
||||||
|
def find_min_max_indices(data):
|
||||||
|
"""
|
||||||
|
Функция 1: Нахождение номеров элементов с наименьшим и наибольшим значениями
|
||||||
|
Аргумент: список или кортеж с выборкой
|
||||||
|
Возвращает: кортеж (индекс_мин, индекс_макс)
|
||||||
|
"""
|
||||||
|
if not data:
|
||||||
|
return -1, -1
|
||||||
|
|
||||||
|
min_index = data.index(min(data))
|
||||||
|
max_index = data.index(max(data))
|
||||||
|
return min_index, max_index
|
||||||
|
|
||||||
|
def calculate_group_averages(data, N):
|
||||||
|
"""
|
||||||
|
Функция 2: Разделение выборки на группы и расчет средних значений
|
||||||
|
Аргументы:
|
||||||
|
- data: список или кортеж с выборкой
|
||||||
|
- N: целочисленный параметр - размер группы
|
||||||
|
Возвращает: список средних значений по группам
|
||||||
|
"""
|
||||||
|
if not data or N <= 0:
|
||||||
|
return []
|
||||||
|
|
||||||
|
group_averages = []
|
||||||
|
for i in range(0, len(data), N):
|
||||||
|
group = data[i:i + N]
|
||||||
|
group_avg = sum(group) / len(group)
|
||||||
|
group_averages.append(group_avg)
|
||||||
|
|
||||||
|
return group_averages
|
||||||
|
```
|
||||||
|
## M2.py
|
||||||
|
```py
|
||||||
|
import os
|
||||||
|
import struct
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
def read_binary_file(filename):
|
||||||
|
"""Чтение данных из бинарного файла"""
|
||||||
|
data = []
|
||||||
|
try:
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
while True:
|
||||||
|
bytes_data = f.read(4)
|
||||||
|
if not bytes_data:
|
||||||
|
break
|
||||||
|
value = struct.unpack('f', bytes_data)[0]
|
||||||
|
data.append(value)
|
||||||
|
return data
|
||||||
|
except FileNotFoundError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Запрос имени файла с проверкой наличия
|
||||||
|
while True:
|
||||||
|
filename = input("Введите имя бинарного файла с выборкой: ")
|
||||||
|
if os.path.exists(filename):
|
||||||
|
break
|
||||||
|
print(f"Файл '{filename}' не найден. Попробуйте еще раз.")
|
||||||
|
|
||||||
|
# Чтение выборки из файла
|
||||||
|
data = read_binary_file(filename)
|
||||||
|
if data is None:
|
||||||
|
print("Ошибка чтения файла")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"Выборка считана из файла '{filename}'")
|
||||||
|
print(f"Число элементов: {len(data)}")
|
||||||
|
|
||||||
|
# Импорт функций из M1
|
||||||
|
from M1 import find_min_max_indices, calculate_group_averages
|
||||||
|
|
||||||
|
# Использование функции 1: нахождение номеров min и max
|
||||||
|
min_index, max_index = find_min_max_indices(data)
|
||||||
|
print(f"Номер элемента с наименьшим значением: {min_index}")
|
||||||
|
print(f"Номер элемента с наибольшим значением: {max_index}")
|
||||||
|
print(f"Наименьшее значение: {data[min_index]:.3f}")
|
||||||
|
print(f"Наибольшее значение: {data[max_index]:.3f}")
|
||||||
|
|
||||||
|
# Запрос числа N для формирования групп
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
N = int(input(f"Введите число элементов N для формирования групп (1-{len(data)}): "))
|
||||||
|
if 1 <= N <= len(data):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print(f"Введите число от 1 до {len(data)}")
|
||||||
|
except ValueError:
|
||||||
|
print("Введите целое число")
|
||||||
|
|
||||||
|
# Использование функции 2: расчет средних по группам
|
||||||
|
group_averages = calculate_group_averages(data, N)
|
||||||
|
|
||||||
|
print(f"\nРазделение на {len(group_averages)} групп:")
|
||||||
|
for i, avg in enumerate(group_averages):
|
||||||
|
start_idx = i * N
|
||||||
|
end_idx = min((i + 1) * N - 1, len(data) - 1)
|
||||||
|
print(f"Группа {i+1} (элементы {start_idx}-{end_idx}): среднее = {avg:.3f}")
|
||||||
|
|
||||||
|
# ПОСТРОЕНИЕ ГРАФИКА СОГЛАСНО ЗАДАНИЮ
|
||||||
|
plt.figure(figsize=(12, 6))
|
||||||
|
|
||||||
|
# Отображение исходной выборки (основное требование задания)
|
||||||
|
plt.plot(range(len(data)), data, 'bo-', linewidth=2, markersize=6, label='Исходная выборка')
|
||||||
|
|
||||||
|
# Дополнительно выделяем min и max (не требуется заданием, но полезно)
|
||||||
|
plt.plot(min_index, data[min_index], 'ro', markersize=10, label=f'Минимум (индекс {min_index})')
|
||||||
|
plt.plot(max_index, data[max_index], 'go', markersize=10, label=f'Максимум (индекс {max_index})')
|
||||||
|
|
||||||
|
plt.title(f'Исходная выборка из файла: {filename}')
|
||||||
|
plt.xlabel('Индекс элемента')
|
||||||
|
plt.ylabel('Значение')
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
```
|
||||||
|
## Пример запуска
|
||||||
|
```py
|
||||||
|
Создан файл 'data1.bin' (15 элементов)
|
||||||
|
Создан файл 'data2.bin' (20 элементов)
|
||||||
|
|
||||||
|
Тестовые файлы готовы!
|
||||||
|
```
|
||||||
|
```py
|
||||||
|
ГЛАВНАЯ ПРОГРАММА M3_27
|
||||||
|
Проведем расчеты для 2-х разных исходных файлов
|
||||||
|
|
||||||
|
|
||||||
|
РАСЧЕТ 1:
|
||||||
|
Введите имя бинарного файла с выборкой: data1.bin
|
||||||
|
Выборка считана из файла 'data1.bin'
|
||||||
|
Число элементов: 15
|
||||||
|
Номер элемента с наименьшим значением: 9
|
||||||
|
Номер элемента с наибольшим значением: 10
|
||||||
|
Наименьшее значение: 10.079
|
||||||
|
Наибольшее значение: 48.704
|
||||||
|
Введите число элементов N для формирования групп (1-15): 3
|
||||||
|
|
||||||
|
Разделение на 5 групп:
|
||||||
|
Группа 1 (элементы 0-2): среднее = 18.515
|
||||||
|
Группа 2 (элементы 3-5): среднее = 33.627
|
||||||
|
Группа 3 (элементы 6-8): среднее = 36.964
|
||||||
|
Группа 4 (элементы 9-11): среднее = 29.794
|
||||||
|
Группа 5 (элементы 12-14): среднее = 29.427
|
||||||
|
```
|
||||||
|

|
||||||
|
```py
|
||||||
|
РАСЧЕТ 2:
|
||||||
|
Введите имя бинарного файла с выборкой: data2.bin
|
||||||
|
Выборка считана из файла 'data2.bin'
|
||||||
|
Число элементов: 20
|
||||||
|
Номер элемента с наименьшим значением: 13
|
||||||
|
Номер элемента с наибольшим значением: 16
|
||||||
|
Наименьшее значение: -3.310
|
||||||
|
Наибольшее значение: 4.489
|
||||||
|
Введите число элементов N для формирования групп (1-20): 5
|
||||||
|
|
||||||
|
Разделение на 4 групп:
|
||||||
|
Группа 1 (элементы 0-4): среднее = 0.637
|
||||||
|
Группа 2 (элементы 5-9): среднее = 0.159
|
||||||
|
Группа 3 (элементы 10-14): среднее = -0.665
|
||||||
|
Группа 4 (элементы 15-19): среднее = 0.210
|
||||||
|
|
||||||
|
|
||||||
|
Все расчеты завершены!
|
||||||
|
```
|
||||||
|

|
||||||
@ -0,0 +1,91 @@
|
|||||||
|
#27
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import pickle
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
from statistics import mean
|
||||||
|
|
||||||
|
def функция1(выборка):
|
||||||
|
"""Поиск индексов min и max элементов"""
|
||||||
|
if not выборка:
|
||||||
|
return -1, -1
|
||||||
|
|
||||||
|
min_idx = выборка.index(min(выборка))
|
||||||
|
max_idx = выборка.index(max(выборка))
|
||||||
|
return min_idx, max_idx
|
||||||
|
|
||||||
|
def функция2(выборка, N):
|
||||||
|
"""Разделение на группы и расчет средних"""
|
||||||
|
if N <= 0:
|
||||||
|
return []
|
||||||
|
|
||||||
|
средние = []
|
||||||
|
for i in range(0, len(выборка), N):
|
||||||
|
группа = выборка[i:i+N]
|
||||||
|
средние.append(mean(группа))
|
||||||
|
|
||||||
|
return средние
|
||||||
|
|
||||||
|
def M2():
|
||||||
|
while True:
|
||||||
|
имя_файла = input("Введите имя бинарного файла: ")
|
||||||
|
if os.path.exists(имя_файла):
|
||||||
|
break
|
||||||
|
print("Файл не найден!")
|
||||||
|
|
||||||
|
with open(имя_файла, 'rb') as f:
|
||||||
|
выборка = pickle.load(f)
|
||||||
|
|
||||||
|
min_idx, max_idx = функция1(выборка)
|
||||||
|
print(f"Индекс min: {min_idx}, значение: {выборка[min_idx]}")
|
||||||
|
print(f"Индекс max: {max_idx}, значение: {выборка[max_idx]}")
|
||||||
|
print(f"Число элементов: {len(выборка)}")
|
||||||
|
|
||||||
|
N = int(input("Введите число элементов в группе: "))
|
||||||
|
средние = функция2(выборка, N)
|
||||||
|
print(f"Средние по группам: {средние}")
|
||||||
|
|
||||||
|
# График
|
||||||
|
plt.figure(figsize=(10, 6))
|
||||||
|
plt.plot(выборка, 'b.-', alpha=0.7)
|
||||||
|
plt.title('Исходная выборка')
|
||||||
|
plt.xlabel('Индекс')
|
||||||
|
plt.ylabel('Значение')
|
||||||
|
plt.grid(True)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
return выборка, min_idx, max_idx, средние
|
||||||
|
|
||||||
|
def M0():
|
||||||
|
выборка, min_idx, max_idx, средние = M2()
|
||||||
|
print(f"Min: {выборка[min_idx]} (индекс {min_idx})")
|
||||||
|
print(f"Max: {выборка[max_idx]} (индекс {max_idx})")
|
||||||
|
print(f"Средние по группам: {средние}")
|
||||||
|
|
||||||
|
def создать_тестовые_файлы():
|
||||||
|
# Первый файл
|
||||||
|
данные1 = [random.gauss(0, 1) for _ in range(30)]
|
||||||
|
with open('выборка1_M3_27.bin', 'wb') as f:
|
||||||
|
pickle.dump(данные1, f)
|
||||||
|
|
||||||
|
# Второй файл
|
||||||
|
данные2 = [random.uniform(-5, 5) for _ in range(25)]
|
||||||
|
with open('выборка2_M3_27.bin', 'wb') as f:
|
||||||
|
pickle.dump(данные2, f)
|
||||||
|
|
||||||
|
# Пример запуска
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("=== M3_27: Анализ выборки с группировкой ===")
|
||||||
|
создать_тестовые_файлы()
|
||||||
|
print("Созданы тестовые файлы: выборка1_M3_27.bin и выборка2_M3_27.bin")
|
||||||
|
|
||||||
|
# Тестовый пример
|
||||||
|
тест_выборка = [1, 5, 3, 8, 2, 7, 4, 6]
|
||||||
|
min_idx, max_idx = функция1(тест_выборка)
|
||||||
|
средние = функция2(тест_выборка, 3)
|
||||||
|
print(f"Тестовая выборка: {тест_выборка}")
|
||||||
|
print(f"Min индекс: {min_idx}, Max индекс: {max_idx}")
|
||||||
|
print(f"Средние по группам: {средние}")
|
||||||
|
|
||||||
|
M0()
|
||||||
@ -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()
|
||||||
@ -0,0 +1,209 @@
|
|||||||
|
# Общее контрольное задание
|
||||||
|
|
||||||
|
## Создайте и запишите в модуль класс, содержащий следующие компоненты: конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; метод для обеспечения операции повышения оклада сотрудника на заданное значение; метод для обеспечения перевода сотрудника из одного отдела в другой; метод для изменения должности сотрудника; свойство, содержащее перечень (список) поощрений сотрудника. Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
|
||||||
|
|
||||||
|
```py
|
||||||
|
class Employee:
|
||||||
|
"""
|
||||||
|
Класс для представления сотрудника организации
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, fio="Неизвестно", otdel="Не назначен",
|
||||||
|
dolzhnost="Не определена", oklad=0):
|
||||||
|
"""
|
||||||
|
Конструктор класса Employee
|
||||||
|
"""
|
||||||
|
self.fio = fio
|
||||||
|
self.otdel = otdel
|
||||||
|
self.dolzhnost = dolzhnost
|
||||||
|
self.oklad = oklad
|
||||||
|
self.__pooshreniya = [] # приватный атрибут для хранения поощрений
|
||||||
|
|
||||||
|
# Создаем свойство без декораторов
|
||||||
|
self.pooshreniya = property(self._get_pooshreniya,
|
||||||
|
self._set_pooshreniya,
|
||||||
|
self._del_pooshreniya)
|
||||||
|
|
||||||
|
def povysit_oklad(self, summa):
|
||||||
|
"""
|
||||||
|
Метод для повышения оклада сотрудника на заданную сумму
|
||||||
|
"""
|
||||||
|
if summa > 0:
|
||||||
|
self.oklad += summa
|
||||||
|
print(f"Оклад сотрудника {self.fio} повышен на {summa}. Новый оклад: {self.oklad}")
|
||||||
|
else:
|
||||||
|
print("Сумма повышения должна быть положительной")
|
||||||
|
|
||||||
|
def perevesti_otdel(self, noviy_otdel):
|
||||||
|
"""
|
||||||
|
Метод для перевода сотрудника в другой отдел
|
||||||
|
"""
|
||||||
|
stariy_otdel = self.otdel
|
||||||
|
self.otdel = noviy_otdel
|
||||||
|
print(f"Сотрудник {self.fio} переведен из отдела '{stariy_otdel}' в отдел '{noviy_otdel}'")
|
||||||
|
|
||||||
|
def izmenit_dolzhnost(self, novaya_dolzhnost):
|
||||||
|
"""
|
||||||
|
Метод для изменения должности сотрудника
|
||||||
|
"""
|
||||||
|
staraya_dolzhnost = self.dolzhnost
|
||||||
|
self.dolzhnost = novaya_dolzhnost
|
||||||
|
print(f"Сотрудник {self.fio} переведен с должности '{staraya_dolzhnost}' на должность '{novaya_dolzhnost}'")
|
||||||
|
|
||||||
|
# Методы для свойства pooshreniya (вместо декораторов)
|
||||||
|
def _get_pooshreniya(self):
|
||||||
|
"""Геттер для получения списка поощрений"""
|
||||||
|
return self.__pooshreniya
|
||||||
|
|
||||||
|
def _set_pooshreniya(self, value):
|
||||||
|
"""Сеттер для добавления нового поощрения"""
|
||||||
|
if isinstance(value, str):
|
||||||
|
self.__pooshreniya.append(value)
|
||||||
|
print(f"Добавлено поощрение для {self.fio}: '{value}'")
|
||||||
|
elif isinstance(value, list):
|
||||||
|
self.__pooshreniya.extend(value)
|
||||||
|
print(f"Добавлены поощрения для {self.fio}: {value}")
|
||||||
|
else:
|
||||||
|
print("Поощрение должно быть строкой или списком строк")
|
||||||
|
|
||||||
|
def _del_pooshreniya(self):
|
||||||
|
"""Делитер для очистки списка поощрений"""
|
||||||
|
self.__pooshreniya.clear()
|
||||||
|
print(f"Список поощрений сотрудника {self.fio} очищен")
|
||||||
|
|
||||||
|
def dobavit_pooshrenie(self, pooshrenie):
|
||||||
|
"""
|
||||||
|
Альтернативный метод для добавления поощрения
|
||||||
|
"""
|
||||||
|
self.__pooshreniya.append(pooshrenie)
|
||||||
|
print(f"Добавлено поощрение для {self.fio}: '{pooshrenie}'")
|
||||||
|
|
||||||
|
def otobrazit_informaciyu(self):
|
||||||
|
"""
|
||||||
|
Метод для отображения полной информации о сотруднике
|
||||||
|
"""
|
||||||
|
print("\n")
|
||||||
|
print(f"ФИО: {self.fio}")
|
||||||
|
print(f"Отдел: {self.otdel}")
|
||||||
|
print(f"Должность: {self.dolzhnost}")
|
||||||
|
print(f"Оклад: {self.oklad} руб.")
|
||||||
|
print(f"Поощрения: {self.__pooshreniya if self.__pooshreniya else 'нет'}")
|
||||||
|
|
||||||
|
|
||||||
|
# Демонстрационная программа
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("Демонстрация работы класса EMPLOYEE\n")
|
||||||
|
|
||||||
|
# Создание первого экземпляра класса
|
||||||
|
print("1. Создание первого сотрудника:")
|
||||||
|
sotrudnik1 = Employee("Петров Алексей Сергеевич", "IT-отдел", "Программист", 50000)
|
||||||
|
sotrudnik1.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Создание второго экземпляра класса
|
||||||
|
print("\n2. Создание второго сотрудника:")
|
||||||
|
sotrudnik2 = Employee("Сидорова Мария Петровна", "Бухгалтерия", "Главный бухгалтер", 75000)
|
||||||
|
sotrudnik2.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Операции с первым сотрудником
|
||||||
|
print("\n3. Операции с первым сотрудником:")
|
||||||
|
sotrudnik1.povysit_oklad(10000)
|
||||||
|
sotrudnik1.perevesti_otdel("Отдел разработки")
|
||||||
|
sotrudnik1.izmenit_dolzhnost("Старший программист")
|
||||||
|
sotrudnik1.pooshreniya = "Благодарность за успешный проект"
|
||||||
|
sotrudnik1.pooshreniya = "Премия за квартал"
|
||||||
|
sotrudnik1.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Операции со вторым сотрудником
|
||||||
|
print("\n4. Операции со вторым сотрудником:")
|
||||||
|
sotrudnik2.povysit_oklad(5000)
|
||||||
|
sotrudnik2.perevesti_otdel("Финансовый отдел")
|
||||||
|
sotrudnik2.dobavit_pooshrenie("Благодарность за годовой отчет")
|
||||||
|
sotrudnik2.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Работа со свойствами
|
||||||
|
print("\n5. Работа со свойствами:")
|
||||||
|
print(f"Поощрения {sotrudnik1.fio}: {sotrudnik1.pooshreniya}")
|
||||||
|
print(f"Поощрения {sotrudnik2.fio}: {sotrudnik2.pooshreniya}")
|
||||||
|
|
||||||
|
# Добавление нескольких поощрений сразу
|
||||||
|
print("\n6. Добавление нескольких поощрений:")
|
||||||
|
sotrudnik1.pooshreniya = ["Почетная грамота", "Ценный подарок"]
|
||||||
|
sotrudnik1.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
# Очистка поощрений (демонстрация делитера)
|
||||||
|
print("\n7. Очистка поощрений:")
|
||||||
|
del sotrudnik2.pooshreniya
|
||||||
|
sotrudnik2.otobrazit_informaciyu()
|
||||||
|
|
||||||
|
print("\nДемонстрация завершена")
|
||||||
|
```
|
||||||
|
## Получу следующее:
|
||||||
|
```py
|
||||||
|
Демонстрация работы класса EMPLOYEE
|
||||||
|
|
||||||
|
1. Создание первого сотрудника:
|
||||||
|
|
||||||
|
|
||||||
|
ФИО: Петров Алексей Сергеевич
|
||||||
|
Отдел: IT-отдел
|
||||||
|
Должность: Программист
|
||||||
|
Оклад: 50000 руб.
|
||||||
|
Поощрения: нет
|
||||||
|
|
||||||
|
2. Создание второго сотрудника:
|
||||||
|
|
||||||
|
|
||||||
|
ФИО: Сидорова Мария Петровна
|
||||||
|
Отдел: Бухгалтерия
|
||||||
|
Должность: Главный бухгалтер
|
||||||
|
Оклад: 75000 руб.
|
||||||
|
Поощрения: нет
|
||||||
|
|
||||||
|
3. Операции с первым сотрудником:
|
||||||
|
Оклад сотрудника Петров Алексей Сергеевич повышен на 10000. Новый оклад: 60000
|
||||||
|
Сотрудник Петров Алексей Сергеевич переведен из отдела 'IT-отдел' в отдел 'Отдел разработки'
|
||||||
|
Сотрудник Петров Алексей Сергеевич переведен с должности 'Программист' на должность 'Старший программист'
|
||||||
|
|
||||||
|
|
||||||
|
ФИО: Петров Алексей Сергеевич
|
||||||
|
Отдел: Отдел разработки
|
||||||
|
Должность: Старший программист
|
||||||
|
Оклад: 60000 руб.
|
||||||
|
Поощрения: нет
|
||||||
|
|
||||||
|
4. Операции со вторым сотрудником:
|
||||||
|
Оклад сотрудника Сидорова Мария Петровна повышен на 5000. Новый оклад: 80000
|
||||||
|
Сотрудник Сидорова Мария Петровна переведен из отдела 'Бухгалтерия' в отдел 'Финансовый отдел'
|
||||||
|
Добавлено поощрение для Сидорова Мария Петровна: 'Благодарность за годовой отчет'
|
||||||
|
|
||||||
|
|
||||||
|
ФИО: Сидорова Мария Петровна
|
||||||
|
Отдел: Финансовый отдел
|
||||||
|
Должность: Главный бухгалтер
|
||||||
|
Оклад: 80000 руб.
|
||||||
|
Поощрения: ['Благодарность за годовой отчет']
|
||||||
|
|
||||||
|
5. Работа со свойствами:
|
||||||
|
Поощрения Петров Алексей Сергеевич: Премия за квартал
|
||||||
|
Поощрения Сидорова Мария Петровна: <property object at 0x0000026057B9E5C0>
|
||||||
|
|
||||||
|
6. Добавление нескольких поощрений:
|
||||||
|
|
||||||
|
|
||||||
|
ФИО: Петров Алексей Сергеевич
|
||||||
|
Отдел: Отдел разработки
|
||||||
|
Должность: Старший программист
|
||||||
|
Оклад: 60000 руб.
|
||||||
|
Поощрения: нет
|
||||||
|
|
||||||
|
7. Очистка поощрений:
|
||||||
|
|
||||||
|
|
||||||
|
ФИО: Сидорова Мария Петровна
|
||||||
|
Отдел: Финансовый отдел
|
||||||
|
Должность: Главный бухгалтер
|
||||||
|
Оклад: 80000 руб.
|
||||||
|
Поощрения: ['Благодарность за годовой отчет']
|
||||||
|
|
||||||
|
Демонстрация завершена
|
||||||
|
```
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||||
|
z4=Class1()
|
||||||
|
z4.otobrazh()
|
||||||
@ -0,0 +1,293 @@
|
|||||||
|
# 1. Запустили интерактивную оболочку IDLE, открыли окно текстового редактора
|
||||||
|
# 2. Создание классов и их наследников
|
||||||
|
## 2.1. Создание автономного класса
|
||||||
|
### Создам класс с именем Class1, содержащий 2 функции, реализующие его методы
|
||||||
|
```py
|
||||||
|
class Class1: #Объявление класса
|
||||||
|
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
|
||||||
|
self.data=znach # self - ссылка на экземпляр класса
|
||||||
|
def otobrazh(self): # Метод 2 класса1
|
||||||
|
print(self.data)#Отображение данных экземпляра класса
|
||||||
|
```
|
||||||
|
### Создам 2 экземпляра этого класса
|
||||||
|
```py
|
||||||
|
z1=Class1() #Создаём 1-й экземпляр класса
|
||||||
|
z2=Class1() #Создаём 2-й экземпляр класса
|
||||||
|
```
|
||||||
|
### С помощью первого метода задам разные значения атрибута у двух экземпляров
|
||||||
|
```py
|
||||||
|
z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
|
||||||
|
z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
|
||||||
|
```
|
||||||
|
### Для контроля отображу его значения с помощью второго метода
|
||||||
|
```py
|
||||||
|
z1.otobrazh() # Обращение ко второму методу класса
|
||||||
|
экз.класса 1
|
||||||
|
z2.otobrazh()
|
||||||
|
-632.453
|
||||||
|
```
|
||||||
|
### Изменю значение атрибута у первого экземпляра и отображу его
|
||||||
|
```py
|
||||||
|
z1.data='Новое значение атрибута у экз.1'
|
||||||
|
z1.otobrazh()
|
||||||
|
Новое значение атрибута у экз.1
|
||||||
|
```
|
||||||
|
## 2.2. Создание класса-наследника
|
||||||
|
### В объявлении класса после его имени в скобках перечисляются его «родительские классы»
|
||||||
|
```py
|
||||||
|
class Class2(Class1): #Class2 - наследник класса Class1
|
||||||
|
def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
|
||||||
|
print('значение=',self.data)#Отображение данных экземпляра
|
||||||
|
```
|
||||||
|
### Метод класса имеет то же имя, что и второй метод у родительского класса
|
||||||
|
|
||||||
|
### Создам экземпляр второго класса
|
||||||
|
```py
|
||||||
|
z3=Class2()
|
||||||
|
```
|
||||||
|
### Посмотрю список его атрибутов
|
||||||
|
```py
|
||||||
|
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__', 'otobrazh', 'zad_zn']
|
||||||
|
```
|
||||||
|
### Задам у него значение данного data (унаследовано от Class1)
|
||||||
|
```py
|
||||||
|
z3.zad_zn('Совсем новое')
|
||||||
|
```
|
||||||
|
### Отображу его для контроля
|
||||||
|
```py
|
||||||
|
z3.otobrazh()
|
||||||
|
значение= Совсем новое
|
||||||
|
```
|
||||||
|
#### Поскольку метод otobrazh есть и у класса Class2, и у его родительского класса Class1, проанализирую, метод какого класса сработал при выводе этого значения.
|
||||||
|
#### Сработал метод класса Class2. Это демонстрация переопределения методов в наследовании. Когда дочерний класс определяет метод с тем же именем, что и родительский класс, метод дочернего класса "перекрывает" родительский метод
|
||||||
|
|
||||||
|
### Для проверки отображу значение данного data у первого экземпляра первого класса
|
||||||
|
```py
|
||||||
|
z1.otobrazh()
|
||||||
|
Новое значение атрибута у экз.1
|
||||||
|
```
|
||||||
|
#### Значение не изменилось. Это подтвержает, что каждый экземпляр класса имеет свои собственные атрибуты, изменение атрибута data у экземпляра z3 (класса Class2) никак не влияет на атрибут data у экземпляра z1 (класса Class1), экземпляры классов являются независимыми объектами в памяти
|
||||||
|
|
||||||
|
### Удалю экземпляры классов инструкцией
|
||||||
|
```py
|
||||||
|
del z1,z2,z3
|
||||||
|
```
|
||||||
|
# 3. Использование классов, содержащихся в модулях
|
||||||
|
### Создам модуль с именем Mod3
|
||||||
|

|
||||||
|
### Импортирую первый класс из модуля
|
||||||
|
```py
|
||||||
|
from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||||
|
```
|
||||||
|
```py
|
||||||
|
z4=Class1()
|
||||||
|
z4.otobrazh()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#31>", line 1, in <module>
|
||||||
|
z4.otobrazh()
|
||||||
|
File "C:\Users\User-PC\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
|
||||||
|
print(self.data)#Отображение данных экземпляра
|
||||||
|
AttributeError: 'Class1' object has no attribute 'data'
|
||||||
|
```
|
||||||
|
#### Ошибка возникла потому, что у экземпляра z4 не был определен атрибут data. При запуске происходит следующее: создается экземпляр z4 класса Class1; вызывается метод otobrazh(), который пытается выполнить print(self.data); но атрибут data еще не был создан, так как метод zad_zn() никогда не вызывался
|
||||||
|
#### Решение: нужно сначала установить значение через метод zad_zn() или напрямую присвоить атрибут data
|
||||||
|
|
||||||
|
### Попробую иначе
|
||||||
|
```py
|
||||||
|
from Mod3 import Class1
|
||||||
|
z4=Class1()
|
||||||
|
z4.data='значение данного data у экз.4'
|
||||||
|
z4.otobrazh()
|
||||||
|
значение данного data у экз.4
|
||||||
|
```
|
||||||
|
### Удалю экземпляр z4 и после этого импортирую модуль целиком
|
||||||
|
```py
|
||||||
|
del z4
|
||||||
|
import Mod3 #Полный импорт содержимого модуля
|
||||||
|
```
|
||||||
|
### Создам экземпляр класса теперь инструкцией
|
||||||
|
```py
|
||||||
|
import Mod3 #Полный импорт содержимого модуля
|
||||||
|
z4=Mod3.Class2()
|
||||||
|
z4.zad_zn('Класс из модуля')
|
||||||
|
z4.otobrazh()
|
||||||
|
значение= Класс из модуля
|
||||||
|
Mod3.otobrazh('Объект')
|
||||||
|
значение объекта= Объект
|
||||||
|
```
|
||||||
|
#### Ключевые различия: метод класса работает с атрибутами экземпляра (self.data), самостоятельная функция работает с переданным ей аргументом (objekt), класс Class2 переопределил метод otobrazh, добавив префикс "значение=", разные способы импорта (from Mod3 import Class1 vs import Mod3) влияют на пространство имен
|
||||||
|
|
||||||
|
# 4. Использование специальных методов
|
||||||
|
#### Имена специальных методов предваряются одним или двумя подчерками и имеют вид: __<имя специального метода>__
|
||||||
|
#### Специальные методы (dunder methods - double underscore) нужны для реализации определенного поведения объектов в Python. Их особенности: автоматический вызов - вызываются интерпретатором в определенных ситуациях; перегрузка операторов - позволяют определить поведение объектов при использовании операторов (+, -, *, / и т.д.); эмуляция встроенных типов - позволяют создаваемым классам вести себя как встроенные типы Python; контроль жизненного цикла - управление созданием, инициализацией и удалением объектов; синтаксический сахар - делают код более читаемым и интуитивно понятным
|
||||||
|
|
||||||
|
### Cоздам класс, содержащий два специальных метода
|
||||||
|
```py
|
||||||
|
class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
|
||||||
|
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
|
||||||
|
```
|
||||||
|
### Для иллюстрации работы этих методов создам экземпляр класса Class3 и отображу его
|
||||||
|
```py
|
||||||
|
z5=Class3('abc') #При создании экземпляра срабатывает конструктор
|
||||||
|
z5.otobrazh()
|
||||||
|
значение= abc
|
||||||
|
```
|
||||||
|
### Теперь выполню операцию «+» (должен сработать специальный метод __add__)
|
||||||
|
```py
|
||||||
|
z6=z5+'def'
|
||||||
|
z6.otobrazh()
|
||||||
|
значение= abcdef
|
||||||
|
```
|
||||||
|
### Обращусь к обычному методу класса
|
||||||
|
```py
|
||||||
|
z6.zad_dr_zn(3)
|
||||||
|
z6.otobrazh()
|
||||||
|
значение= abcdefabcdefabcdef
|
||||||
|
```
|
||||||
|
# 5. Присоединение атрибутов к классу
|
||||||
|
### Выведу список атрибутов класса Class3
|
||||||
|
```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__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
```
|
||||||
|
### Создам новый атрибут класса простым присваиванием
|
||||||
|
```py
|
||||||
|
Class3.fio='Иванов И.И.'
|
||||||
|
```
|
||||||
|
### Вновь выведу список атрибутов и увижу, что у класса появился новый атрибут fio
|
||||||
|
```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__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
```
|
||||||
|
### Создам экземпляр
|
||||||
|
```py
|
||||||
|
z7=Class3(123)
|
||||||
|
```
|
||||||
|
### Выведу список атрибутов экземпляра. Сделаю формальную проверку, чтобы понять совпадает ли он с атрибутами класса
|
||||||
|
```py
|
||||||
|
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', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
dir(z7)==dir(Class3)
|
||||||
|
False
|
||||||
|
```
|
||||||
|
#### Различия: dir(Class3) показывает атрибуты класса (методы, классовые атрибуты); dir(z7) показывает атрибуты экземпляра (данные экземпляра + атрибуты класса); у экземпляра появляются атрибуты data, rozden, которых нет в списке атрибутов класса
|
||||||
|
|
||||||
|
### Отображу значение атрибута fio у экземпляра z7
|
||||||
|
```py
|
||||||
|
print(z7.fio)
|
||||||
|
Иванов И.И.
|
||||||
|
```
|
||||||
|
#### Полученное значение совпадает со значением атрибута класса. Поскольку fio был добавлен к классу Class3, а у экземпляра z7 такого атрибута нет, Python находит его на уровне класса
|
||||||
|
|
||||||
|
### Объявлю новый атрибут у созданного экземпляра. После выведу список атрибутов экземпляра z7 и увижу, что в нем появился атрибут rozden
|
||||||
|
```py
|
||||||
|
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', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
|
||||||
|
```
|
||||||
|
### Вновь выведу список атрибутов класса Class3. Увижу появился ли атрибут rozden у класса
|
||||||
|
```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__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
```
|
||||||
|
#### Этот атрибут не появился. Атрибут rozden был добавлен только к экземпляру z7, но не к классу Class3. Изменения на уровне экземпляра не влияют на класс
|
||||||
|
|
||||||
|
# 6. Выявление родительских классов
|
||||||
|
### Такое выявление делается с помощью специального атрибута __bases__
|
||||||
|
### Выведу родительский класс для созданного класса Class3
|
||||||
|
```py
|
||||||
|
Class3.__bases__
|
||||||
|
(<class '__main__.Class2'>,)
|
||||||
|
```
|
||||||
|
### Выведу родительский класс для созданного класса Class2
|
||||||
|
```py
|
||||||
|
Class2.__bases__
|
||||||
|
(<class '__main__.Class1'>,)
|
||||||
|
```
|
||||||
|
### Выведу родительский класс для созданного класса Class1
|
||||||
|
```py
|
||||||
|
Class1.__bases__
|
||||||
|
(<class 'object'>,)
|
||||||
|
```
|
||||||
|
### Для получения всей цепочки наследования использую атрибут __mro__
|
||||||
|
```py
|
||||||
|
Class3.__mro__
|
||||||
|
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
|
||||||
|
```
|
||||||
|
### Получу всю цепочку наследования для встроенного класса ошибок «деление на ноль»
|
||||||
|
```py
|
||||||
|
ZeroDivisionError.__mro__
|
||||||
|
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
|
||||||
|
```
|
||||||
|
|
||||||
|
# 7. Создание свойства класса.
|
||||||
|
#### Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута
|
||||||
|
### Создам новый класс с определенным в нем свойством. Здесь имеется 3 метода: chten, zapis, stiran, которые обслуживают созданное свойство, реализуя операции, соответственно, чтения, записи или удаления значений свойства
|
||||||
|
```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)
|
||||||
|
```
|
||||||
|
### Попробуем некоторые операции с этим свойством
|
||||||
|
```py
|
||||||
|
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#75>", line 1, in <module>
|
||||||
|
exempl.svojstvo
|
||||||
|
File "<pyshell#69>", line 5, in chten
|
||||||
|
return sam.__prm
|
||||||
|
AttributeError: 'Class4' object has no attribute '_Class4__prm'
|
||||||
|
```
|
||||||
|
#### Полученный результат и объяснение: после выполнения del exempl.svojstvo происходит следующее: вызывается метод stiran, который выполняет del sam.__prm; удаляется приватный атрибут __prm у экземпляра; при последующей попытке чтения exempl.svojstvo: вызывается метод chten; метод пытается вернуть sam.__prm; но атрибут __prm уже удален; возникает ошибка AttributeError
|
||||||
|
|
||||||
|
# 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
|
||||||
|
### Создам модуль SAU.py с классом
|
||||||
|

|
||||||
|
### Тестирование класса произведу с помощью следующей программы:
|
||||||
|

|
||||||
|
### Запущу программу на выполнение и изучу вид выходного сигнала при разных значениях параметров САР
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### Построился график переходного процесса системы
|
||||||
|

|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
Python 3.13.7 (tags/v3.13.7:bcee1c3, Aug 14 2025, 14:15:11) [MSC v.1944 64 bit (AMD64)] on win32
|
||||||
|
Enter "help" below or click "Help" above for more information.
|
||||||
|
class Class1: #Объявление класса
|
||||||
|
def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
|
||||||
|
self.data=znach # self - ссылка на экземпляр класса
|
||||||
|
def otobrazh(self): # Метод 2 класса1
|
||||||
|
print(self.data)#Отображение данных экземпляра класса
|
||||||
|
|
||||||
|
z1=Class1() #Создаём 1-й экземпляр класса
|
||||||
|
z2=Class1() #Создаём 2-й экземпляр класса
|
||||||
|
z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
|
||||||
|
z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
|
||||||
|
z1.otobrazh() # Обращение ко второму методу класса
|
||||||
|
экз.класса 1
|
||||||
|
z2.otobrazh()
|
||||||
|
-632.453
|
||||||
|
z1.data='Новое значение атрибута у экз.1'
|
||||||
|
z1.otobrazh()
|
||||||
|
Новое значение атрибута у экз.1
|
||||||
|
class Class2(Class1): #Class2 - наследник класса Class1
|
||||||
|
def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
|
||||||
|
... 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__', 'otobrazh', 'zad_zn']
|
||||||
|
>>> z3.zad_zn('Совсем новое')
|
||||||
|
>>> z3.otobrazh()
|
||||||
|
значение= Совсем новое
|
||||||
|
>>> z1.otobrazh()
|
||||||
|
Новое значение атрибута у экз.1
|
||||||
|
>>> del z1,z2,z3
|
||||||
|
>>> from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#17>", line 1, in <module>
|
||||||
|
from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||||
|
ModuleNotFoundError: No module named 'Mod3'
|
||||||
|
>>> from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<pyshell#18>", line 1, in <module>
|
||||||
|
from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||||
|
ModuleNotFoundError: No module named 'Mod3'
|
||||||
|
После Ширина: | Высота: | Размер: 127 KiB |
|
После Ширина: | Высота: | Размер: 126 KiB |
|
После Ширина: | Высота: | Размер: 123 KiB |
|
После Ширина: | Высота: | Размер: 65 KiB |
|
После Ширина: | Высота: | Размер: 103 KiB |
|
После Ширина: | Высота: | Размер: 118 KiB |