From f023f69d37b2fb7f30e822e514ed319f22c9f9d6 Mon Sep 17 00:00:00 2001 From: TerekhovFV Date: Tue, 16 Dec 2025 15:21:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEMA9/Mod3.py | 10 + TEMA9/SAU.py | 23 ++ TEMA9/Sotrudnik.py | 29 +++ TEMA9/images/SAU1.png | Bin 0 -> 14380 bytes TEMA9/images/SAU2.png | Bin 0 -> 15302 bytes TEMA9/images/SAU3.png | Bin 0 -> 10956 bytes TEMA9/mainSAU.py | 15 ++ TEMA9/report.md | 476 ++++++++++++++++++++++++++++++++++++++++ TEMA9/task.md | 97 ++++++++ TEMA9/task1.py | 24 ++ TEMA9/task2.py | 11 + TEMA9/task3.py | 20 ++ TEMA9/task4.py | 13 ++ TEMA9/task5.py | 17 ++ TEMA9/test_sotrudnik.py | 31 +++ 15 files changed, 766 insertions(+) create mode 100644 TEMA9/Mod3.py create mode 100644 TEMA9/SAU.py create mode 100644 TEMA9/Sotrudnik.py create mode 100644 TEMA9/images/SAU1.png create mode 100644 TEMA9/images/SAU2.png create mode 100644 TEMA9/images/SAU3.png create mode 100644 TEMA9/mainSAU.py create mode 100644 TEMA9/report.md create mode 100644 TEMA9/task.md create mode 100644 TEMA9/task1.py create mode 100644 TEMA9/task2.py create mode 100644 TEMA9/task3.py create mode 100644 TEMA9/task4.py create mode 100644 TEMA9/task5.py create mode 100644 TEMA9/test_sotrudnik.py diff --git a/TEMA9/Mod3.py b/TEMA9/Mod3.py new file mode 100644 index 0000000..bb1968b --- /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..c26cdbf --- /dev/null +++ b/TEMA9/SAU.py @@ -0,0 +1,23 @@ +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]) + + diff --git a/TEMA9/Sotrudnik.py b/TEMA9/Sotrudnik.py new file mode 100644 index 0000000..fe8041e --- /dev/null +++ b/TEMA9/Sotrudnik.py @@ -0,0 +1,29 @@ +class Sotrudnik: + def __init__(self, fio, otdel="не указан", dolzhnost="не указана", oklad=30000): + self.fio = fio + self.otdel = otdel + self.dolzhnost = dolzhnost + self.oklad = oklad + self._pooshreniya = [] + + def povysit_oklad(self, summa): + """Повысить оклад на заданную сумму""" + self.oklad += summa + + def perevesti_v_otdel(self, novy_otdel): + """Перевести в другой отдел""" + self.otdel = novy_otdel + + def izmenit_dolzhnost(self, novaya_dolzhnost): + """Изменить должность""" + self.dolzhnost = novaya_dolzhnost + + @property + def pooshreniya(self): + """Свойство для списка поощрений""" + return self._pooshreniya + + @pooshreniya.setter + def pooshreniya(self, znachenie): + """Добавить поощрение""" + self._pooshreniya.append(znachenie) \ No newline at end of file diff --git a/TEMA9/images/SAU1.png b/TEMA9/images/SAU1.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa023bd7e9687a9aa5c0653fd0f77a4d2b8c181 GIT binary patch literal 14380 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 Qtbx>3v~Pb_vVQVk06%q0lmGw# literal 0 HcmV?d00001 diff --git a/TEMA9/images/SAU2.png b/TEMA9/images/SAU2.png new file mode 100644 index 0000000000000000000000000000000000000000..d286a229bb950536c72b107df80baf6103ccf441 GIT binary patch literal 15302 zcmeHuWmHt{`|ch>LJ8$Xr9qKbKtchLMnJk7B&AClBxg)SLAo1h5Rh(AL|Ph@M(I>w z7>Qxdv&Z-MuM_K>wa%Bb*7?AKJ+t?-pSrK-x~}^sR8w7nf}EZlf*=YdMLBHSr22gHgpq}Gqi&)$8OdHsAs_O(~BuQM^^{?#{VOIDi=I%qQpjDwVCs9ki*xd^uO z;){Oj^1QmPE%*}k*QHG9$Lx{Mgt)COm&MC)Qb}yGwlcR9MOFf5%O-Am+I~q*{nf`m zcXHZGcI#X_HR#e;`SMmO@Ef{x5dp5-Y)Mhz;ZgVf5aj#Vf{~!6^o-r~s29cOFvKA{FLaEf~v&DY>de>YCAq3HX;6KO7!xI-9 z`xhByjU7)I^p$|?BsVYb=$IdZqy-k2mz5KEO+URMMe$^EAxnidRaL`UsYoD5P)129 zly|HO$*56|Yv+7jiRrbvdenoo^@@p{XGOBmLr~s5Vrs-jRXbKonj{t+ zd82tnxxPT>zKEIGwFs=)9X+Ygx(6J69=h zPoz><=zhJ6pwj-Dr0AI~0DN?UHn-!`((oxqF`7-sd2cD%7Ut?BlO{2Fz za#6H4d?_C37ggf7`nN~W+?$5vMD(Fqck1!;lEe4qaS>o?J+D9?tJGR4*2c5KZ=`xX zZ#vlf5PgAxljOB}_vp2hrR{rjirc?p-g!)eT}g|e4z9JBF*`i92>m4gT&Q?$;!<_S zd2Gz$NJvO`)rP;4p<-mojGv(aA+pw|RyRG*=rUxXK_vYHzx!Ilbnpj=KNeEdPp6R`ic5d@B;Mr=7K_iwyVg??@IqN;iu9Y2CReR>P>0ZS z1Qf3TeIgcaRUg^GHA{mjr5n7aKij&)wKh}u?yp$gRpt3PUx7PBkcBCcw25X>!$D(% zTI&|C^GF$A;jf|H?Pdcd`G`lH#o|0Mb4T*=u3yj?O9bR*Mh#i^=9#-bc-wB>JtMpC zp5{Zp`_;Urx7X>E^M&Q_<3R|r*8@%RBY!vLtqJpr@+Sv3hmul6C3I3mAD3?APK+(B zF=Kmu3Pt+`Z$i)p|2@d0HMlv9S;AObTieUtu-?Pw>6AvYppvWa!Eh@QiMg#If!1yA z92p+wZ7Y7C&q76PJ5nb6;lthCuWAmWIYkZ+PAjfyXwc|!&=Ms7km5UoBd<^#mRcEO?R{&s#BHZ znVWC-t#Y`kH_2$wR9X&b(RJe6C8edgEaH)4M$diwwmu(k(St|dKanMg`&D%MWMySV z$HtBpb&~I>wMs2d2x27}GSymJOftrm;&C1Ys%HD)0m+HaV@e}m>pVCK0*AL@Bf(c~ z*OtRPYg=38+J`gZ+jGqUwGZ{Tzg6Z>`>mu!$Ha`x2Xk?A=jP;mvU=>D92``iQ@J8| z^M_gQGW|yg(y0uD#JyG{Pqti#jtPZH=fHPuydbX+HXL_BVP#56P~uGTv1^6QP1l{q}Pi2LZ7oLH|)LkRJ+>Fgt%dC?tBZVNJphXY97g@px*hs81v zG9-hn2ht@ZYeQeY96bAFD@3+q_jur-E+ts3rt&jRSV*m}>DSX7mE-H(M}cKc4L-Gu z;_k}J)1uNJWqELzzo51&H?ZO8j!WjN(!Q7(-we;Gii%s`8hy*y|Nh%N(yH>7klpN6 z?wb4AYZDB5-GN?m$tTP4hzl1O*>@iH$8^8GeN*im)F!BU9@4urRpXLk_ScxX#*7ce zq^4RW4TtJa(ciLYbmL;Q%DTis*VTwsR2>o*e7Ig*witi^VN_%!b^VVwV!UnK6~QBA z4U6{!UJGK6b~ETqm%>96HXI(bOna(6Ov&I0d6fv}mijk%kFe|PjRZ6QLbKSlk^GIR zO56V74M)n>N`;?AlKwj_$E5@7=4NK;lmS7<2XXE{J}ZS#GFkul96tQss`Kp6S0yw1 z#RQqV`-v(yM)o&)(LwOim3bOi7EbSm@S(fx0N*r}uFcVk4&RhC;c&Ssvqa@<#v!%V&O!rGzf}HxdRu{* zdfDkH$hM@OBk*B3h_hQ;eS$X~zpvWNE%M7;hNvS+QTDXB8#la#v8R(~z;^m1Kc-3} z;G_BKPU;Ks({0~dM;M0v>Sx?VOsA6K5HtQ2xsA^W$=RZ3JFiW zg<`yt0VeWpp*tA(hz_B%u=~4l9Ex6CqRKm(;rc)AhLD{AEy?Ob6@d}YyAOL0O{y`x)PB4&-jRjM^gjx4^LtqOro0?TQ>YNI_Kacy=oGQtjh5@ zmHcaj>?~P4k|8lWVQ2T1&5*&dH?Ga4{@!leu*i^FbcEXN1x>(vw(h zVoTt0>Fv!p10{!!HGM3WOHtt&(MHDhwVczfm!cb7P@$_6`uUdNIVRG5jcVDqr$O>t zN8hG4`UfV>c(`&zM;k^4->!~ngt#x~`%hyNodSXy^FA8wog`h|1^yIp>Xcqf%4}qbIs5N&*CFj>FC@OuS5!&r||a+|~xiy~Sj{ zPrXo)NpTB(O_|VDF1oXV+Pp&RM z3SXCx-WkJ*UFFGKj9-+5CzKKyWcnV%UqPcY$b29RX0UO4pvd6vb5K3CuFY0LyT4F-rmYdGDTL5L5J7FK;G2uyOkZjKE=IF|XcntRV-|p*=U|1h?-5G- zdpo}^<2egKeLxi1TEg;v`5q+Kdj{o3VF9F4$bbB_k{3~nQLJy7iQxF>JB}&OI#ot> z+3(ry>^EPiv;heRB!}R)FHf|6(GmD-NpOuM;wO}bApUCvtjS>rRxmgQ1hrZV(e#^1 zPK(RHMnH)qU4cr?Tg~Jnn0YukIU5GP^~7;AOb5?2c>6b2COmmU5V2KJQIQjX*}gzW z$4N&=SK%;{w|Ao4x1;Eg%Lo8$o;B+Ag?b`J2(q<)1sR%|@vg0{iIxj>l$tiOOG(W& zd##UlW4~6|^jaV7uiXkbaQ@cdT|A3>dH(9+&xQ7t1zN+-Hu-6l>%#QW%)H#)v>t=%l2z7QQ=o49o27?2gy$`z`HUAZz^0 z+jK((G8sjy&Bxn~{z__UaT}$L>cVI)g$QQakao7v&`{<9oeet-O-XS@g|@P?viQYD zcPhw|94xzP?_X+dYGbvo=FN2`-eY z8*((QASd_i)2C05Zul@kAFs`WjlicPh)9Twt1tHLX$d;^%6ttdK3J#qp6L%yNo=~K zuO0pJ+gnzOV3x>1;!d@-wAfsme!U1h_-41;{dYzkCMyq>bjLm0B=~TtL9`(KZC;9d zIJta~3E1$E6VMXVO@5UoNGzIpK}`$sa47qp|C`p-RK^Ic7AmQea?0mJLqoUR=A{q! zM>Hf3ZU&z`67g7k*_SM&LUp2f^@Ty1nW?J<>6foYVkE5i6|H5JHJv)!pDmB*{QPdtt$fK%6S$_suos;jMVSXM$NgF(<+;P2+LCE#;A@V!P_0m}-I+*=aV z;K^ACB?Lfs6~T&!1}6~oLlcm?N;Uy0grWuCWWKeDJG$jov|(-z`+V`z;K3uD_s*bv zcDpP#2y`?PzO6u|Z3u468~n|B1`NnT0)+KL^2_kx3;|L}>WQURthn|6(@!QKrT5FO zE@>~hDNnuBTpLcuV*xFA$PpqJV$%Z7T)M3&mqz>pYhu`pABjrmn--ISo!rsIKkBys#EUS-T7zlw}%0gie@YA_ZO z)V`YI-yc4h5Kw~V*r04?{E%J1pi&9>!$GK`uAPUp2EI&k%m?=&{#-6(ty;$|UNWdV z1`7pk-26`p85n(v`lTk{<_~t7G3nE8?G!*4D1dm50s+#~$%5Q`->;(~k&DsuRZ>x* zX`G5O*TJfUM@0KXS>l7tV&Y$r79AHiw%S%eFt5N8#D2fVIclS<)r_RewG}&V)p&|M zRtXMn3HVlS`Sfd=6Txb*Dg=Bdo9C~{!Wc!g`ND-AXb0^Ef6^>(Eha2WNE?CtZ zpAHUcDk&>Fj#*XrkXqn}YnoR8)x-j`a(Gx9NN`LY60<$iU{r56knXXP=Buo(uKx76 zu%sk5I{HFHha(=w(ci8>Ex*6N*4EeO0OH4UF5!PHZ`U(dds9U`*>B$-Z_dffdo>15 zmR?$@5Z>cPK*@s9)QDsEM=AmjJ=R7GV~&HzassDZYP;JW6WV-wdA_05LQ5-Z_Dcet zfUTmt`}=_I{(f5SZ^+FY-E<#iUBj1N;SmS$IR}Yh5YDB!DhWNYoI2JWuV?}Kew(jx zcXuDo*I@ZpX%{iza^=dE{Re0eBJgrMRXP*@O!J+M>W=w)Bjc@nxai73QRt(c*=88b zeLAkqgCHdV0Izqa_$*!7N$$3?d^VixS(elihT*+hRmvqv^m5pyHCU3F`dz zY$bwTJCP^+C%xHl^%3rOr&JI4aOw1TXM$E@Vz-Tus;;)Xw|B&{%yq8C-%ar!>FK{~ z--r)%2_ib!j3W0Z=3RlE%P2vI}OjR=U;MZpD9{evW9=OH%Ae6~i%V@Mn3 z97m+6NW#vZ-0VrtD9aDS?_?Q}EMRW$41mv>s%fM#YOkWGc@ZQKYUw<*kWP?iexbh= zTPlhdN`wSpA~u{0w56NA2R#nbai__Wa}K=)@cLKLq#N=GNmVmgW=U#5DzAl zq^R2~j;Fae76>}H3ss3=AZiX2INol9FFN5KZ-zkjR_Z}ycS;fGAk+*sw~~n7 zR^-b;i?vy{Nj#47QWIo`*C!*7IjUm@sb@hp=qvHu(e0Y{nUh|8E6+eHV)#YkIS;uw zD?E0hl!k%RM+T}Y9De24En((KR`&-K-hr3&2w_z`oO3?i3pqXp@X|&s2UT(6!^<3u zf(lZyf)D;0S@0=-K7v52!Jq*_1b{&?B58&m33u(DVn*1omAEkZ`%feCP*oPwq0m^X zWT*?C^4$JZ+e)!zO<)glG~tlF>^U%VZL?tPRWS(AyRY!Kl`BvfC@V$mzNAC9Y5>zh|*KW@g~fMCXR*BgJUvo*w1qx&mxcsO9B~;&Kk? zz=nt)te#Cb`TXH6K(Io?!@cVFZS;Yi^Z9MQ@AS%OkvdtRf-%=`H7jI# zs({nN42ktNYI^j3^Xq%rJhha(e3)p}WKT~*Uvq=1TB(R3=yw$7na9qvO-2K22Et98 zG=Hm)(ul7B@3uWNI}fF$(@@Zc>ESL@1o^AQaN$`u4aD0p7Adngj3QTH7wxJ1847y# zVuP|$Vg66byXvEY2;VH2p1dQbbF{ynd@r0p|LI*_q_lt_iAJzfOkm5#%f5PV)b!1q zVtfXy_4>_km|B+<)Q~95k)Y?0Jx$Tz205y5AI73_5C!ffP0H$eV(ixy*+qDV@sWP= z65Lkb=_C*R-65wecij^{dh9?q@qu^_sAa}W$&5@u5;3>r8o2$F`X^oYyP!Y>8Q+0x=+g%z5VH9HTZ9!h`|RkKd0 z2={{;;u%;FT+{?72K;suz@EA%(c~gqg6zPIx?q(^h`-4NAW>}Hb&2zW_$I&as`C>7 z{`BYyWNcCzKq-BM1JBYENjK_3bO00~$MX;mZ*2_~D@;V^L8D5O_A#f(4=^Rdw-$Da1pAMHAd_Ml z%7N##;5B4#iSM&8z_xvaYIr_aYUm4S?=t?a6o|oWE)B7q@+z6RJStWo6l|xq>n^Yj10M#=cuy#4YHBvyj238ZyKtx_>+bwYdDx&-GOwxi{PGJ$zyUth zl40;#7rMa3@!t8{tt82yh8u?E(jl!tTyz8BXFXABIt*aMf2tKT8=$SHw`3;evzZ7` ztk

X8C;@d7x`EIzB++%13${j+J_Os8eCh;w(6W8p!9T>pgAOM+U zXdzI9H;u(-=+XYFmiryX=)}ZT_f})R>(}qB?CF_**lER?0m#)ZJM;x|s={Z>*l)Xj zW$`s%OJvklh4s0m{{O(glrwwqNX8$)(iX2d)`}oJ0~DdG__hJ<-Am}-fOO>oP1L}3 zC-C=A|Kp^aRxh?gRS2)bPCwW~LD+;V*{)ySuwyENzR6);B9(IfgLu6pz-zoDtGFBYjV(x#jd| zqvFx82jAXXg)o!YewL%QZu%YV`*!uc0<}oSC<_umB){8;U0kjajTF#1FEPa*pba@HWYqlBP&%gZkong4(V zAUNmm{au{f)RX1v`{pXV{&V1tsQXj6GMz@!&~s;h{Rw+OlMMgp%eH#ZpO0g>2m}}s zzPoqf5eQyH3_b{gl8At8Oa(~q@dtJ7FCzx8ctQ=O1kv;wH2h#AVh3CK_l>D2@-&Z@h4O7nYNOW z8*8)8jdJqx%JT9roF}WgS8Cw&UuGt2#65|f&7n$gCPsq|9{TE4bYGw9H;`XU3=bgU zkC6tm#!cMzU&xb^hDO3a^eIU4Zw?Om-Mzh;-p7O_;>^g?!CCEUhuNoe-8_H>n!eIZ4jz*MEMsb9OFyX#CJVu({)8s z;Vhrh&2+VC2$XkFp#FGY3tAs^MjOc8XZN?J3=BvN-Wgv*p6+FIta}bFuZhzoDc^)yP~4v%fBvO^q(#p*PCnkOnUZgj0#_~E}*Y( zCrk&NdL-@o64`)5xP47n*x-a`r_Ko?#dC+}1Q!3n5Npv8S}XF_TXQ-$_UvTFcW#Z- zJeFC)e>Ky*aU$Hp$)+(!mW5 z>fU{kOik6Fog6l1K|RJY$kP8IpGjRQrQTRwjG{aJmyXh#Tyj!SpMgY@5P&4}GhgCs zw4x`^pA#uP5Zlw`0T_fl52^Ky;mSNsVu?sd4q@GcQUXCt4Xynv!X5znb_Rv#G=jv4 z!B1aQ|KO4!Gq^C(Y14#(NbN2p`2HzOIiv-sA+@5(h1in^6Rgzu+5JU|;)pZXWmA`B zzanTTS`+>g?-|grLB^RtUY3H&1ZgYK5v~EIe_s0nve&Nf{L=-XD7Enod&0L&c+&x; z3{c<-LFO7a3KnpvJT@p<^Io+qxe6D0YxK{GI)Hb26%^zh3X6)%O)7-^8Co~!+x0Sa zoD?k1Ahmmt;315M_`f`fBVituNe7;c4M@c!y(B?qC^rhO!y9BIlBW621>T%_4cy>a z)WfFGTeR;|N&vQfGCDq(Ze8Me$BT${8gnZ;LO@^*N5xV;3M zIc=?H`0*i0LGWLBo6UzO#21*Dc+Otp-EY9+PIquUL717p;Zwes1;|?YtslQSSrULIkDxA0Mgsn+ zzc%zXWOJs`ARRCaI#A6*83$A&`asLbsPIw(aNp`9J%E%|&7}gHpxhsFE}T0(sIBl? z(>C4GAyhPh`6Olw=5+rMIsZnWwkM_r00UfH%g?xo#ILaP2vKTeWG1)A^XJc*F~#0v zu4Qa|Ex)rVQGnTmQa++s163}krU3_=zm9(YtAqp;CiXnn4y-U%<_1T97y+Ooz`g@@ zBDWs>w1_}3mLixytt0xdX(a<`mhQJqXVmOp4cqoBClUa(8>lQiJSrwS$52s;iI*dm zWXuulSuS;Q&nH~dK~v?rkS;(!$A_&QuP^n!VG`R%h41cqNN^b@@moGA9jq6}Onct) zTvnA(Htc6I)YQyO0CgnTx}(F@w-G&`!x?OFr&v+dH*^B>{+R7|`3Yo#cFD-XQ?RpA z_7RLy!A*=J9&)z*$+=HclV|Vg9heZxdU$y3cUdGH?yYPLwc~!V;1=Gq2t~}p?rchI zt?OJVp$)JenOU=!$#iLD_14Y``c)H3QPI|Q@gSw zvx{~tkq#5+=uTHKl*w69&}FAuk?JIDgb=Qm=3`&y~Ol~r&1AEpbVfj*b;DN zf-3*J?B$tS^Y;&)=j7(DZIPV2%*qn9AJzHeg=JTXQ6;;Gh*5TSHoJg;j?d04&#Aum zB0P{G$ZC$nRs&%vzf+l=%@KI068wwv=DDb@ za#+!CPgsE{8KxRpp&@M@0Mz=W+8huuLpfQ-QCsP5qo?$i}de6G7l0rJ2Jiub4_ zf42qA!8`6s5pC6mjX&C6xycvTqnyDFQ?~@MP8jCfg^FPFv~t z^r>pnX{H=hO`?}4h8uP6A9@{?>re3k%NRK~XZzq4xrLryob$Jed%{BvfDUY+0oa!f zXkjL1%(TWNCJtc35zZ02jHcWrRx>{?DJdCsO>XEtl!jF@s}I#bG%~B$)4R}{_Ir~S zM!2eZ!%pV_rhQBoOkWpCrw=G);t%#OA%lAr2CtL;Y zEbaF4C9ui9=xXxY+rK^srztxBR!wA06Z0L%?#GfaKazey!N9@SydND#FQgpLYs!@( z>>4k1`YYn-7myi#{~aG(kNV))0E{81_?8-^JJJASqQ-Q|8HWPfNxaZ?|08sH4NSe` zny?2`yT#^MW%w{++JzNBf{90HK+3=K!B?+dEhama4jt>#D1ewSjB{8D5&Zf;`!9mL`oBzAJxt~9^P2sIzo2D1^hDQ& zfK+j-yqWnP-HWVtbHI*?NTw=<8EM-tYPu%#nl_|P%w^5)>z`OO{ygd%STBp3unX2l zhBvh=hgLf*4RoZx2W$K9MfT@3&!0aJCwH(TuO9uUH?SB#xyuR$eH*Wz|0n-vfo13B zR%!6v;f;!liU#Skl-n+jZpXCT`ijQJ$+N+2D8w#sFO)Kq1?=9KxOdPVk#nYrdPjpg z!yb@Arw{y+eed=DnC?37di9y?{B-}K+4n`BR&jgz1(@Y;Wm-G{2UUy8d;&Ej(^HA{2v{Uzq@};Lc&x&>@r&j70W>b7NFEM-)Z-dX+Xzz zw`%9ssoog3;7$X`l{d;=cc}3%JImK1nEJHM+2Y7q7J$w1H0qdT5Et}1L|3xUjlZ`%7E#k`= zKVm%I6G{h6j^#&Rk^p)D7L3Tl*}%R2cSmNJ6%k$C`Qm_*ou)mI2tAkM`KWZl0OMT< zXCg!g3nQ&x>`f%@JP%>^S3EtMXkC{|96MO2ioNgJT>Sxid!_QVu_OIu6GPb-=WcGd z;({>^?F;;%m^w_vbNSIs@N}K~=K`&_;@iDlUHrj^z2@|`Zohw83XMhn0!sb&^zysf z*;@~+tSAH$B?4-q($i;GxB7!m;rMS`9V<>)@Df!+o{k3m!eZup%ZevrV`HtGettZ= zeGI}g4Cu@sfEPPd54@K$e=7{O*zgn+s1+WY-8c;l0%}tbq$5Uhute)3&V7eEW$1h< zti#hOqV>bQgXT<0PfJV7&#!2?r>Ee&fNKoU_}(o2*v;%Sv~6dB0RSgjvU^9p%Q#EM zfv?#tsW4;i8*mT%{D;%Aw2p~M3G#Dir*NIAkx`P@#<-gKNdPbwcH60>6f?Ee&J`8r z{diHVt46iu({3XvR%D)b*Rl6+s$ zP8$Gzntnjp@l=ENhS%N$P*80%S>@od`SoVTRPrHXk?jzu0nx1GN>#~BZ>?;-G+M8z z_n~1$R>;72YjSMm(Ef|vB|B<}uND6-QBhHqVMw~`TNq5I1P?^+T&?=zk~vl= z$x>7{RezLrj!9IPkC#h)e`7+!EMQB>Z#l`1J+gq0HUW4=>qu+8C8xvPrSPNI)6QUj zt6`J%Xg`pz3~cMh*?^tcu-8ORtnXJg7ks?64XWE-i_V%g`>z$vgTko}pVA*UqxN2t&lAW0$!($KZx^D0W`YkmVVh&=U*_=b@4q;RiD z^t-Sw*6B-tL}USnhIe`(Q?b#&!W{0@R|1t^n9(gQf^2EIG>Y>ayHRG$ki0vyI+^!= z-~$~|+ga7PIua`8k`&JM`1UdX8FFRQ_0xta?sXPd^Qq&Mq8kNNhsQgud>KIpNdO?< zb{}i13Csmy(wHY%R(0oUfyr_tu3wqf+A!}y63BIIVatv6^tV8dNn{UB zh&X;(xuf|pW1S{Xra9U1ZS~y7V>xdr%^)a`O<eC!y>BDwsY40Jfj@9FUMVF-g?|QilZxO7b6y|N2C; zz14cMt8!IPaP$!X2Xw)8p$e7o_@nK{oiJ%Zmq|g1D_)?EP981{5%Js22}r3l|1qK= zn;PH*m$0f&fx?kQ{^*Z+J<(Ts&&nf6i!M?l9!Qr!aQdCe9ypF z4o;ecgOZh|Su0yHWNvQmXYgq8CG@~7$cUg_CP=@+^7BZb4iuPJ0b=I=%m&nPg#is* zkI9lZ0rlmrPWvl&BF(G-r*q%y7iIw4;3g=eSpHQHc-#IV{Q%mGDt02DIbbnLVc%ZM zyCfs{sL=hJO#R^_CVKJzS_#Cj)ykh3sXLo7#JcN}CQXFHD5EnPmxL5A}Lmp!V48ai{`q65T z{CumCA?be%G6M`O!N0T47mP}o&0ZAJds#N|d;Td^0}csHQF^K4Zv$cP?$^>kwmImvlZ7_ZJ literal 0 HcmV?d00001 diff --git a/TEMA9/images/SAU3.png b/TEMA9/images/SAU3.png new file mode 100644 index 0000000000000000000000000000000000000000..482ffd47f7fe37160e4bb0b3c9109b14eccec500 GIT binary patch literal 10956 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 Y7|SnS@U$Td0snNh4gbtNXMgv90A^Edd;kCd literal 0 HcmV?d00001 diff --git a/TEMA9/mainSAU.py b/TEMA9/mainSAU.py new file mode 100644 index 0000000..95a2a50 --- /dev/null +++ b/TEMA9/mainSAU.py @@ -0,0 +1,15 @@ +###main_SAU +from SAU import SAU +import pylab + +prm=[10,0.1,0.1,10] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь +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]) +pylab.plot(yt) +pylab.show() diff --git a/TEMA9/report.md b/TEMA9/report.md new file mode 100644 index 0000000..a461f49 --- /dev/null +++ b/TEMA9/report.md @@ -0,0 +1,476 @@ +# Отчет по теме 9. Создание пользовательских классов и объектов + +***Цель работы: Изучение средств объектно-ориентированного программирования в среде Python.*** + +Терехов Фёдор Валерьевич, А-01-23 + +>Класс в Python, как и в других языках программирования, - это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Классы – это основные инструменты объектно-ориентированного программирования (ООП) в языке Python. Они представляют собой шаблоны, образцы, по которым может быть создано множество объектов-экземпляров класса. У каждого класса есть уникальное имя и некоторый набор специфических для него атрибутов: полей (данных) и методов (функций), которые могут использоваться при работе с экземплярами класса. + +## 1. Создание классов и их наследников. + +### 1.1. Создание автономного класса. + +```python +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() # Обращение ко второму методу класса +z2.otobrazh() + +z1.data='Новое значение атрибута у экз.1' +z1.otobrazh() +``` + +Ответ программы: +```shell +экз.класса 1 +-632.453 +Новое значение атрибута у экз.1 +``` + +### 1.2. Создание класса-наследника. + +```python +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.data='Новое значение атрибута у экз.1' +class Class2(Class1): #Class2 - наследник класса Class1 + def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя + print('значение=',self.data)#Отображение данных экземпляра + +z3=Class2() +print(dir(z3)) +z3.zad_zn('Совсем новое') +z3.otobrazh() +z1.otobrazh() +del z1,z2,z3 +print('После удаления:',dir()) +``` + +Ответ программы: +```shell +['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn'] +значение= Совсем новое +Новое значение атрибута у экз.1 +После удаления: ['Class1', 'Class2', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__'] +``` + +*z1 и z3 - независимые объекты, изменение одного не влияет на другой* + +## 2. Использование классов, содержащихся в модулях. + +Mod3.py: +```python +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) +``` + +Основная программа: +```python +from Mod3 import Class1 #Частичный импорт содержимого модуля +z4=Class1() +z4.otobrazh() +``` + +Ответ программы: +```shell +Traceback (most recent call last): + File "/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs/TEMA9/task2.py", line 1, in + from Mod3 import Class1 #Частичный импорт содержимого модуля +ImportError: cannot import name 'Class1' from 'Mod3' (/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs/TEMA9/Mod3.py) +``` + +***Сообщение об ошибке AttributeError: 'Class1' object has no attribute 'data' указывает на то, что объект класса Class1 не имеет атрибута data.*** + +```python +from Mod3 import Class1 +z4=Class1() +z4.data='значение данного data у экз.4' +z4.otobrazh() +``` + +Ответ программы: +```shell +значение данного data у экз.4 +``` + +```python +from Mod3 import Class1 +z4=Class1() +z4.data='значение данного data у экз.4' +z4.otobrazh() +del z4 +import Mod3 #Полный импорт содержимого модуля + +z4=Mod3.Class2() +z4.zad_zn('Класс из модуля') +z4.otobrazh() +Mod3.otobrazh('Объект') +``` + +Ответ программы: +```shell +значение данного data у экз.4 +значение= Класс из модуля +значение объекта= Объект +``` + +*Результаты вывода будут отличаться из-за того, что в первом случае был вызван метод otobrazh() для экземпляра z4, а во втором случае - для модуля Mod3. Также во втором случае z4 явлется экземпляром класса Class2, а в первом Class1.* + + +## 3. Использование специальных методов. + +>Имена специальных методов предваряются одним или двумя подчерками и имеют вид: __ <имя специального метода>__ + +```python +from Mod3 import Class2 #Частичный импорт содержимого модуля Mod3 +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 +print(dir(Class3)) +``` + +Ответ программы: +```shell +['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn'] +``` + +>Метод __add__ - это один из методов, осуществляющих так называемую «перегрузку» операторов. + +Проверка работы методов: +```python +from Mod3 import Class2 #Частичный импорт содержимого модуля Mod3 +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 + +z5=Class3('abc') #При создании экземпляра срабатывает конструктор +z5.otobrazh() +z6=z5+'def' +z6.otobrazh() +z6.zad_dr_zn(3) +z6.otobrazh() +``` + +Ответ программы: +```shell +значение= abc +значение= abcdef +значение= abcdefabcdefabcdef +``` + +## 4. Присоединение атрибутов к классу. + +```python +from Mod3 import Class2 #Частичный импорт содержимого модуля Mod3 +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 + +print("Список атрибутов класса Class3:",dir(Class3)) +Class3.fio='Иванов И.И.' +print("\nСписок атрибутов класса Class3 после добавления атрибута:",dir(Class3)) +z7=Class3(123) +print("\nСписок атрибутов экземпляра z7:",dir(z7)) +print("\nСравнение списков атрибутов экземпляра z7 и класса Class3:",dir(z7)==dir(Class3)) +print("\nЗначение атрибута fio экземпляра z7:",z7.fio) +print("\nСравнение значения атрибута fio экземпляра z7 и класса Class3:",z7.fio==Class3.fio) +z7.rozden='1987' +print("\nСписок атрибутов экземпляра z7 после добавления атрибута",dir(z7)) +print("\nСравнение списков атрибутов экземпляра z7 и класса Class3 после добавления атрибута",dir(Class3)) +``` + +Ответ программы: +```shell +Список атрибутов класса Class3: ['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn'] + +Список атрибутов класса Class3 после добавления атрибута: ['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] + +Список атрибутов экземпляра z7: ['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn'] + +Сравнение списков атрибутов экземпляра z7 и класса Class3: False + +Значение атрибута fio экземпляра z7: Иванов И.И. + +Сравнение значения атрибута fio экземпляра z7 и класса Class3: True + +Список атрибутов экземпляра z7 после добавления атрибута ['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn'] + +Сравнение списков атрибутов экземпляра z7 и класса Class3 после добавления атрибута False +``` + + +* *После первой проверки выяснилось, что список атрибутов экземпляра не совпадает с атрибутами класса, так как у экземпляра z7 есть атрибут data.* +* *Значение атрибута fio у экземпляра z7 совпадает со значением атрибута класса.* +* *Атрибут rozden не появился у Class3, так как z7.rozden='1987' создает атрибут только у экземпляра z7, класс Class3 не меняется. + +## 5. Выявление родительских классов. + +```python +from Mod3 import Class2 #Частичный импорт содержимого модуля Mod3 +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 + +print("Родительский класс Class3:", Class3.__bases__) +print("\nРодительский класс Class2:", Class2.__bases__) +print("\nЦепочка наследования Class3:", Class3.__mro__) +print("\nЦепочка наследования для встроенного класса ошибок «деление на ноль»:", ZeroDivisionError.__mro__) +``` + +Ответ программы: +```shell +Родительский класс Class3: (,) + +Родительский класс Class2: (,) + +Цепочка наследования Class3: (, , , ) + +Цепочка наследования для встроенного класса ошибок «деление на ноль»: (, , , , ) +``` + +## 6. Создание свойства класса. + +>Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута. + +```python +class Class4: + def __init__(sam,znach): + sam.__prm=znach + def chten(sam): + return sam.__prm + def zapis(sam,znch): + sam.__prm=znch + def stiran(sam): + del sam.__prm + svojstvo=property(chten,zapis,stiran) + +exempl=Class4(12) +print(exempl.svojstvo) +exempl.svojstvo=45 +print(exempl.svojstvo) +del exempl.svojstvo +#print(exempl.svojstvo) +``` + +Ответ программы: +```shell +12 +45 +``` + +Если добавить в конце "print(exempl.svojstvo)": +```python +class Class4: + def __init__(sam,znach): + sam.__prm=znach + def chten(sam): + return sam.__prm + def zapis(sam,znch): + sam.__prm=znch + def stiran(sam): + del sam.__prm + svojstvo=property(chten,zapis,stiran) + +exempl=Class4(12) +print(exempl.svojstvo) +exempl.svojstvo=45 +print(exempl.svojstvo) +del exempl.svojstvo +print(exempl.svojstvo) +``` + +Ответ программы: +```shell +12 +45 +Traceback (most recent call last): + File "/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs/TEMA9/task5.py", line 17, in + print(exempl.svojstvo) + File "/Users/fedorterekhov/Library/Mobile Documents/com~apple~CloudDocs/Учёба/3 курс/POAS_labs/python-labs/TEMA9/task5.py", line 5, in chten + return sam.__prm +AttributeError: 'Class4' object has no attribute '_Class4__prm' +``` + +*del exempl.svojstvo вызывает метод stiran(), stiran() выполняет del sam.__prm. После этого атрибут __prm удален из объекта. При попытке print(exempl.svojstvo) снова вызывается chten(). chten() пытается вернуть sam.__prm, но его уже нет.* + + +## 7. Пример представления в виде класса модели системы автоматического регулирования (САР). + +>Пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем. + +Модуль SAU: +```python +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]) + + +``` + +***Параметры prm=[2.5,4,1.3,0.8]*** + +Основная программа mainSAU: +```python +###main_SAU +from SAU import SAU +import pylab + +prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь +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]) +pylab.plot(yt) +pylab.show() +``` + +Ответ программы: +```shell +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 +``` + +![График САУ1](images/SAU1.png) + +***Параметры prm=[5,1,1.5,0.4]*** + +Ответ программы: +```shell +y= 0.0 +y= 1.0 +y= 1.7 +y= 1.89 +y= 1.813 +y= 1.7021000000000002 +y= 1.64757 +y= 1.6426689999999997 +y= 1.6555972999999997 +y= 1.6661174099999996 +y= 1.6696029969999997 +y= 1.6688868749 +y= 1.6673399133300002 +y= 1.666471876861 +y= 1.6663283398036999 +y= 1.66648827480429 +y= 1.6666432904218929 +y= 1.666703820854038 +y= 1.6666996874712587 +y= 1.6666786349736697 +y= 1.6666651382401914 +``` + +![График САУ2](images/SAU2.png) + +***Параметры prm=[10,0.1,0.1,10]*** + +Ответ программы: +```shell +y= 0.0 +y= 8.264462809917354 +y= -673.2463629533501 +y= 55525.98301723731 +y= -4578814.754542403 +y= 377581480.12265354 +y= -31136391973.95935 +y= 2567591252361.0435 +y= -211730532063351.34 +y= 1.7459873399478246e+16 +y= -1.439788471483156e+18 +y= 1.1872885874864076e+20 +y= -9.79070341161542e+21 +y= 8.073679331590074e+23 +y= -6.657774749055506e+25 +y= 5.490181463577067e+27 +y= -4.5273524021342546e+29 +y= 3.73337746832074e+31 +y= -3.07864422358515e+33 +y= 2.538733448690739e+35 +y= -2.0935083937680952e+37 +``` + +![График САУ3](images/SAU3.png) diff --git a/TEMA9/task.md b/TEMA9/task.md new file mode 100644 index 0000000..a65b4db --- /dev/null +++ b/TEMA9/task.md @@ -0,0 +1,97 @@ +# Общее контрольное задание. + +Создайте и запишите в модуль класс, содержащий следующие компоненты: +- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; +- метод для обеспечения операции повышения оклада сотрудника на заданное значение; +- метод для обеспечения перевода сотрудника из одного отдела в другой; +- метод для изменения должности сотрудника; +- свойство, содержащее перечень (список) поощрений сотрудника. +Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности. + +Модуль Sotrudnik.py: +```python +class Sotrudnik: + def __init__(self, fio, otdel="не указан", dolzhnost="не указана", oklad=30000): + self.fio = fio + self.otdel = otdel + self.dolzhnost = dolzhnost + self.oklad = oklad + self._pooshreniya = [] + + def povysit_oklad(self, summa): + """Повысить оклад на заданную сумму""" + self.oklad += summa + + def perevesti_v_otdel(self, novy_otdel): + """Перевести в другой отдел""" + self.otdel = novy_otdel + + def izmenit_dolzhnost(self, novaya_dolzhnost): + """Изменить должность""" + self.dolzhnost = novaya_dolzhnost + + @property + def pooshreniya(self): + """Свойство для списка поощрений""" + return self._pooshreniya + + @pooshreniya.setter + def pooshreniya(self, znachenie): + """Добавить поощрение""" + self._pooshreniya.append(znachenie) +``` + +Основная программа: +```python +from Sotrudnik import Sotrudnik + +s1 = Sotrudnik("Иванов И.И.", "IT", "программист", 80000) +s2 = Sotrudnik("Петрова М.С.", "бухгалтерия", "бухгалтер") + + +print("Начальные данные:") +print(f"{s1.fio}: {s1.otdel}, {s1.dolzhnost}, {s1.oklad} руб.") +print(f"{s2.fio}: {s2.otdel}, {s2.dolzhnost}, {s2.oklad} руб.") + + +print("\nОперации с первым сотрудником:") +print("Переведён в отдел \"разработка\" на должность \"старший программист\"") +s1.perevesti_v_otdel("разработка") +s1.izmenit_dolzhnost("старший программист") +print("Повышен оклад на 15 000 руб.") +s1.povysit_oklad(15000) +s1.pooshreniya = "благодарность за проект" + +# Операции со вторым сотрудником +print("\nОперации со вторым сотрудником:") +s2.povysit_oklad(10000) +s2.pooshreniya = "премия за квартал" + +# Отображаем итоговые значения +print("\nИтоговые данные:") +print(f"{s1.fio}: {s1.otdel}, {s1.dolzhnost}, {s1.oklad} руб.") +print(f"Поощрения: {s1.pooshreniya}") + +print(f"\n{s2.fio}: {s2.otdel}, {s2.dolzhnost}, {s2.oklad} руб.") +print(f"Поощрения: {s2.pooshreniya}") +``` + +Ответ программы: +```shell +Начальные данные: +Иванов И.И.: IT, программист, 80000 руб. +Петрова М.С.: бухгалтерия, бухгалтер, 30000 руб. + +Операции с первым сотрудником: +Переведён в отдел "разработка" на должность "старший программист" +Повышен оклад на 15 000 руб. + +Операции со вторым сотрудником: + +Итоговые данные: +Иванов И.И.: разработка, старший программист, 95000 руб. +Поощрения: ['благодарность за проект'] + +Петрова М.С.: бухгалтерия, бухгалтер, 40000 руб. +Поощрения: ['премия за квартал'] +``` \ No newline at end of file diff --git a/TEMA9/task1.py b/TEMA9/task1.py new file mode 100644 index 0000000..7a945ed --- /dev/null +++ b/TEMA9/task1.py @@ -0,0 +1,24 @@ +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.data='Новое значение атрибута у экз.1' +class Class2(Class1): #Class2 - наследник класса Class1 + def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя + print('значение=',self.data)#Отображение данных экземпляра + +z3=Class2() +print(dir(z3)) +z3.zad_zn('Совсем новое') +z3.otobrazh() +z1.otobrazh() +del z1,z2,z3 +print('После удаления:',dir()) \ No newline at end of file diff --git a/TEMA9/task2.py b/TEMA9/task2.py new file mode 100644 index 0000000..69404e9 --- /dev/null +++ b/TEMA9/task2.py @@ -0,0 +1,11 @@ +from Mod3 import Class1 +z4=Class1() +z4.data='значение данного data у экз.4' +z4.otobrazh() +del z4 +import Mod3 #Полный импорт содержимого модуля + +z4=Mod3.Class2() +z4.zad_zn('Класс из модуля') +z4.otobrazh() +Mod3.otobrazh('Объект') diff --git a/TEMA9/task3.py b/TEMA9/task3.py new file mode 100644 index 0000000..b36050a --- /dev/null +++ b/TEMA9/task3.py @@ -0,0 +1,20 @@ +from Mod3 import Class2 #Частичный импорт содержимого модуля Mod3 +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 + +print("Список атрибутов класса Class3:",dir(Class3)) +Class3.fio='Иванов И.И.' +print("\nСписок атрибутов класса Class3 после добавления атрибута:",dir(Class3)) +z7=Class3(123) +print("\nСписок атрибутов экземпляра z7:",dir(z7)) +print("\nСравнение списков атрибутов экземпляра z7 и класса Class3:",dir(z7)==dir(Class3)) +print("\nЗначение атрибута fio экземпляра z7:",z7.fio) +print("\nСравнение значения атрибута fio экземпляра z7 и класса Class3:",z7.fio==Class3.fio) +z7.rozden='1987' +print("\nСписок атрибутов экземпляра z7 после добавления атрибута",dir(z7)) +print("\nСравнение списков атрибутов экземпляра z7 и класса Class3 после добавления атрибута",dir(z7)==dir(Class3)) \ No newline at end of file diff --git a/TEMA9/task4.py b/TEMA9/task4.py new file mode 100644 index 0000000..7bb691a --- /dev/null +++ b/TEMA9/task4.py @@ -0,0 +1,13 @@ +from Mod3 import Class2 #Частичный импорт содержимого модуля Mod3 +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 + +print("Родительский класс Class3:", Class3.__bases__) +print("\nРодительский класс Class2:", Class2.__bases__) +print("\nЦепочка наследования Class3:", Class3.__mro__) +print("\nЦепочка наследования для встроенного класса ошибок «деление на ноль»:", ZeroDivisionError.__mro__) \ No newline at end of file diff --git a/TEMA9/task5.py b/TEMA9/task5.py new file mode 100644 index 0000000..231641a --- /dev/null +++ b/TEMA9/task5.py @@ -0,0 +1,17 @@ +class Class4: + def __init__(sam,znach): + sam.__prm=znach + def chten(sam): + return sam.__prm + def zapis(sam,znch): + sam.__prm=znch + def stiran(sam): + del sam.__prm + svojstvo=property(chten,zapis,stiran) + +exempl=Class4(12) +print(exempl.svojstvo) +exempl.svojstvo=45 +print(exempl.svojstvo) +del exempl.svojstvo +print(exempl.svojstvo) \ No newline at end of file diff --git a/TEMA9/test_sotrudnik.py b/TEMA9/test_sotrudnik.py new file mode 100644 index 0000000..666935b --- /dev/null +++ b/TEMA9/test_sotrudnik.py @@ -0,0 +1,31 @@ +from Sotrudnik import Sotrudnik + +s1 = Sotrudnik("Иванов И.И.", "IT", "программист", 80000) +s2 = Sotrudnik("Петрова М.С.", "бухгалтерия", "бухгалтер") + + +print("Начальные данные:") +print(f"{s1.fio}: {s1.otdel}, {s1.dolzhnost}, {s1.oklad} руб.") +print(f"{s2.fio}: {s2.otdel}, {s2.dolzhnost}, {s2.oklad} руб.") + + +print("\nОперации с первым сотрудником:") +print("Переведён в отдел \"разработка\" на должность \"старший программист\"") +s1.perevesti_v_otdel("разработка") +s1.izmenit_dolzhnost("старший программист") +print("Повышен оклад на 15 000 руб.") +s1.povysit_oklad(15000) +s1.pooshreniya = "благодарность за проект" + +# Операции со вторым сотрудником +print("\nОперации со вторым сотрудником:") +s2.povysit_oklad(10000) +s2.pooshreniya = "премия за квартал" + +# Отображаем итоговые значения +print("\nИтоговые данные:") +print(f"{s1.fio}: {s1.otdel}, {s1.dolzhnost}, {s1.oklad} руб.") +print(f"Поощрения: {s1.pooshreniya}") + +print(f"\n{s2.fio}: {s2.otdel}, {s2.dolzhnost}, {s2.oklad} руб.") +print(f"Поощрения: {s2.pooshreniya}") \ No newline at end of file