KhatiukhinYS 4 дней назад
Родитель f4e2fe42e4
Сommit 7885d7766d

@ -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}")

Двоичные данные
Pasted image 20251012124853.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 63 KiB

Двоичные данные
Pasted image 20251124110347.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

@ -1,6 +1,6 @@
# Тема 0: образец оформления материалов
* `README.md` — этот документ, в своих темах создавать не нужно;
* [`report.md`](report.md) — отчет;
* [`task.md`](task.md) — общее контрольное задание;
* [`test.md`](test.md) — индивидуальное контрольное задание.
* [`report.md`](TEMA0/report.md) — отчет;
* [`task.md`](TEMA0/task.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
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']

@ -22,8 +22,7 @@ print('Средние зарплаты:', zp)
```
# 5 Напишите инструкцию, вычисляющую среднюю вероятность трудоустройства по представленным в словаре профессиям.
```py
spis = list(dic1.values())
spis = sum(spis,[])
zp = spis[0::3]
print('Средние зарплаты:', zp)
ver = spis[1::3]
#print(ver)
print('Средняя вероятность трудоустройства:', round(sum(ver)/len(ver),2))
```

@ -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")

@ -24,7 +24,7 @@ if rashod1>=3 and rashod2==4:
dohod=porog
dohod
-8
>>>if porog==3:
if porog==3:
dohod=1
elif porog==4:
dohod=2
@ -34,16 +34,16 @@ else:
dohod=0
>>>dohod
dohod
0
>>>dohod=2 if porog>=4 else 0
>>>dohod
dohod=2 if porog>=4 else 0
dohod
2
>>>if porog>=5 : rashod1=6; rashod2=0
if porog>=5 : rashod1=6; rashod2=0
>>>rashod1
rashod1
6
>>>rashod2
rashod2
0
```

@ -0,0 +1 @@
запись строки в файл

Двоичные данные
TEMA6/binomnutona

Двоичный файл не отображается.

@ -72,9 +72,9 @@ print(eval(input('введите выражение для расчета = ')))
## 4.1 Изучение модуля os для работы с путями к файлам
mkdir - создает папку в рабочем каталоге (в приложенном фото видно, что в каталоге появилась папка);  
![[Pasted image 20251108152648.png]]
![[TEMA6/1.png]]
rmdir - удаляет из каталога пустую папку;
![[Pasted image 20251108152738.png]]
![[TEMA6/2.png]]
listdir - возвращает список имен файлов/папок в указанном каталоге (или если аргумент не указан, то в текущем каталоге);
path.isdir - возвращает true, если папка является существующей в каталоге.
```py
@ -165,7 +165,7 @@ fp2.write(str(sps[8:])+'\n')
16
fp2.close()
```
![[Pasted image 20251108154730.png]]
![[4.png]]
```py
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
sps3
@ -181,7 +181,7 @@ for i in range(len(sps3)):
12
fp3.close()
```
![[Pasted image 20251108154854.png]]
![[5.png]]
```py
gh=open('zapis5.txt','w')
for r in sps3:
@ -200,8 +200,8 @@ for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
13
gh.close()
```
![[Pasted image 20251108155051.png]]
![[Pasted image 20251108155102.png]]
![[6.png]]
![[7.png]]
## 4.6 Изучение одного из способов чтения данных из файла с помощью цикла for
```py
sps1=[]
@ -270,7 +270,7 @@ mnoz2 #Результат не такой как при вводе множес
mnoz1 == mnoz2
True
```
![[Pasted image 20251110134630.png]]
![[8.png]]
```py
fp=open('zapis7.2ob','wb')
pickle.dump(mnoz1,fp)
@ -299,7 +299,7 @@ print('запись строки на экран')
запись строки на экран
fc.close()
```
![[Pasted image 20251110142228.png]]
![[9.png]]
```py
tmp_in = sys.stdin #Запоминаем текущий поток ввода
fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения)

@ -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
0.0003270125124308196,0.0008889121702194339
0.0022305387662290435,0.005166746338523005
0.011047930833002744,0.0218072646584863
0.03973542691931943,0.06683608675088473
0.10377687435514864,0.1487464465643672
0.19681085792857178,0.24038532470982693
0.2710336967762158,0.28209479177387814
0.2710336967762158,0.24038532470982693
0.19681085792857178,0.1487464465643672
0.10377687435514864,0.06683608675088476
0.039735426919319465,0.021807264658486338
0.011047930833002768,0.0051667463385230185
0.002230538766229052,0.0008889121702194355
0.0003270125124308196,0.00011105198605141618
1.23083471665585e-05,3.926280620059535e-05
0.00011561638253634189,0.0003142779117207081
0.0007886145436500209,0.0018267206863201975
0.0039060334050481055,0.007710032359572725
0.014048594913996654,0.02363012508476152
0.036690665793434996,0.05258981052153328
0.06958314612621767,0.0849890466000244
0.09582488246026036,0.09973557010035818
0.09582488246026034,0.08498904660002438
0.06958314612621765,0.052589810521533234
0.03669066579343496,0.02363012508476149
0.014048594913996638,0.007710032359572712
0.003906033405048095,0.001826720686320191
0.0007886145436500168,0.0003142779117207059
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

@ -4,8 +4,6 @@ def alpha():
return t
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)

@ -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,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()

Двоичные данные
TEMA9/data1.bin

Двоичный файл не отображается.

@ -0,0 +1,2 @@
´«÷?m
L¿öÄ?ÀSw_@@]Æ?hc`@~Š¿³Ê?ŠêZ¿¸ÀFõ.?ÜÊ¿“y?zÝSÀgæ±½˜(Ÿ>µ¥<C2B5>@f=,À¾­>ku²¿

@ -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
```
![alt text]({02373A72-7282-4831-A19F-62F0491DA505}.png)
```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
Все расчеты завершены!
```
![alt text]({60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png)

@ -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
![alt text]({DFE74D24-705A-48FA-89A3-A1BC3278CEEB}.png)
### Импортирую первый класс из модуля
```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 с классом
![alt text]({320D0C4C-177D-4114-B480-E6A8F4141636}.png)
### Тестирование класса произведу с помощью следующей программы:
![alt text]({BD93CF54-770D-474A-A8B8-265F568781FF}.png)
### Запущу программу на выполнение и изучу вид выходного сигнала при разных значениях параметров САР
```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
```
### Построился график переходного процесса системы
![alt text]({82D74A71-F422-40D3-B0B4-C48328364C87}.png)

@ -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'

@ -0,0 +1,69 @@
# Модуль для создания тестовых данных
import pickle
import random
import numpy as np
def создать_тестовые_файлы():
"""
Создает два бинарных файла с тестовыми выборками для проверки программы
"""
# Первый файл - нормальное распределение
print("Создание первого тестового файла...")
данные1 = [random.gauss(50, 15) for _ in range(30)] # 30 элементов, μ=50, σ=15
with open('выборка1_M3_27.bin', 'wb') as f:
pickle.dump(данные1, f)
print(f"Файл 'выборка1_M3_27.bin' создан. Элементов: {len(данные1)}")
print(f"Диапазон значений: {min(данные1):.2f} - {max(данные1):.2f}")
# Второй файл - равномерное распределение
print("\nСоздание второго тестового файла...")
данные2 = [random.uniform(-10, 10) for _ in range(25)] # 25 элементов, от -10 до 10
with open('выборка2_M3_27.bin', 'wb') as f:
pickle.dump(данные2, f)
print(f"Файл 'выборка2_M3_27.bin' создан. Элементов: {len(данные2)}")
print(f"Диапазон значений: {min(данные2):.2f} - {max(данные2):.2f}")
# Третий файл - с явными min/max для демонстрации
print("\nСоздание демонстрационного файла...")
данные3 = [2, 8, 3, 1, 9, 4, 7, 5, 6] # Явные min=1, max=9
with open('демо_выборка_M3_27.bin', 'wb') as f:
pickle.dump(данные3, f)
print(f"Файл 'демо_выборка_M3_27.bin' создан. Элементов: {len(данные3)}")
print(f"Значения: {данные3}")
print(f"Min: {min(данные3)} (индекс {данные3.index(min(данные3))})")
print(f"Max: {max(данные3)} (индекс {данные3.index(max(данные3))})")
print("\n")
print("Тестовые данные созданы:")
print("1. выборка1_M3_27.bin - 30 элементов (нормальное распределение)")
print("2. выборка2_M3_27.bin - 25 элементов (равномерное распределение)")
print("3. демо_выборка_M3_27.bin - 9 элементов (демонстрационный)")
def показать_содержимое_файлов():
"""
Показывает содержимое созданных тестовых файлов
"""
файлы = ['выборка1_M3_27.bin', 'выборка2_M3_27.bin', 'демо_выборка_M3_27.bin']
for имя_файла in файлы:
try:
with open(имя_файла, 'rb') as f:
данные = pickle.load(f)
print(f"\n{имя_файла}:")
print(f" Элементов: {len(данные)}")
print(f" Min: {min(данные):.3f}, Max: {max(данные):.3f}")
print(f" Первые 5 элементов: {[f'{x:.3f}' for x in данные[:5]]}")
except FileNotFoundError:
print(f"\nФайл {имя_файла} не найден. Сначала создайте тестовые данные.")
if __name__ == "__main__":
print("Создание тестовых данных")
создать_тестовые_файлы()
print("\nСодержимое созданных файлов:")
показать_содержимое_файлов()

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 127 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 126 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 123 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 65 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 103 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 118 KiB

@ -0,0 +1,93 @@
# Пример запуска
import M0
import M1
import M2
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()# Модуль для создания тестовых данных
import pickle
import random
import numpy as np
def создать_тестовые_файлы():
"""
Создает два бинарных файла с тестовыми выборками для проверки программы
"""
# Первый файл - нормальное распределение
print("Создание первого тестового файла...")
данные1 = [random.gauss(50, 15) for _ in range(30)] # 30 элементов, μ=50, σ=15
with open('выборка1_M3_27.bin', 'wb') as f:
pickle.dump(данные1, f)
print(f"Файл 'выборка1_M3_27.bin' создан. Элементов: {len(данные1)}")
print(f"Диапазон значений: {min(данные1):.2f} - {max(данные1):.2f}")
# Второй файл - равномерное распределение
print("\nСоздание второго тестового файла...")
данные2 = [random.uniform(-10, 10) for _ in range(25)] # 25 элементов, от -10 до 10
with open('выборка2_M3_27.bin', 'wb') as f:
pickle.dump(данные2, f)
print(f"Файл 'выборка2_M3_27.bin' создан. Элементов: {len(данные2)}")
print(f"Диапазон значений: {min(данные2):.2f} - {max(данные2):.2f}")
# Третий файл - с явными min/max для демонстрации
print("\nСоздание демонстрационного файла...")
данные3 = [2, 8, 3, 1, 9, 4, 7, 5, 6] # Явные min=1, max=9
with open('демо_выборка_M3_27.bin', 'wb') as f:
pickle.dump(данные3, f)
print(f"Файл 'демо_выборка_M3_27.bin' создан. Элементов: {len(данные3)}")
print(f"Значения: {данные3}")
print(f"Min: {min(данные3)} (индекс {данные3.index(min(данные3))})")
print(f"Max: {max(данные3)} (индекс {данные3.index(max(данные3))})")
print("\n" + "=" * 50)
print("ТЕСТОВЫЕ ФАЙЛЫ СОЗДАНЫ:")
print("1. выборка1_M3_27.bin - 30 элементов (нормальное распределение)")
print("2. выборка2_M3_27.bin - 25 элементов (равномерное распределение)")
print("3. демо_выборка_M3_27.bin - 9 элементов (демонстрационный)")
print("=" * 50)
def показать_содержимое_файлов():
"""
Показывает содержимое созданных тестовых файлов
"""
файлы = ['выборка1_M3_27.bin', 'выборка2_M3_27.bin', 'демо_выборка_M3_27.bin']
for имя_файла in файлы:
try:
with open(имя_файла, 'rb') as f:
данные = pickle.load(f)
print(f"\n{имя_файла}:")
print(f" Элементов: {len(данные)}")
print(f" Min: {min(данные):.3f}, Max: {max(данные):.3f}")
print(f" Первые 5 элементов: {[f'{x:.3f}' for x in данные[:5]]}")
except FileNotFoundError:
print(f"\nФайл {имя_файла} не найден. Сначала создайте тестовые данные.")
if __name__ == "__main__":
print("СОЗДАНИЕ ТЕСТОВЫХ ДАННЫХ ДЛЯ M3_27")
print("=" * 40)
создать_тестовые_файлы()
print("\nСОДЕРЖИМОЕ СОЗДАННЫХ ФАЙЛОВ:")
показать_содержимое_файлов()
print("\nИнструкция по запуску:")
print("1. Запустите M0.py для выполнения основной программы")
print("2. При запросе введите имя одного из созданных файлов")
print("3. Рекомендуется начать с 'демо_выборка_M3_27.bin' для демонстрации")

Двоичные данные
TEMA9/выборка1_M3_27.bin

Двоичный файл не отображается.

Двоичные данные
TEMA9/выборка2_M3_27.bin

Двоичный файл не отображается.

Двоичные данные
TEMA9/демо_выборка_M3_27.bin

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить