diff --git a/55665.py b/55665.py new file mode 100644 index 0000000..32bf01f --- /dev/null +++ b/55665.py @@ -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() diff --git a/IKZ.py b/IKZ.py new file mode 100644 index 0000000..93d7261 --- /dev/null +++ b/IKZ.py @@ -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}") + + diff --git a/Pasted image 20251012124853.png b/Pasted image 20251012124853.png new file mode 100644 index 0000000..b6287b2 Binary files /dev/null and b/Pasted image 20251012124853.png differ diff --git a/Pasted image 20251124110347.png b/Pasted image 20251124110347.png new file mode 100644 index 0000000..87233e0 Binary files /dev/null and b/Pasted image 20251124110347.png differ diff --git a/TEMA0/README.md b/TEMA0/README.md index e9de7f2..c497994 100644 --- a/TEMA0/README.md +++ b/TEMA0/README.md @@ -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) — индивидуальное контрольное задание. diff --git a/TEMA3/M1_6.py b/TEMA3/M1_6.py new file mode 100644 index 0000000..7d63832 --- /dev/null +++ b/TEMA3/M1_6.py @@ -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)) diff --git a/TEMA3/protokol.py b/TEMA3/protokol.py new file mode 100644 index 0000000..581a4a3 --- /dev/null +++ b/TEMA3/protokol.py @@ -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 "", line 1, in + 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 "", line 1, in + лщке +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 "", line 1, in + 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) + +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 "", line 1, in + 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 "", line 1, in + 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 "", line 1, in + dec(110) +NameError: name 'dec' is not defined +int(110,2) +Traceback (most recent call last): + File "", line 1, in + int(110,2) +TypeError: int() can't convert non-string with explicit base +int(0b0110,2) +Traceback (most recent call last): + File "", line 1, in + 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 +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 "", line 1, in + l +NameError: name 'l' is not defined +L +['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения'] +L.remove("данного") +L +['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения'] diff --git a/TEMA3/report.py b/TEMA3/report.py new file mode 100644 index 0000000..2d636b5 --- /dev/null +++ b/TEMA3/report.py @@ -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 #Целое число возводится в целую степень diff --git a/TEMA3/task.py b/TEMA3/task.py new file mode 100644 index 0000000..774c1ae --- /dev/null +++ b/TEMA3/task.py @@ -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 "", line 1, in + l +NameError: name 'l' is not defined +L +['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения'] +L.remove("данного") +L +['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения'] diff --git a/TEMA3/test.md b/TEMA3/test.md index 5aca398..9c60ec5 100644 --- a/TEMA3/test.md +++ b/TEMA3/test.md @@ -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)) ``` diff --git a/TEMA4/protocol.py b/TEMA4/protocol.py new file mode 100644 index 0000000..31da80c --- /dev/null +++ b/TEMA4/protocol.py @@ -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) + + +round(123.456) +123 +c = round(123.456) +type(c) + + + + +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 + +tuple(ff) +((76, 'Khatiukhin'), (85, 'Shabatov'), (94, 'Efremov'), (103, 'Turovec')) +ff[1] +Traceback (most recent call last): + File "", line 1, in + 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 +> +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 "", line 1, in + 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 "", line 1, in + 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 "", line 1, in + 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 "", line 1, in + 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 "", line 1, in + 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) #Создание графика в оперативной памяти +[] +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) #Создание графика в оперативной памяти +[] +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) +[] +pylab.plot(X2) +[] +pylab.show() + + +region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы +naselen=[65,12,23,17] # Значения для диаграммы +pylab.pie(naselen,labels=region) #Создание диаграммы в памяти +([, , , ], [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) +[] +pylab.plot(X2) +[] +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. ]), ) +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. ]), ) +pylab.title('Гистограмма') +Text(0.5, 1.0, 'Гистограмма') +pylab.show() + + +a = ['One', 'Two', 'Three'] +b = [20, 50, 25] +pylab.bar(a, b) + +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 "", line 1, in + 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 diff --git a/TEMA4/ИКЗ.py b/TEMA4/ИКЗ.py new file mode 100644 index 0000000..8a74d1a --- /dev/null +++ b/TEMA4/ИКЗ.py @@ -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}') diff --git a/TEMA5/dfbdf.py b/TEMA5/dfbdf.py new file mode 100644 index 0000000..ebf3945 --- /dev/null +++ b/TEMA5/dfbdf.py @@ -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") diff --git a/TEMA5/report.md b/TEMA5/report.md index 2e575e0..110831b 100644 --- a/TEMA5/report.md +++ b/TEMA5/report.md @@ -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 ``` diff --git a/TEMA6/123.txt b/TEMA6/123.txt new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/Stroka.txt b/TEMA6/Stroka.txt new file mode 100644 index 0000000..48d3f7e --- /dev/null +++ b/TEMA6/Stroka.txt @@ -0,0 +1 @@ + diff --git a/TEMA6/binomnutona b/TEMA6/binomnutona new file mode 100644 index 0000000..d327420 Binary files /dev/null and b/TEMA6/binomnutona differ diff --git a/TEMA6/task.md b/TEMA6/task.md index eae500c..92a331c 100644 --- a/TEMA6/task.md +++ b/TEMA6/task.md @@ -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") #Открываем файл для ввода (чтения) diff --git a/TEMA6/test.txt b/TEMA6/test.txt new file mode 100644 index 0000000..9630733 --- /dev/null +++ b/TEMA6/test.txt @@ -0,0 +1 @@ +4, 2, 5, 3, 2, 3, 2, 4, 5 \ No newline at end of file diff --git a/TEMA7/IKZ.py b/TEMA7/IKZ.py new file mode 100644 index 0000000..7ef4f23 --- /dev/null +++ b/TEMA7/IKZ.py @@ -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() diff --git a/TEMA7/IKZ.txt b/TEMA7/IKZ.txt index 159c14a..c68aeea 100644 --- a/TEMA7/IKZ.txt +++ b/TEMA7/IKZ.txt @@ -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 diff --git a/TEMA7/test.py b/TEMA7/test.py new file mode 100644 index 0000000..9725eb3 --- /dev/null +++ b/TEMA7/test.py @@ -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) diff --git a/TEMA8/MM0 .py b/TEMA8/MM0 .py new file mode 100644 index 0000000..866432b --- /dev/null +++ b/TEMA8/MM0 .py @@ -0,0 +1,2 @@ +import MM2 +print('y=',MM2.vyhod) diff --git a/TEMA8/MM1 .py b/TEMA8/MM1 .py new file mode 100644 index 0000000..68961f5 --- /dev/null +++ b/TEMA8/MM1 .py @@ -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): + ytt=0 + elif xtt>=gran: + ytt=xtt-gran + elif xtt<=(-gran): + ytt=xtt+gran + return ytt + diff --git a/TEMA8/MM2 .py b/TEMA8/MM2 .py new file mode 100644 index 0000000..cbba0a3 --- /dev/null +++ b/TEMA8/MM2 .py @@ -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) diff --git a/TEMA8/Mo.py b/TEMA8/Mo.py new file mode 100644 index 0000000..bea8fda --- /dev/null +++ b/TEMA8/Mo.py @@ -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 diff --git a/TEMA8/Mod2.py b/TEMA8/Mod2.py index 88c5b37..10dd777 100644 --- a/TEMA8/Mod2.py +++ b/TEMA8/Mod2.py @@ -4,8 +4,6 @@ def alpha(): return t def beta(q): - print('****BETA****') import math expi=q*math.pi return math.exp(expi) - diff --git a/TEMA8/Module1.py b/TEMA8/Module1.py new file mode 100644 index 0000000..ea0a434 --- /dev/null +++ b/TEMA8/Module1.py @@ -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 diff --git a/TEMA8/Module2.py b/TEMA8/Module2.py new file mode 100644 index 0000000..9deabd3 --- /dev/null +++ b/TEMA8/Module2.py @@ -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 diff --git a/TEMA8/Module3.py b/TEMA8/Module3.py new file mode 100644 index 0000000..81a719a --- /dev/null +++ b/TEMA8/Module3.py @@ -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}") diff --git a/TEMA8/report.md b/TEMA8/report.md new file mode 100644 index 0000000..c7132a7 --- /dev/null +++ b/TEMA8/report.md @@ -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) + +>>>dir(Mod1) +['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1'] +>>>Mod1.perm1 +'5' +>>>import Mod1 +>>>imp.reload(Mod1) +Mod1:Введите значение = 3 +Mod1:Значение perm1= 3 + +>>>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') + +>>>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') + +``` + +## 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 "", line 1, in + 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 + 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 "", line 1, in + perm1 = perm1*2 +NameError: name 'perm1' is not defined +>>>tt = tt*2 +>>>tt +'77' +>>>qq = qq*2 +>>>qq +7106642561.694082 +``` + +## 4 Завершение работы в IDLE + +Был завершен сеанс в среде IDLE. \ No newline at end of file diff --git a/TEMA8/task.md b/TEMA8/task.md new file mode 100644 index 0000000..aa28adb --- /dev/null +++ b/TEMA8/task.md @@ -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 +``` \ No newline at end of file diff --git a/TEMA8/text1.txt b/TEMA8/text1.txt new file mode 100644 index 0000000..23415c5 --- /dev/null +++ b/TEMA8/text1.txt @@ -0,0 +1 @@ +1 2 3 4 7 \ No newline at end of file diff --git a/TEMA8/text2.txt b/TEMA8/text2.txt new file mode 100644 index 0000000..92e475a --- /dev/null +++ b/TEMA8/text2.txt @@ -0,0 +1 @@ +6 7 8 9 10 \ No newline at end of file diff --git a/TEMA9/M0.py b/TEMA9/M0.py new file mode 100644 index 0000000..10af110 --- /dev/null +++ b/TEMA9/M0.py @@ -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() \ No newline at end of file diff --git a/TEMA9/M1.py b/TEMA9/M1.py new file mode 100644 index 0000000..2bc3bd2 --- /dev/null +++ b/TEMA9/M1.py @@ -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 \ No newline at end of file diff --git a/TEMA9/M2.py b/TEMA9/M2.py new file mode 100644 index 0000000..b35bad1 --- /dev/null +++ b/TEMA9/M2.py @@ -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() \ No newline at end of file diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..5e6636d --- /dev/null +++ b/TEMA9/Mod3.py @@ -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) diff --git a/TEMA9/SAU.py b/TEMA9/SAU.py new file mode 100644 index 0000000..78d35db --- /dev/null +++ b/TEMA9/SAU.py @@ -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]) \ No newline at end of file diff --git a/TEMA9/create_test_files.py b/TEMA9/create_test_files.py new file mode 100644 index 0000000..7e76049 --- /dev/null +++ b/TEMA9/create_test_files.py @@ -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() \ No newline at end of file diff --git a/TEMA9/data1.bin b/TEMA9/data1.bin new file mode 100644 index 0000000..e982ba5 Binary files /dev/null and b/TEMA9/data1.bin differ diff --git a/TEMA9/data2.bin b/TEMA9/data2.bin new file mode 100644 index 0000000..d37fe8c --- /dev/null +++ b/TEMA9/data2.bin @@ -0,0 +1,2 @@ +?m +L?Sw_@@]?hc`@~?ZF.?ʿy?zSg汽(>@f=,>ku \ No newline at end of file diff --git a/TEMA9/employee_module.py b/TEMA9/employee_module.py new file mode 100644 index 0000000..4accccd --- /dev/null +++ b/TEMA9/employee_module.py @@ -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Демонстрация завершена") \ No newline at end of file diff --git a/TEMA9/iz.md b/TEMA9/iz.md new file mode 100644 index 0000000..de19eec --- /dev/null +++ b/TEMA9/iz.md @@ -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) \ No newline at end of file diff --git a/TEMA9/iz.py b/TEMA9/iz.py new file mode 100644 index 0000000..be2d8e0 --- /dev/null +++ b/TEMA9/iz.py @@ -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() \ No newline at end of file diff --git a/TEMA9/main_SAU.py b/TEMA9/main_SAU.py new file mode 100644 index 0000000..51afef1 --- /dev/null +++ b/TEMA9/main_SAU.py @@ -0,0 +1,14 @@ +###main_SAU +prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь +from SAU import * +xx=[0]+[1]*20 #Входной сигнал – «ступенька» +SAUe=SAU(prm) # Создаём экземпляр класса +yt=[] +for xt in xx: # Прохождение входного сигнала + SAUe.zdn_zn(xt) + SAUe.model() + SAUe.otobraz() + yt.append(SAUe.ypr[1]) +import pylab +pylab.plot(yt) +pylab.show() diff --git a/TEMA9/obshee.md b/TEMA9/obshee.md new file mode 100644 index 0000000..2cb67d8 --- /dev/null +++ b/TEMA9/obshee.md @@ -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. Работа со свойствами: +Поощрения Петров Алексей Сергеевич: Премия за квартал +Поощрения Сидорова Мария Петровна: + +6. Добавление нескольких поощрений: + + +ФИО: Петров Алексей Сергеевич +Отдел: Отдел разработки +Должность: Старший программист +Оклад: 60000 руб. +Поощрения: нет + +7. Очистка поощрений: + + +ФИО: Сидорова Мария Петровна +Отдел: Финансовый отдел +Должность: Главный бухгалтер +Оклад: 80000 руб. +Поощрения: ['Благодарность за годовой отчет'] + +Демонстрация завершена +``` \ No newline at end of file diff --git a/TEMA9/obshee.py b/TEMA9/obshee.py new file mode 100644 index 0000000..e69de29 diff --git a/TEMA9/repor.py b/TEMA9/repor.py new file mode 100644 index 0000000..13228c7 --- /dev/null +++ b/TEMA9/repor.py @@ -0,0 +1,3 @@ +from Mod3 import Class1 #Частичный импорт содержимого модуля +z4=Class1() +z4.otobrazh() diff --git a/TEMA9/report.md b/TEMA9/report.md new file mode 100644 index 0000000..1832574 --- /dev/null +++ b/TEMA9/report.md @@ -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 "", line 1, in + 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__ +(,) +``` +### Выведу родительский класс для созданного класса Class2 +```py +Class2.__bases__ +(,) +``` +### Выведу родительский класс для созданного класса Class1 +```py +Class1.__bases__ +(,) +``` +### Для получения всей цепочки наследования использую атрибут __mro__ +```py +Class3.__mro__ +(, , , ) +``` +### Получу всю цепочку наследования для встроенного класса ошибок «деление на ноль» +```py +ZeroDivisionError.__mro__ +(, , , , ) +``` + +# 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 "", line 1, in + exempl.svojstvo + File "", 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) diff --git a/TEMA9/report.py b/TEMA9/report.py new file mode 100644 index 0000000..29b00fe --- /dev/null +++ b/TEMA9/report.py @@ -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 "", line 1, in + from Mod3 import Class1 #Частичный импорт содержимого модуля +ModuleNotFoundError: No module named 'Mod3' +>>> from Mod3 import Class1 #Частичный импорт содержимого модуля +Traceback (most recent call last): + File "", line 1, in + from Mod3 import Class1 #Частичный импорт содержимого модуля +ModuleNotFoundError: No module named 'Mod3' diff --git a/TEMA9/test_data.py b/TEMA9/test_data.py new file mode 100644 index 0000000..efbb29c --- /dev/null +++ b/TEMA9/test_data.py @@ -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Содержимое созданных файлов:") + показать_содержимое_файлов() diff --git a/TEMA9/{02373A72-7282-4831-A19F-62F0491DA505}.png b/TEMA9/{02373A72-7282-4831-A19F-62F0491DA505}.png new file mode 100644 index 0000000..8b1874f Binary files /dev/null and b/TEMA9/{02373A72-7282-4831-A19F-62F0491DA505}.png differ diff --git a/TEMA9/{320D0C4C-177D-4114-B480-E6A8F4141636}.png b/TEMA9/{320D0C4C-177D-4114-B480-E6A8F4141636}.png new file mode 100644 index 0000000..c8bd289 Binary files /dev/null and b/TEMA9/{320D0C4C-177D-4114-B480-E6A8F4141636}.png differ diff --git a/TEMA9/{60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png b/TEMA9/{60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png new file mode 100644 index 0000000..4f7dcf5 Binary files /dev/null and b/TEMA9/{60C48610-2CF2-4BF5-86A4-A530659AEC4D}.png differ diff --git a/TEMA9/{82D74A71-F422-40D3-B0B4-C48328364C87}.png b/TEMA9/{82D74A71-F422-40D3-B0B4-C48328364C87}.png new file mode 100644 index 0000000..89c4b2d Binary files /dev/null and b/TEMA9/{82D74A71-F422-40D3-B0B4-C48328364C87}.png differ diff --git a/TEMA9/{BD93CF54-770D-474A-A8B8-265F568781FF}.png b/TEMA9/{BD93CF54-770D-474A-A8B8-265F568781FF}.png new file mode 100644 index 0000000..c372e7c Binary files /dev/null and b/TEMA9/{BD93CF54-770D-474A-A8B8-265F568781FF}.png differ diff --git a/TEMA9/{DFE74D24-705A-48FA-89A3-A1BC3278CEEB}.png b/TEMA9/{DFE74D24-705A-48FA-89A3-A1BC3278CEEB}.png new file mode 100644 index 0000000..dc5f795 Binary files /dev/null and b/TEMA9/{DFE74D24-705A-48FA-89A3-A1BC3278CEEB}.png differ diff --git a/TEMA9/Пример запуска.py b/TEMA9/Пример запуска.py new file mode 100644 index 0000000..b41e74c --- /dev/null +++ b/TEMA9/Пример запуска.py @@ -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' для демонстрации") \ No newline at end of file diff --git a/TEMA9/выборка1_M3_27.bin b/TEMA9/выборка1_M3_27.bin new file mode 100644 index 0000000..a92523f Binary files /dev/null and b/TEMA9/выборка1_M3_27.bin differ diff --git a/TEMA9/выборка2_M3_27.bin b/TEMA9/выборка2_M3_27.bin new file mode 100644 index 0000000..5dd2d45 Binary files /dev/null and b/TEMA9/выборка2_M3_27.bin differ diff --git a/TEMA9/демо_выборка_M3_27.bin b/TEMA9/демо_выборка_M3_27.bin new file mode 100644 index 0000000..f1149df Binary files /dev/null and b/TEMA9/демо_выборка_M3_27.bin differ diff --git a/sdsvsd b/sdsvsd new file mode 100644 index 0000000..e69de29