Сравнить коммиты

...

80 Коммитов

Автор SHA1 Сообщение Дата
8ace2828ad Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:33:26 +00:00
e92e49d8ac Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:32:41 +00:00
59fcc5d4a4 Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:32:00 +00:00
d2a80f27f8 Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:31:29 +00:00
583f2b2cd4 Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:27:09 +00:00
b336dda2dc Изменил(а) на 'TEMA9/test.md' 2025-12-19 09:03:59 +00:00
3a9e1cd16f Изменил(а) на 'TEMA9/task.md' 2025-12-19 08:36:46 +00:00
a05ba56e5f Изменил(а) на 'TEMA9/task.md' 2025-12-19 08:35:18 +00:00
619f22636d Изменил(а) на 'TEMA9/task.md' 2025-12-19 08:11:39 +00:00
0ccf8cdb8b Изменил(а) на 'TEMA9/report.md' 2025-12-19 06:53:01 +00:00
8a2bf54d48 Изменил(а) на 'TEMA9/task.md' 2025-12-19 06:39:20 +00:00
7d54e8f87b Изменил(а) на 'TEMA9/task.md' 2025-12-19 06:34:36 +00:00
Solovyova_ED
5ed924371a Добавлена тема 9 2025-12-18 20:18:52 +03:00
Solovyova_ED
181ac41163 Добавлены отчёты, задания и тесты 2025-12-08 12:45:25 +03:00
d8b49dd42f Изменил(а) на 'TEMA8/task.md' 2025-12-08 09:01:47 +00:00
c4fbbf2718 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:56:38 +00:00
77c44a0d24 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:47:56 +00:00
33a67fc233 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:44:38 +00:00
be663ed6e7 Изменил(а) на 'TEMA7/test.md' 2025-12-08 08:43:50 +00:00
Solovyova_ED
ed5322825d Добавлены отчёты, задания и тесты 2025-12-08 11:42:41 +03:00
694a8609e6 Изменил(а) на 'TEMA7/report.md' 2025-12-08 06:56:10 +00:00
09cdf1e6be Изменил(а) на 'TEMA7/task.md' 2025-12-08 06:44:57 +00:00
dc058214ec Изменил(а) на 'TEMA7/report.md' 2025-12-08 06:40:13 +00:00
093a9d0586 Изменил(а) на 'TEMA8/task.md' 2025-12-08 02:13:39 +00:00
Solovyova_ED
6b67cbc7f8 Обновлен task.md в TEMA8 2025-12-08 05:12:57 +03:00
26bace05eb Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:48:11 +00:00
6c52d6a41f Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:45:58 +00:00
c467c0fbb0 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:36:38 +00:00
aff380f9f6 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:34:32 +00:00
00d6ce48a6 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:33:24 +00:00
3d8d9d8e88 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:17:44 +00:00
ab1b5fe571 Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:08:48 +00:00
7bfbdc941a Изменил(а) на 'TEMA8/report.md' 2025-12-08 01:05:22 +00:00
eb1476dfa0 Изменил(а) на 'TEMA7/report.md' 2025-12-08 01:00:09 +00:00
ee1d0d709b Изменил(а) на 'TEMA7/report.md' 2025-12-08 00:55:32 +00:00
a54b7c3dba Изменил(а) на 'TEMA7/report.md' 2025-12-08 00:43:46 +00:00
a25863a200 Изменил(а) на 'TEMA7/task.md' 2025-12-07 23:28:47 +00:00
c109424599 Изменил(а) на 'TEMA7/task.md' 2025-12-07 14:40:16 +00:00
832863a169 Изменил(а) на 'TEMA8/report.md' 2025-12-07 14:37:19 +00:00
Solovyova_ED
ed2affa688 Добавлены отчёты 2025-12-07 17:15:54 +03:00
c235c6bc28 Изменил(а) на 'TEMA7/task.md' 2025-11-24 09:38:45 +00:00
becd453a56 Изменил(а) на 'TEMA7/task.md' 2025-11-24 09:38:16 +00:00
f85ae22107 Изменил(а) на 'TEMA7/task.md' 2025-11-24 09:37:47 +00:00
9aaa5896e6 Изменил(а) на 'TEMA7/report.md' 2025-11-24 08:59:31 +00:00
9d5399198a Изменил(а) на 'TEMA7/report.md' 2025-11-24 08:54:08 +00:00
Solovyova_ED
8ac1ce5044 Текущие изменения 2025-11-24 11:51:35 +03:00
Solovyova_ED
aa6e7099a4 Добавлен отчёт 2025-11-24 11:51:35 +03:00
f968458c17 Изменил(а) на 'TEMA6/test.md' 2025-11-21 09:44:35 +00:00
3a2722b2c8 Изменил(а) на 'TEMA6/test.md' 2025-11-21 09:43:46 +00:00
55b5708853 Изменил(а) на 'TEMA6/test.md' 2025-11-21 09:29:21 +00:00
Solovyova_ED
4d34e0af5c Добавлено задание Тема 6 2025-11-21 12:27:46 +03:00
Solovyova_ED
67fbdcb413 Добавлено задание Тема 6 2025-11-21 12:23:12 +03:00
Solovyova_ED
6dde76f286 Добавлено задание Тема 6 2025-11-21 12:23:12 +03:00
904c529a6a Изменил(а) на 'TEMA6/task.md' 2025-11-18 20:41:38 +00:00
9f438f0c3f Изменил(а) на 'TEMA6/report.md' 2025-11-17 23:04:35 +00:00
0acd8eca56 Изменил(а) на 'TEMA6/task.md' 2025-11-17 22:41:56 +00:00
070afacc25 Изменил(а) на 'TEMA6/task.md' 2025-11-17 22:39:39 +00:00
Solovyova_ED
9a1487d23c Добавлен отчёт и задание 2025-11-18 01:38:16 +03:00
Solovyova_ED
7a9d11dc03 Добавлен отчёт 2025-11-17 22:05:43 +03:00
99d71545b2 Изменил(а) на 'TEMA6/report.md' 2025-11-17 18:54:05 +00:00
Solovyova_ED
92fe7209c5 Добавлен отчёт 2025-11-17 21:45:21 +03:00
01e890f9a7 Изменил(а) на 'TEMA5/test.md' 2025-11-10 09:40:38 +00:00
f68396ef62 Изменил(а) на 'TEMA5/test.md' 2025-11-10 09:39:26 +00:00
223df5311c Изменил(а) на 'TEMA5/test.md' 2025-11-10 09:39:10 +00:00
ae0545d076 Изменил(а) на 'TEMA5/test.md' 2025-11-10 09:38:35 +00:00
25b33b82fa Изменил(а) на 'TEMA5/test.md' 2025-11-10 09:37:48 +00:00
Solovyova_ED
aef32df298 done 2025-11-10 12:36:39 +03:00
Solovyova_ED
fd1ec88905 done 2025-11-10 12:35:06 +03:00
Solovyova_ED
256e4b2f89 done 2025-11-10 12:03:43 +03:00
Solovyova_ED
20464e35f9 done 2025-11-10 12:01:02 +03:00
81ab61157d Изменил(а) на 'TEMA5/report.md' 2025-11-10 08:22:49 +00:00
Solovyova_ED
1197efdeed Добавлен отчёт TEMA5 2025-11-09 04:46:26 +03:00
Solovyova_ED
4a5d4f7b45 Тест 2025-10-23 20:15:05 +03:00
Solovyova_ED
b192e92172 Тест 2025-10-23 20:13:56 +03:00
e52c4b70f0 Изменил(а) на 'TEMA4/report.md' 2025-10-13 08:39:36 +00:00
790a48dcd3 Изменил(а) на 'TEMA4/report.md' 2025-10-13 08:39:02 +00:00
16926feb0b Изменил(а) на 'TEMA4/report.md' 2025-10-13 08:37:57 +00:00
162ea67264 Изменил(а) на 'TEMA4/report.md' 2025-10-13 08:28:29 +00:00
Solovyova_ED
67ae0ecda4 done 2025-10-13 01:19:49 +03:00
Solovyova_ED
0f10c748af done 2025-10-13 01:02:18 +03:00
62 изменённых файлов: 4075 добавлений и 11 удалений

Просмотреть файл

@@ -1 +1,384 @@
Тема 4 Соловьёва Е. Д.
os import
SyntaxError: invalid syntax
import os
os.chdir('C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA4')
help('round')
Help on built-in function round in module builtins:
round(number, ndigits=None)
Round a number to a given precision in decimal digits.
The return value is an integer if ndigits is omitted or None. Otherwise
the return value has the same type as the number. ndigits may be negative.
round(123.456,1)
123.5
round(123.456,0)
123.0
type(123.5)
<class 'float'>
type(123.0)
<class 'float'>
s=round(123.456,1)
ss=type(123.5)
ss=round(123.456,0)
type(ss)
<class 'float'>
type(s)
<class 'float'>
round(123.456)
123
type(123)
<class 'int'>
gg=range(76,123,9)
пп
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
пп
NameError: name 'пп' is not defined
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='Solovyova'
gg='Ivanov','Lazarev','Likova'
ff=zip(gg,qq)
ff
<zip object at 0x000001308EED4840>
tuple(ff)
(('Ivanov', 'S'), ('Lazarev', 'o'), ('Likova', 'l'))
gg=range(76,123,9)
list(gg)
[76, 85, 94, 103, 112, 121]
qq = ["Соловьёва", "Лыкова", "Филиппова", "Мельников"]
ff=zip(gg,qq)
аа
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
аа
NameError: name 'аа' is not defined
ff
<zip object at 0x0000013090F83C40>
tuple(ff)
((76, 'Соловьёва'), (85, 'Лыкова'), (94, 'Филиппова'), (103, 'Мельников'))
ff[0]
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
ff[0]
TypeError: 'zip' object is not subscriptable
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
fff
5.0
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=0
fff
0.0
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
fff
5.0
dan
-131.0
exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
пп
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
пп
NameError: name 'пп' is not defined
gg
221.456
abs(-5)
5
pow(2, 3)
8
max([1, 5, 2])
5
min([1, 5, 2])
1
sum([1, 2, 3])
6
divmod(10, 3)
(3, 1)
len("abc")
3
list(map(str, [1, 2, 3]))
['1', '2', '3']
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!.
math.factorial(5)
120
help(math.factorial)
Help on built-in function factorial in module math:
factorial(n, /)
Find n!.
math.sin(3.14)
0.0015926529164868282
math.acos(0.5)
1.0471975511965979
math.degrees(56)
3208.56365273261
math.degrees(1)
57.29577951308232
math.radians(57.29577951308232)
1.0
math.exp(1)
2.718281828459045
math.log(10)
2.302585092994046
math.log(2.302585092994046)
0.834032445247956
math.log10(100)
2.0
math.sqrt(16)
4.0
math.ceil(1.2)
2
math.floor(0.9)
0
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
dir(random)
Traceback (most recent call last):
File "<pyshell#76>", line 1, in <module>
dir(random)
NameError: name 'random' is not defined. Did you forget to import 'random'?
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()
a=random.seed()
a
random.random()
0.6199792494543297
random.uniform(1, 10)
7.745269197841402
random.randint(1, 6)
3
random.gauss(0, 1)
1.0442172814729307
random.choice(['a','b','c'])
'b'
lst = [1,2,3]; random.shuffle(lst)
random.shuffle(lst)
дые
Traceback (most recent call last):
File "<pyshell#90>", line 1, in <module>
дые
NameError: name 'дые' is not defined
lst
[3, 2, 1]
random.shuffle(lst)
lst
[3, 2, 1]
random.shuffle(lst)
lst
[3, 1, 2]
random.sample([1,2,3,4])
Traceback (most recent call last):
File "<pyshell#96>", line 1, in <module>
random.sample([1,2,3,4])
TypeError: Random.sample() missing 1 required positional argument: 'k'
random.sample([1,2,3,4], 2)
[4, 2]
random.sample([1,2,3,4], 2)
[2, 4]
random.sample([1,2,3,4], 2)
[3, 1]
random.betavariate(2, 5)
0.27219690103691246
random.gammavariate(2, 1)
2.5239555636492557
spisok = [random.uniform(1, 10), random.gauss(0, 1), random.betavariate(2, 5), random.gammavariate(2, 1)]
spisok
[4.813064235823525, -0.2439125318449509, 0.12581423894318752, 1.940336067871031]
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()
c2=time.time()-c1
c2
18.061716318130493
c1
1760287587.2442193
dat=time.gmtime()
dat
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=16, tm_min=51, tm_sec=23, tm_wday=6, tm_yday=285, tm_isdst=0)
dat.tm_mon
10
dat.localtime
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
dat.localtime
AttributeError: 'time.struct_time' object has no attribute 'localtime'
localtime
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
localtime
NameError: name 'localtime' is not defined
time.localtime
<built-in function localtime>
local_time = time.localtime()
local_time
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=19, tm_min=54, tm_sec=1, tm_wday=6, tm_yday=285, tm_isdst=0)
c1 = time.time()
local_struct = time.localtime(c1)
local_struct
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=19, tm_min=59, tm_sec=42, tm_wday=6, tm_yday=285, tm_isdst=0)
time_str = time.asctime(local_struct)
time_str
'Sun Oct 12 19:59:42 2025'
time_str2 = time.ctime(c1)\
/
SyntaxError: multiple statements found while compiling a single statement
time_str2 = time.ctime(c1)
print(f"Год: {local_time.tm_year}")
Год: 2025
time.sleep(2)
time.sleep(2)
seconds = time.mktime(local_struct)
seconds
1760288382.0
new_struct = time.localtime(seconds)
new_struct
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=12, tm_hour=19, tm_min=59, tm_sec=42, tm_wday=6, tm_yday=285, tm_isdst=0)
import pylab
Traceback (most recent call last):
File "<pyshell#134>", line 1, in <module>
import pylab
ModuleNotFoundError: No module named 'pylab'
import sys
sys.path.append(C:\\Users\Ekaterina\\AppData\\Roaming\\Microsoft\Windows\\Start Menu\\Programs\\Python 3.13)
SyntaxError: invalid character '' (U+2018)
import sys
sys.path.append('C:\\Users\Ekaterina\\AppData\\Roaming\\Microsoft\Windows\\Start Menu\\Programs\\Python 3.13')
import pylab
Traceback (most recent call last):
File "<pyshell#139>", line 1, in <module>
import pylab
ModuleNotFoundError: No module named 'pylab'
pip install matplotlib
SyntaxError: invalid syntax
import matplotlib.pyplot as plt
Traceback (most recent call last):
File "<pyshell#143>", line 1, in <module>
import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
import pylab
x=list(range(-3,55,4))
t=list(range(15))
x
[-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53]
t
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
pylab.plot(t,x)
[<matplotlib.lines.Line2D object at 0x00000130A1F4E990>]
pylab.title
<function title at 0x00000130A1BD8F40>
pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
pylab.xlabel('время')
Text(0.5, 0, 'время')
pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
pylab.show()
X1=[12,6,8,10,7] и X2=[5,7,9,11,13]
SyntaxError: invalid syntax
X1=[12,6,8,10,7]
X2=[5,7,9,11,13]
pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x00000130A2AE2E90>]
pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x00000130A2AE2FD0>]
pylab.show()
pylab.show()
region=['Центр','Урал','Сибирь','Юг']
naselen=[65,12,23,17]
pylab.pie(naselen,labels=region)
([<matplotlib.patches.Wedge object at 0x00000130A1F397F0>, <matplotlib.patches.Wedge object at 0x00000130A24E8910>, <matplotlib.patches.Wedge object at 0x00000130A24E8CD0>, <matplotlib.patches.Wedge object at 0x00000130A24E8F50>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
pylab.show()
data = [1, 2, 2, 3, 3, 3, 4, 4, 5]
plt.hist(data, 5)
Traceback (most recent call last):
File "<pyshell#167>", line 1, in <module>
plt.hist(data, 5)
NameError: name 'plt' is not defined
pylab.hist(data,5)
(array([1., 2., 3., 2., 1.]), array([1. , 1.8, 2.6, 3.4, 4.2, 5. ]), <BarContainer object of 5 artists>)
pylab.show()
c = ['A', 'B', 'C']
v = [10, 25, 15]
pylab..bar(c, v)
SyntaxError: invalid syntax
pylab.bar(c, v)
<BarContainer object of 3 artists>
pylab.show()
sred = statistics.mean(data)
Traceback (most recent call last):
File "<pyshell#175>", line 1, in <module>
sred = statistics.mean(data)
NameError: name 'statistics' is not defined. Did you forget to import 'statistics'?
import statistic
Traceback (most recent call last):
File "<pyshell#176>", line 1, in <module>
import statistic
ModuleNotFoundError: No module named 'statistic'
import statistics
sred = statistics.mean(data)
often = statistics.mode(data)
often
3
mediana = statistics.median(data)
mediana
3
moda = statistics.mode(data)

Просмотреть файл

@@ -258,6 +258,30 @@ pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
pylab.show()
```
![График](Ris1.png)
Рассмотри способ построения нескольких графиков на одном рисунке.
```py
>>> X1=[12,6,8,10,7]
>>> X2=[5,7,9,11,13]
>>> pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000026ABB1756D0>]
>>> pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000026ABB175810>]
>>> pylab.show()
```
![График](Ris2.png)
Изучение возможности построения круговой диаграммы
```py
>>> region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
>>> naselen=[65,12,23,17] # Значения для диаграммы
>>> pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x0000026ABA668050>, <matplotlib.patches.Wedge object at 0x0000026ABD80B110>, <matplotlib.patches.Wedge object at 0x0000026ABD80B4D0>, <matplotlib.patches.Wedge object at 0x0000026ABD80B750>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>> pylab.show() #Отображение диаграммы
```
![График](Ris3.png)
попробую применить функции hist и bar для построения гистограмм и столбиковых диаграмм.
```py
data = [1, 2, 2, 3, 3, 3, 4, 4, 5]
@@ -270,6 +294,11 @@ pylab.bar(c, v)
<BarContainer object of 3 artists>
pylab.show()
```
Получились следующие графики
![График](hist.png)
![График](bar.png)
## 8. Самостоятельное изучение состава статистического модуля statistics.
```py

51
TEMA4/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,51 @@
# Общее контрольное задание по теме 4
Соловьёва Екатерина, А-01-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
* Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
* Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
* Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
* Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
* Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
* Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```py
>>> #1
>>> exec('''
... import cmath
... result = divmod(round(cmath.phase(0.2 + 0.8j), 2) * 20, 3)
... print(result)
... ''')
(8.0, 2.6000000000000014)
>>> #2
>>> import time
>>> localTime = time.localtime()
>>> print("Current time: {}:{}".format(localTime.tm_hour, localTime.tm_min))
Current time: 23:30
>>> #3
>>> weekDays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
>>> import random
>>> random.sample(weekDays, 3)
['Saturday', 'Monday', 'Thursday']
>>> #4
>>> random.choice(range(14, 33, 3))
23
>>> #5
>>> N = math.floor(random.gauss(15, 4))
>>> N
17
>>> import string
>>> letters = random.sample(string.ascii_letters, N)
>>> letters
['P', 'b', 't', 'z', 'R', 'f', 'm', 'O', 'p', 'i', 'j', 'a', 'E', 'r', 'B', 'd', 'y']
>>> #6
>>> timeDiff = round(time.time() - time.mktime(localTime))
>>> print(timeDiff // 60, "minutes and", timeDiff % 60, "seconds")
19 minutes and 52 seconds
```

17
TEMA4/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,17 @@
# Отчёт по ТЕМЕ 4
Соловьёва Екатерина, А-01-23
## Задание
Напишите инструкцию, позволяющую определить и записать в переменную календарные характеристики (год, месяц, день) момента, отстоящего на 7000000 сек. вперед от текущего времени. Выведите эти сведения в виде строки вида: «Это будет ХХ-ХХ-ХХХХ». Создайте множество с 5 случайными целыми элементами, значения которых находятся в диапазоне значений от 1 до 12.
## Решение
```py
import time
import random
c1 = time.localtime()
c2 = time.mktime(c1) + 7000000
c3 = time.localtime(c2)
print(f'Это будет {c3.tm_mday:02d}-{c3.tm_mon:02d}-{c3.tm_year}')
Это будет 12-01-2026
mnoz = set(random.sample(range(1, 13), 5))
print(mnoz)
{5, 6, 10, 11, 12}
```

10
TEMA5/3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,10 @@
stud_spis = ['Лыкова', 'Соловьёва', 'Коваленко','Голощапов']
stud_ocen =[4.9, 4.4, 4.6, 4.8]
stud_spis2 = ['Соловьёва', 'Голощапов', 'Лыкова', 'Коваленко']
stud_ocen2 = [4.3, 4.8, 4.2, 4.9]
nam = input('Введите фамилию студента:')
if nam in stud_spis and stud_spis2:
print(f'Средний балл за летнюю сессию: ', stud_ocen[stud_spis.index(nam)])
print(f'Средний балл за зимнюю сессию: ', stud_ocen2[stud_spis2.index(nam)])
else:
print(f'Студент отсутствует в списке')

14
TEMA5/4.py Обычный файл
Просмотреть файл

@@ -0,0 +1,14 @@
stroka = 'я, великий и могучий юноша-вождь с мечом и щитом захватил и объединил эфесское царство'
RusAlph = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
found_letters = set()
for x in stroka:
if x in RusAlph:
found_letters.add(x)
missing_letters = []
for i in RusAlph:
if i not in found_letters:
missing_letters.append(i)
print(f'Буквы, которых нет в строке: {missing_letters}')

283
TEMA5/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,283 @@
# Отчёт по Теме 5
Соловьёва Екатерина А-01-23
## 1. Запуск IDLE, привязка католога, создание файла отчета.
```py
import os
os.chdir("C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA5")
```
## 2. Ветвление по условию.
```py
porog,rashod1,rashod2 = 5,13,24
if rashod1>=porog:
dohod=12
elif rashod2==porog:
dohod=0
else:
dohod=-8
dohod
12
porog,rashod1,rashod2 = 5,13,4
if rashod1>=3 and rashod2==4:
dohod=rashod1
if rashod2==porog or rashod1<rashod2:
dohod=porog
dohod
13
if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 5:
dohod = 3
else:
dohod = 0
dohod
3
dohod = 2 if porog >= 4 else 0
dohod
2
porog,rashod1,rashod2 = 5,13,24
if porog >= 5:rashod1 = 6; rashod2 = 0
rashod1,rashod2
(6, 0)
```
## 3. Цикл по перечислению.
## 3.1 Простой цикл.
```py
temperatura = 5
for i in range(3,18,3):
temperatura += i
temperatura
50
```
## 3.2 Более сложный цикл.
```py
sps = [2,15,14,8]
for k in sps:
if len(sps) <= 10: sps.append(sps[0])
else: break
sps
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
sps = [2,15,14,8]
for k in sps[:]:
if len(sps) <= 10: sps.append(sps[0])
else: break
sps
[2, 15, 14, 8, 2, 2, 2, 2]
```
Вывод второго цикла отличается от первого из-за того, что работает он по длине копии списка. Следовательно, когда в оригинальный список добавляется новый элемент, длина копии остается такой же.
## 3.3 Создание списка со случайными числами.
```py
import random as rn
sps5 = []
for i in range(10):
sps5.append(rn.randint(1,100))
ss = sum(sps5)
if ss>500: break
else:
print(ss)
386
for i in range(10):
sps5.append(rn.randint(1,100))
ss = sum(sps5)
if ss>500: break
else:
print(ss)
#Пусто
```
В первом цикле не достигли 500, во втором — быстро превысили и вышли через break.
## 3.4 Символьная строка.
```py
stroka = 'Это - автоматизированная система'
stroka1 = ''
for ss in stroka:
stroka1 += '' + ss
stroka1
'Это - автоматизированная система'
```
## 3.5 Запись цикла в строке.
```py
import math
sps2 = [math.sin(i*math.pi/5+2)for i in range(100)]
import pylab
pylab.plot(sps2, label = 'Синусоидальный сигнал')
[<matplotlib.lines.Line2D object at 0x0000023CE2346990>]
pylab.show()
```
![график](ris1.png)
## 4. Цикл while.
## 4.1 Цикл со счётчиком.
```py
rashod = 300
while rashod:
print('Расход =',rashod)
rashod -= 50
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
```
Завершение цикла произошло в тот момент, когда значение rashod стало равнятся нулю, т.к в питоне 0 идентифицируется как False.
## 4.2 Символьная строка.
```py
import math
stroka = 'Расчет процесса в объекте регулирования'
i = 0
sps2 = []
while i < len(stroka):
r = 1 -2/(1 + math.exp(0.1*i))
sps2.append(r)
print('Значение в момент', i, '=', r)
i += 1
Значение в момент 0 = 0.0
Значение в момент 1 = 0.049958374957880025
Значение в момент 2 = 0.09966799462495568
Значение в момент 3 = 0.14888503362331795
Значение в момент 4 = 0.197375320224904
Значение в момент 5 = 0.2449186624037092
Значение в момент 6 = 0.2913126124515909
Значение в момент 7 = 0.3363755443363322
Значение в момент 8 = 0.3799489622552249
Значение в момент 9 = 0.421899005250008
Значение в момент 10 = 0.4621171572600098
Значение в момент 11 = 0.5005202111902354
Значение в момент 12 = 0.5370495669980353
Значение в момент 13 = 0.5716699660851172
Значение в момент 14 = 0.6043677771171636
Значение в момент 15 = 0.6351489523872873
Значение в момент 16 = 0.6640367702678489
Значение в момент 17 = 0.6910694698329307
Значение в момент 18 = 0.7162978701990245
Значение в момент 19 = 0.7397830512740043
Значение в момент 20 = 0.7615941559557649
Значение в момент 21 = 0.7818063576087741
Значение в момент 22 = 0.8004990217606297
Значение в момент 23 = 0.8177540779702878
Значение в момент 24 = 0.8336546070121553
Значение в момент 25 = 0.8482836399575129
Значение в момент 26 = 0.8617231593133063
Значение в момент 27 = 0.874053287886007
Значение в момент 28 = 0.8853516482022625
Значение в момент 29 = 0.8956928738431645
Значение в момент 30 = 0.9051482536448664
Значение в момент 31 = 0.9137854901178277
Значение в момент 32 = 0.9216685544064713
Значение в момент 33 = 0.9288576214547277
Значение в момент 34 = 0.935409070603099
Значение в момент 35 = 0.9413755384972874
Значение в момент 36 = 0.9468060128462683
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
pylab.plot(sps2, label = 'Сигнал на выходе')
[<matplotlib.lines.Line2D object at 0x0000023CE271BC50>]
pylab.show()
```
![график2](ris2.png)
## 4.3 Цикл определения, является ли число простым.
```py
chislo = 267
kandidat = chislo//2
while kandidat > 1:
if chislo % kandidat == 0:
print(chislo, 'имеет множитель', kandidat)
break
kandidat -= 1
else:
print(chislo, 'Является простым!')
267 имеет множитель 89
```
Дополнение:
```py
chislo=list(range(250,301))
for i in chislo:
kandidat =i // 2
while kandidat > 1:
if i%kandidat == 0:
print(i, ' имеет множитель ', kandidat)
break
kandidat -= 1
else:
print(i, ' является простым!')
250 имеет множитель 125
251 является простым!
252 имеет множитель 126
253 имеет множитель 23
254 имеет множитель 127
255 имеет множитель 85
256 имеет множитель 128
257 является простым!
258 имеет множитель 129
259 имеет множитель 37
260 имеет множитель 130
261 имеет множитель 87
262 имеет множитель 131
263 является простым!
264 имеет множитель 132
265 имеет множитель 53
266 имеет множитель 133
267 имеет множитель 89
268 имеет множитель 134
269 является простым!
270 имеет множитель 135
271 является простым!
272 имеет множитель 136
273 имеет множитель 91
274 имеет множитель 137
275 имеет множитель 55
276 имеет множитель 138
277 является простым!
278 имеет множитель 139
279 имеет множитель 93
280 имеет множитель 140
281 является простым!
282 имеет множитель 141
283 является простым!
284 имеет множитель 142
285 имеет множитель 95
286 имеет множитель 143
287 имеет множитель 41
288 имеет множитель 144
289 имеет множитель 17
290 имеет множитель 145
291 имеет множитель 97
292 имеет множитель 146
293 является простым!
294 имеет множитель 147
295 имеет множитель 59
296 имеет множитель 148
297 имеет множитель 99
298 имеет множитель 149
299 имеет множитель 23
300 имеет множитель 150
```

Двоичные данные
TEMA5/ris1.png Обычный файл

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

После

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

Двоичные данные
TEMA5/ris2.png Обычный файл

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

После

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

119
TEMA5/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,119 @@
# Общее контрольное задание по теме 5
Соловьёва Екатерина, А-01-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
•Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
•Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
•Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
# 1.
```py
import string
strk = 'Winter is coming'
for i in strk.lower():
n = string.ascii_lowercase.find(i)
if n >= 0:
print(f'Порядковый номер буквы {i} в английском алфавите: {n+1}')
Порядковый номер буквы w в английском алфавите: 23
Порядковый номер буквы i в английском алфавите: 9
Порядковый номер буквы n в английском алфавите: 14
Порядковый номер буквы t в английском алфавите: 20
Порядковый номер буквы e в английском алфавите: 5
Порядковый номер буквы r в английском алфавите: 18
Порядковый номер буквы i в английском алфавите: 9
Порядковый номер буквы s в английском алфавите: 19
Порядковый номер буквы c в английском алфавите: 3
Порядковый номер буквы o в английском алфавите: 15
Порядковый номер буквы m в английском алфавите: 13
Порядковый номер буквы i в английском алфавите: 9
Порядковый номер буквы n в английском алфавите: 14
Порядковый номер буквы g в английском алфавите: 7
```
# 2.
```py
spis = ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
if val in spis:
print(f'{val} есть в списке')
else:
print(f'{val} нет в списке')
список есть в списке
valu = 'кот'
if valu in spis:
print(f'{valu} есть в списке')
else:
print(f'{valu} нет в списке')
кот нет в списке
```
# 3.
```py
stud_spis = ['Лыкова', 'Соловьёва', 'Коваленко','Голощапов']
stud_ocen =[4.9, 4.4, 4.6, 4.8]
stud_spis2 = ['Соловьёва', 'Голощапов', 'Лыкова', 'Коваленко']
stud_ocen2 = [4.3, 4.8, 4.2, 4.9]
nam = input('Введите фамилию студента:')
if nam in stud_spis and stud_spis2:
print(f'Средний балл за летнюю сессию: ', stud_ocen[stud_spis.index(nam)])
print(f'Средний балл за зимнюю сессию: ', stud_ocen2[stud_spis2.index(nam)])
else:
print(f'Студент отсутствует в списке')
Введите фамилию студента:Соловьёва
Средний балл за летнюю сессию: 4.4
Средний балл за зимнюю сессию: 4.3
Введите фамилию студента:Цветкова
Студент отсутствует в списке
```

33
TEMA5/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,33 @@
# Индивидуальное контрольное задание по теме 5
Соловьёва Екатерина, А-01-23
## Задание
11. Создайте символьную строку с текстом: «я, великий и могучий юноша-вождь с мечом и щи-том захватил и объединил эфесское царство». Напишите инструкции, позволяющие определить, каких букв русского алфавита нет в этой строке.
## Решение
```py
stroka = 'я, великий и могучий юноша-вождь с мечом и щитом захватил и объединил эфесское царство'
RusAlph = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
found_letters = set()
for x in stroka:
if x in RusAlph:
found_letters.add(x)
missing_letters = []
for i in RusAlph:
if i not in found_letters:
missing_letters.append(i)
print(f'Буквы, которых нет в строке: {missing_letters}')
Буквы, которых нет в строке: ['ё', 'п', 'ы']
```

11
TEMA6/4.5.py Обычный файл
Просмотреть файл

@@ -0,0 +1,11 @@
sps=list(range(1,13))
fp2=open('zapis3.txt','w')
fp2.write(str(sps[:4])+'\n')
fp2.write(str(sps[4:8])+'\n')
fp2.write(str(sps[8:])+'\n')
fp2.close()

8
TEMA6/4.6.py Обычный файл
Просмотреть файл

@@ -0,0 +1,8 @@
sps1=[]
fp=open('zapis3.txt')
for stroka in fp:
stroka=stroka.rstrip('\n')
stroka=stroka.replace('[','')
stroka=stroka.replace(']','')
sps1=sps1+stroka.split(',')
fp.close()

4
TEMA6/4.7.py Обычный файл
Просмотреть файл

@@ -0,0 +1,4 @@
fp = open('zapis3.txt', 'r')
lines = fp.readlines()
print("readlines():", lines)
fp.close()

22
TEMA6/4.9.py Обычный файл
Просмотреть файл

@@ -0,0 +1,22 @@
import pickle #это модуль в Python для сериализации и десериализации объектов. Он преобразует объекты Python в поток байтов (сериализация) и обратно (десериализация)
mnoz1={'pen','book','pen','iPhone','table','book'} #если подать на вывод, будет только 'book', 'iPhone', 'table', 'pen'
fp = open('zapis6.mnz','wb')
pickle.dump(mnoz1, fp) #функция dump принимает объект и сериализует в поток байтов
fp.close()
fp = open('zapis6.mnz', 'rb')
mnoz2 = pickle.load(fp); mnoz2 #метод чтения объекта из бинарного файла
{'pen', 'iPhone', 'book', 'table'} #содержимое совпадает, но в разном порядке
fp.close()
fp = open('zapis7.2ob', 'wb')
pickle.dump(mnoz1, fp)
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
pickle.dump(sps3,fp)
fp.close()
fp = open('zapis7.2ob', 'rb')
obj1 = pickle.load(fp); obj1 #читает первый
obj2 = pickle.load(fp); obj2 #читает второй

26
TEMA6/5.py Обычный файл
Просмотреть файл

@@ -0,0 +1,26 @@
import sys
vr_out=sys.stdout #Запоминаем текущий поток вывода
fc=open('Stroka.txt','w') #Откроем файл вывода
sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
sys.stdout=vr_out #Восстановление текущего потока
print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
fc.close()
tmp_in = sys.stdin
fd = open("Stroka.txt", "r")
sys.stdin = fd
sys.stdin
while True:
try:
line = input()
print(line)
except EOFError:
break
fd.close()
sys.stdin = tmp_in

0
TEMA6/OPLATA.dbf Обычный файл
Просмотреть файл

1
TEMA6/Stroka.txt Обычный файл
Просмотреть файл

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

Двоичные данные
TEMA6/name.bin Обычный файл

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

Двоичные данные
TEMA6/name1.bin Обычный файл

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

331
TEMA6/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,331 @@
# Отчёт по теме 6
Соловьёва Екатерина А-01-23
## 1 Запуск интерактивной оболочки IDLE
```py
import os
os.chdir('C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA6')
```
## 2 вывод данных на экран дисплея
## 2.1 Вывод в командной строке
```py
stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'
```
## 2.2 Вывод с использованием функции print
Вывод информации на экран. Можно использовать и в теле функции и в командной строке
```py
fff=234.5;gg='Значение температуры = '
print(gg, fff)
Значение температуры = 234.5
print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
print()
print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
* Тройные кавычки сохраняют структуру многострочного текста
## 2.3 Вывод с использованием метода write объекта sys.stdout
```py
import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14
```
## 2 Ввод данных с клавиатуры
```py
Введите пароль:1234
print(psw)
1234
type(psw)
<class 'str'>
while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
print(znach)
21.6
import math
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4 Ввод-вывод при работе с файлами
## 4.1 Функции для работы с путем к файлу
```py
import os
os.chdir('C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA6')
solovyova=os.getcwd()#показывает какой рабочий каталог установлен в текущий момент времени
print(solovyova)
C:\Users\Ekaterina\OneDrive\Desktop\Solovyova\python-labs\TEMA6
os.mkdir('a')#cоздает новую директорию
os.listdir()#возвращает список имён всех файлов и папок в указанной директории
['.gitkeep', 'a', 'report.md', 'task.md']
os.path.isdir('a')#проверяет, является ли указанный путь директорией, возвращает True, если путь существует и является директорией
True
os.rmdir('a')#удаляет директорию
os.listdir()
['.gitkeep', 'report.md', 'task.md']
fil=os.path.abspath("oplata.dbf")
print(fil)
C:\Users\Ekaterina\OneDrive\Desktop\Solovyova\python-labs\TEMA6\oplata.dbf
fil2=os.path.abspath("report.md")
print(fil2)
C:\Users\Ekaterina\OneDrive\Desktop\Solovyova\python-labs\TEMA6\report.md
drkt=os.path.dirname(fil) #функция os.path.dirname(fil) возвращает директорию (папку) из указанного пути, убирая последний компонент (обычно имя файла)
print(drkt)
C:\Users\Ekaterina\OneDrive\Desktop\Solovyova\python-labs\TEMA6
os.path.basename(fil)
'oplata.dbf'
os.path.split(fil)
('C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA6', 'oplata.dbf')
os.path.exists("report.md")
True
os.path.isfile('TEMA6')
False
os.path.isfile(fil)#проверяет наличие файла в рабочем каталоге
True
os.path.isfile(os.path.dirname(fil)+'fil1.txt')#проверяет, что по указанному пути существует файл
False
```
## 4.2. Общая схема работы с файлом
Для обмена данными с файлом необходимо выполнить следующие операции:
* Открытие файла с указанием его имени и цели (чтение, запись, добавление данных);
* Выполнение одной или нескольких операций обмена данными с файлом;
* Закрытие файла.
## 4.3. Открытие файла для записи или чтения данных – функция open.
```py
fp=open('zapis1.txt','w')
type(fp);dir(fp)
<class '_io.TextIOWrapper'>
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
```
Для второго аргумента «mode=…» могут быть заданы следующие значения:
* w – запись с созданием нового файла или перезапись существующего файла,
* w+ - чтение и запись/перезапись файла,
* r – только чтение (это значение - по умолчанию),
* r+ - чтение и/или запись в существующий файл,
* a – запись в конец существующего файла или, если его нет, запись с созданием файла,
* a+ - то же, что и в «a», но с возможностью чтения из файла.
В зависимости от значения этого аргумента тип создаваемой файловой переменной может быть разным.
При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить сим-вол «b».
```py
fp1=open(drkt+'\\zapis2.bin',mode='wb+')
type(fp1)
<class '_io.BufferedRandom'>
```
## 4.4. Закрытие файла.
```py
fp.close();fp1.close()
```
## 4.5 Запись информации в файл с помощью метода write
```py
sps = list(range(1,13))
fp2=open('zapis3.txt','w')
fp2.write(str(sps[:4])+'\n')
13
fp2.write(str(sps[4:8])+'\n')
13
fp2.write(str(sps[8:])+'\n')
16
fp2.close()
```
Содержимое файла приведено ниже
```txt
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
```
Попытка 1
```py
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
fp3=open('zapis4.txt','w')
for i in range(len(sps3)):
stroka4=sps3[i][0]+' '+str(sps3[i][1])
fp3.write(stroka4)
fp3.close()
```
Содержимое текстового файла:
```txt
Иванов И. 1Петров П. 2Сидоров С. 3
```
Попытка 2
```py
gh = open('zapis5.txt','w')
for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
gh.close()
```
Содержимое текстового файла:
```txt
Иванов И. 1
Петров П. 2
Сидоров С. 3
```
## 4.6 Первый способ чтения информации из текстового файла
```py
sps1=[]
fp=open('zapis3.txt')
for stroka in fp:
stroka=stroka.rstrip('\n')
stroka=stroka.replace('[','')
stroka=stroka.replace(']','')
sps1=sps1+stroka.split(',')#Разбивает строку на части по разделителю , и возвращает список
fp.close()
print(sps1)
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
print(sps)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
## 4.7 Чтение информации из файла с помощью метода read
```py
fp = open('zapis3.txt')
stroka1 = fp.read(12)
stroka2 = fp.read()
fp.close()
print(stroka1)
[1, 2, 3, 4]
print(stroka2)
[5, 6, 7, 8]
[9, 10, 11, 12]
```
## 4.8 Чтение информации с помощью методов readline и readlines
```py
fp = open('zapis3.txt', 'r')
line1 = fp.readline() # читает 1ую строку
line2 = fp.readline() # читает 2ую строку
line3 = fp.readline() # читает 3ую строку
print("readline():")
print("Строка 1:", repr(line1))
print("Строка 2:", repr(line2))
print("Строка 3:", repr(line3))
fp.close()
readline():
Строка 1: '[1, 2, 3, 4]\n'
Строка 2: '[5, 6, 7, 8]\n'
Строка 3: '[9, 10, 11, 12]\n'
fp = open('zapis3.txt', 'r')
lines = fp.readlines() # читает все строки в список
print("readlines():", lines)
fp.close()
readlines(): ['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
```
## 4.9 Ввод-вывод объектов с использованием функций из модуля pickle
```py
import pickle
mnoz1={'pen','book','pen','iPhone','table','book'}
fp = open('zapis6.mnz','wb')
pickle.dump(mnoz1,fp)
fp.close()
```
```txt
Содержание файла zapis6.mnz: 耄锣 鐨谆楐桯湥钌մ慢汥钌Ͱ敮钌Ѣ潯殔逮
```
```py
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp)
fp.close()
mnoz2
{'book', 'iPhone', 'pen', 'table'}
mnoz1 == mnoz2
True
```
Множество в Python автоматически удаляет все дубликаты и не сохраняет порядок элементов, поэтому mnoz2 не совпадает с тем, что было задано при создании mnoz1
```py
fp = open('zapis7.2ob','wb')
pickle.dump(mnoz1,fp)
pickle.dump(sps3,fp)
fp.close()
fp=open('zapis7.2ob','rb')
obj1=pickle.load(fp)
obj2=pickle.load(fp)
fp.close()
print(obj1,obj2)
{'book', 'iPhone', 'pen', 'table'} [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
print(mnoz1,sps3)
{'iPhone', 'table', 'pen', 'book'} [['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
## 5 Перенаправление потоков ввода и вывода данных
```py
import sys #это импорт встроенного модуля sys, который предоставляет доступ к системным параметрам и функциям, связанным с интерпретатором Python
vr_out = sys.stdout #текущий поток вывода
fc = open('Stroka.txt', 'w') #файл вывода
sys.stdout = fc #перенаправление стандартного потока вывода в файл
print('запись строки в файл')
sys.stdout = vr_out #восстановление текущего потока
print('запись строки на экран')
запись строки на экран
fc.close()
tmp_in = sys.stdin
fd = open("Stroka.txt", "r")
sys.stdin = fd
sys.stdin
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'>
while True:
try:
line = input()
print(line)
except EOFError:
break
запись строки в файл
fd.close()
sys.stdin = tmp_in
```

61
TEMA6/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,61 @@
# Общее контрольное задание по теме 6
Соловьёва Екатерина, А-01-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
* Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
* Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
* Записывается кортеж в бинарный файл.
* Записывается в этот же файл список и закрывается файл.
* Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
* Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
* Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
```py
import pickle
import random
kort = tuple(str(random.randint(6, 56)) for _ in range(125))
spis = ['Соловьёва', 'Лыкова', 'Филиппова', 'Лазарев', 'Коваленко']
fp = open('zapis8.mnz','wb')
pickle.dump(kort,fp)
pickle.dump(spis,fp)
fp.close()
fp = open('zapis8.mnz','rb')
obj1 = pickle.load(fp)
obj2 = pickle.load(fp)
if obj1 == kort:
print('Объекты совпадают')
else: print('Объекты не совпадают')
if obj2 == spis:
print('Объекты совпадают')
else: print('Объекты не совпадают')
lists = {}
for i in range(0, 125, 5):
lists[f'list{i//5 + 1}'] = list(obj1[i:i+5])
```
Вывод программы:
```py
Объекты совпадают
Объекты совпадают
```

26
TEMA6/task.py Обычный файл
Просмотреть файл

@@ -0,0 +1,26 @@
import pickle
import random
kort = tuple(str(random.randint(6, 56)) for _ in range(125))
spis = ['Соловьёва', 'Лыкова', 'Филиппова', 'Лазарев', 'Коваленко']
fp = open('zapis8.mnz','wb')
pickle.dump(kort,fp)
pickle.dump(spis,fp)
fp.close()
fp = open('zapis8.mnz','rb')
obj1 = pickle.load(fp)
obj2 = pickle.load(fp)
if obj1 == kort:
print('Объекты совпадают')
else: print('Объекты не совпадают')
if obj2 == spis:
print('Объекты совпадают')
else: print('Объекты не совпадают')
lists = {}
for i in range(0, 125, 5):
lists[f'list{i//5 + 1}'] = list(obj1[i:i+5])

76
TEMA6/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,76 @@
# Индивидуальное контрольное задание по теме 6
Соловьёва Екатерина, А-01-23
## Задание
M2_3
1) Создайте список с 5 фамилиями сотрудников некоторой фирмы (фамилии придумайте сами). Создайте кортеж с 5 числовыми элементами - окладами сотрудников из списка.
2) Запросите у пользователя и введите символьную строку с названием фирмы (латиницей). Удалите из названия пробелы.
3) Создайте словарь с именем - названием фирмы, ключами - фамилиями сотрудников из списка и значениями - их окладами из кортежа. Отобразите словарь.
4) Рассчитайте среднее значение оклада сотрудников фирмы и отобразите с заголовком.
5) Запишите список, кортеж и словарь в бинарный файл с именем - названием фирмы и расширением '.bin'.
## Решение
```py
import pickle
spis = ["Бушманов", "Подольский", "Жалнин", "Голощапов", "Таболин"]
kort = (5000, 200000, 120000, 70000, 60000)
company = input(" Введите название фирмы (латиницей): ")
company = company.replace(' ', '')
print(" Название фирмы:", company)
globals()[company] = dict(zip(spis, kort))
print("Словарь фирмы:")
print(globals()[company])
average_salary = sum(kort) / len(kort)
print(f" Средний оклад сотрудников: {average_salary:.2f} рублей")
filename = f"{company}.bin"
with open(filename, 'wb') as fp:
pickle.dump(spis, fp)
pickle.dump(kort, fp)
pickle.dump(globals()[company], fp)
print(f" Данные сохранены в файл: {filename}")
```
## Вывод
```py
Введите название фирмы (латиницей): name1
Название фирмы: name1
Словарь фирмы:
{'name1': {'Бушманов': 5000, 'Подольский': 200000, 'Жалнин': 120000, 'Голощапов': 70000, 'Таболин': 60000}}
Средний оклад сотрудников: 91000.00 рублей
Данные сохранены в файл: name1.bin
```

29
TEMA6/test.py Обычный файл
Просмотреть файл

@@ -0,0 +1,29 @@
import pickle
spis = ["Бушманов", "Подольский", "Жалнин", "Голощапов", "Таболин"]
kort = (5000, 200000, 120000, 70000, 60000)
company = input(" Введите название фирмы (латиницей): ")
company = company.replace(' ', '')
print(" Название фирмы:", company)
# Создаем словарь с именем компании как ключом
company_dict = {
company: dict(zip(spis, kort))
}
print("Словарь фирмы:")
print(company_dict)
average_salary = sum(kort) / len(kort)
print(f" Средний оклад сотрудников: {average_salary:.2f} рублей")
# Создаем имя файла из названия компании
filename = f"{company}.bin"
fp = open(filename, 'wb')
pickle.dump(spis, fp)
pickle.dump(kort, fp)
pickle.dump(company_dict, fp)
fp.close()
print(f" Данные сохранены в файл: {filename}")

0
TEMA6/zapis1.txt Обычный файл
Просмотреть файл

0
TEMA6/zapis2.bin Обычный файл
Просмотреть файл

3
TEMA6/zapis3.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

1
TEMA6/zapis4.txt Обычный файл
Просмотреть файл

@@ -0,0 +1 @@
Иванов И. 1Петров П. 2Сидоров С. 3

3
TEMA6/zapis5.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
Иванов И. 1
Петров П. 2
Сидоров С. 3

Двоичные данные
TEMA6/zapis6.mnz Обычный файл

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

Двоичные данные
TEMA6/zapis7.2ob Обычный файл

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

Двоичные данные
TEMA6/zapis8.mnz Обычный файл

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

569
TEMA7/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,569 @@
# Отчёт по Теме 7
Соловьёва Екатерина, А-01-23
# 1. Запуск интерактивной оболочки IDLE
# 2. Создание пользовательской функции
Создание функции предполагает выполнение трех операций: формирование функции, ее сохранение и использование.
В общем виде функция в языке Python представляется так:
def <Имя функции>([<Список аргументов >]):
[<отступы>"""<Комментарий по назначению функции>"""]
<отступы><Блок инструкций – тело функции>
[<отступы>return <Значение или вычисляемое выражение>]
# 2.1 Функция без аргументов
```py
def uspeh():
"""Подтверждение успеха операции"""
print('Выполнено успешно!')
uspeh()
Выполнено успешно!
type(uspeh)
<class 'function'>
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh']
help(uspeh)
Help on function uspeh in module __main__:
uspeh()
Подтверждение успеха операции
```
Вызов help(uspeh) показал справку по функции из модуля __main__ с документационной строкой "Подтверждение успеха операции". Это описание, указанное в тройных кавычках при создании функции, поясняет её назначение
## 2.2 Функция с аргументами
```py
def sravnenie(a,b):
"""Сравнение a и b"""
if a>b:
print(a,' больше ',b)
elif a<b:
print(a, ' меньше ',b)
else:
print(a, ' равно ',b)
n,m=16,5;sravnenie(n,m)
16 больше 5
n,m='16','5';sravnenie(n,m)
16 меньше 5
ord('1')
49
ord('5')
53
```
Строка '16' считается "меньше" строки '5', потому что сравниваются первые символы: '1' и '5', а символ '1' в таблице Unicode/ASCII имеет меньший код, чем '5'. Сравнение прекращается на первом различающемся символе
## 2.3 Пример функции, содержащей return.
```py
def logistfun(b,a):
"""Вычисление логистической функции"""
import math
return a/(1+math.exp(-b))
v,w=1,0.7;z=logistfun(w,v)
z
0.6681877721681662
```
Использует return вместо print - результат "возвращается", а не выводится
## 2.4 Сложение для разных типов аргументов
```py
def slozh(a1,a2,a3,a4):
""" Сложение значений четырех аргументов"""
return a1+a2+a3+a4
slozh(1,2,3,4)
10
slozh('1','2','3','4')
'1234'
b1=[1,2];b2=[-1,-2]
b3=[0,2];b4=[-1,-1]
q=slozh(b1,b2,b3,b4)
q
[1, 2, -1, -2, 0, 2, -1, -1]
kort1 = (1, 2); kort2 = (3, 4); kort3 = (5,6); kort4 = (7, 8)
slozh(kort1, kort2, kort3, kort4)
(1, 2, 3, 4, 5, 6, 7, 8)
dict1 = {'a': 1}; dict2 = {'b': 2}; dict3 = {'c': 3}; dict4 = {'d': 4}
slozh(dict1, dict2, dict3, dict4)
Traceback (most recent call last):
File "<pyshell#40>", line 1, in <module>
slozh(dict1, dict2, dict3, dict4)
File "<pyshell#26>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
mnoz = slozh({1,3}, {6,9}, {"zxcv"}, {0,9})
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
mnoz = slozh({1,3}, {6,9}, {"zxcv"}, {0,9})
File "<pyshell#26>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'set' and 'set'
```
## 2.5 Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y:
```py
def inerz(x,T,ypred):
""" Модель устройства с памятью:
x- текущее значение вх.сигнала,
T -постоянная времени,
ypred - предыдущее значение выхода устройства"""
y=(x+T*ypred)/(T+1)
return y
sps=[0]+[1]*100
spsy=[]
TT=20
yy=0
for xx in sps:
yy=inerz(xx,TT,yy)
spsy.append(yy)
import matplotlib.pyplot as plt
plt.show()
plt.plot(spsy)
[<matplotlib.lines.Line2D object at 0x000002977187AC10>]
plt.show()```
![График](Рис1.png)
```
# 3. Функции как объекты
## 3.1 Получение списка атрибутов объекта-функции
```py
dir(inerz)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
inerz.__doc__
'Модель устройства с памятью:\nx- текущее значение вх.сигнала,\nT -постоянная времени,\nypred - предыдущее значение выхода устройства'
help(inerz)
Help on function inerz in module __main__:
inerz(x, T, ypred)
Модель устройства с памятью:
x- текущее значение вх.сигнала,
T -постоянная времени,
ypred - предыдущее значение выхода устройства
```
## 3.2 Сохранение ссылки на объект-функции в другой переменной
```py
fnkt=sravnenie
v=16
fnkt(v,23)
16 меньше 23
```
Выполнена операция присваивания функции переменной, а затем вызов функции через эту переменную
## 3.3 Возможность альтернативного определения функции в программе
```py
typ_fun=8
if typ_fun==1:
def func():
print('Функция 1')
else:
def func():
print('Функция 2')
func()
Функция 2
```
Условие typ_fun == 1 ложно, поэтому определяется и вызывается функция из блока else
# 4. Аргументы функции
## 4.1 Возможность использования функции в качестве аргумента другой функции
```py
def fun_arg(fff,a,b,c):
"""fff-имя функции, используемой
в качестве аргумента функции fun_arg"""
return a+fff(c,b)
zz=fun_arg(logistfun,-3,1,0.7)
zz
-2.3318122278318336
```
Функция fun_arg принимает другую функцию как аргумент (fff) и использует её в своих вычислениях
## 4.2 Обязательные и необязательные аргументы
```py
def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1
"""Вычисление логистической функции"""
import math
return b/(1+math.exp(-a))
logistfun(0.7) #Вычисление со значением b по умолчанию
0.6681877721681662
logistfun(0.7,2) #Вычисление с заданным значением b
1.3363755443363323
```
## 4.3 Возможность обращения к функции с произвольным (непозиционным) расположением аргументов.
При этом надо в обращении к функции указывать имена аргументов.
```py
logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами
0.34498724056380625
```
используются именованные аргументы
## 4.4 Пример со значениями аргументов функции, содержащимися в списке или кортеже
```py
b1234=[b1,b2,b3,b4] # Список списков из п.2.4
qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку
qq
[1, 2, -1, -2, 0, 2, -1, -1]
```
## 4.5 Пример со значениями аргументов функции, содержащимися в словаре
```py
dic4={"a1":1,"a2":2,"a3":3,"a4":4}
qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки
qqq
10
```
## 4.6 Смешанные ссылки
```py
e1=(-1,6);dd2={'a3':3,'a4':9}
qqqq=slozh(*e1,**dd2)
qqqq #-1 + 6 + 3 + 9 = 17
17
```
## 4.7 Переменное число аргументов у функции
```py
def func4(*kort7):
"""Произвольное число аргументов в составе кортежа"""
smm=0
for elt in kort7:
smm+=elt
return smm
func4(-1,2) #Обращение к функции с 2 аргументами
1
func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами
10
```
a = -1 (первый позиционный)
b = 2 (второй позиционный, переопределил значение по умолчанию 7)
*kort7 = (0, 3, 6) (все остальные аргументы в кортеж)
Подобным же образом в списке аргументов функции также можно использовать словарь, предварив его имя двумя звездочками
```py
def func5(a,b=7,**dict):
"""Словарь"""
smm=0
smm = sum (dict.values())
return a*smm+b
func5(-1,2,aa=0,bb=3,cc=6)
-7
```
## 4.9 Изменение значений объектов, используемых в качестве аргументов функции.
Такое изменение возможно только у объектов изменяемого типа
```py
a=90
def func3(b):
b=5*b+67
func3(a)
a
```
значение переменной а не поменялось
Пример со списком:
```py
def func2(sps):
sps[1]=99
func2(sps1) # передаем ссылку на список
print(sps1)
[1, 99, 3, 4]
```
Изменяемые типы (списки, словари, множества) передаются по ссылке
Пример с кортежем:
```py
kort=(1,2,3,4)
func2(kort)
Traceback (most recent call last):
File "<pyshell#138>", line 1, in <module>
func2(kort)
File "<pyshell#134>", line 2, in func2
sps[1]=99
TypeError: 'tuple' object does not support item assignment
```
# 5. Специальные типы пользовательских функций
## 5.1 Анонимные функции
Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени, определяемые по следующей схеме:
lambda [<Аргумент1>[,<Аргумент2>,…]]:<Возвращаемое значение или выражение>
Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту.
```py
import math
anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов
anfun1() # Обращение к объекту-функции
2.7362852774480286
anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами
anfun2(17,234)
19.369215857410143
anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом
anfun3(100)
102.36921585741014
```
## 5.2 Функции-генераторы
Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение.
Данный оператор в отличие от return не останавливает полностью выполнение программы. Когда выполнение функции возобновляется после yield, оно продолжается с того места, где было приостановлено, до следующего оператора yield (или до конца функции).
```py
def func5(diap,shag):
""" Итератор, возвращающий значения
из диапазона от 1 до diap с шагом shag"""
for j in range(1,diap+1,shag):
yield j
for mm in func5(7,3):
print(mm)
1
4
7
alp=func5(7,3)
print(alp.__next__())
1
print(alp.__next__())
4
print(alp.__next__())
7
print(alp.__next__())
Traceback (most recent call last):
File "<pyshell#158>", line 1, in <module>
print(alp.__next__())
StopIteration
```
Генераторы "запоминают" своё состояние, но когда значения заканчиваются, они сигнализируют об этом через исключение StopIteration
func5 с yield идеально подходит для обработки больших диапазонов без нагрузки на память
# 6. Локализация объектов в функциях
По отношению к функции все объекты подразделяются на локальные и глобальные. Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Глобальные – это те объекты, значения которых заданы вне функции.
Локализация может быть переопределена путем прямого объявления объектов как глобальных с помощью дескриптора global.
## 6.1 Примеры на локализацию объектов
Пример 1. Одноименные локальный и глобальный объекты:
```py
glb=10
def func7(arg):
loc1=15
glb=8
return loc1*arg
res=func7(glb)
res
150
glb
10
```
В функции использовалась глобальная переменная glb и локальная переменная loc1
Глобальная переменная glb не поменялась
Пример 2. Ошибка в использовании локального объекта.
```py
def func8(arg):
loc1=15
print(glb)
glb=8
return loc1*arg
res=func8(glb)
Traceback (most recent call last):
File "<pyshell#165>", line 1, in <module>
res=func8(glb)
File "<pyshell#164>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
```
Ошибка произошла потому что при выполнении print(glb) интерпретатор пытается найти локальную glb, но локальная glb еще не определена (определение на следующей строке)
Пример 3. Переопределение локализации объекта.
```py
glb=11
def func7(arg):
loc1=15
global glb
print(glb)
glb=8
return loc1*arg
res=func7(glb)
11
glb
8
```
Здесь мы прямо объявили переменную glb как глобальную, поэтому она изменилась
## 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins
Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций.
```py
globals().keys() #Перечень глобальных объектов
globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kort1', 'kort2', 'kort3', 'kort4', 'dict1', 'dict2', 'dict3', 'dict4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
locals().keys() #Перечень локальных объектов
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'n', 'm', 'sravnenie', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kort1', 'kort2', 'kort3', 'kort4', 'dict1', 'dict2', 'dict3', 'dict4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'plt', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'func5', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'math', 'anfun2', 'anfun3', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
```
Различий нет, потому что команды выполнены в глобальной области видимости, где globals() и locals() ссылаются на один и тот же словарь. Различия появляются только при вызове locals() внутри функций или методов.
```py
def func8(arg):
loc1=15
glb=8
print(globals().keys()) #Перечень глобальных объектов «изнутри» функции
print(locals().keys()) #Перечень локальных объектов «изнутри» функции
return loc1*arg
hh=func8(glb)
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', 'func8', 'glb'])# Глобальное glb
dict_keys(['arg', 'loc1', 'glb'])# Локальное glb
'glb' in globals().keys()
True
```
locals() внутри функции показывает только её внутренние переменные, а globals() показывает все объекты модуля.
## 6.3 Локализация объектов при использовании вложенных функций
```py
def func9(arg2,arg3):
def func9_1(arg1):
loc1=15
glb1=8
print('glob_func9_1:',globals().keys())
print('locl_func9_1:',locals().keys())
return loc1*arg1
loc1=5
glb=func9_1(loc1)
print('loc_func9:',locals().keys())
print('glob_func9:',globals().keys())
return arg2+arg3*glb
kk=func9(10,1)
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', 'func9'])
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1'])
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb'])
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', '__file__', 'func9'])
```
Вложенная функция может использовать переменные внешней функции, но только если они явно переданы как аргументы
## 6.4 Моделирование системы
Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала.
Реальный двигатель: последовательное соединение усилителя с коэффициентом усиления k1,интегратора: y(t)=x(t)+y(t-1), и инерционного звена: y(t)=(x(t)+T*y(t-1)) / (T+1) с постоянной времени Т.
Тахогенератор: последовательное соединение усилителя с коэффициентом усиления k2 и интегратора: y(t)=x(t)+y(t-1).
Нелинейное звено типа «зона нечувствительности»: y=0 при -xm≤ x ≤xm, y=x-xm при x>xm, y=x+xm при x<-xm.
Таким образом, система характеризуется параметрами: k1, T, k2, xm. Входной сигнал характеризуется параметрами: A (амплитуда синусоиды) и F (период синусоиды).
Еще один параметр задачи : N – время (число тактов) подачи сигнала.
```py
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))
print(vhod)
[0.0, 0.6038955602659801, 1.1830675653399556, 1.713804645284377, 2.17437836168736, 2.5459327724842526, 2.813256396441241, 2.9654049729843344, 2.9961495215131584, 2.904231356598613]```
![График2](Figure_2.png)
Создание функций реализующие компоненты системы
```py
def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя
yp=kk1*xtt #усилитель
yti1=yp+yti1 #Интегратор
ytin1=(yti1+TT*ytin1)/(TT+1)
return [yti1,ytin1]
def tahogen(xtt,kk2,yti2):
#Модель тахогенератора
yp=kk2*xtt #усилитель
yti2=yp+yti2 #интегратор
return yti2
def nechus(xtt,gran):
#зона нечувствит
if xtt<gran and xtt>(-gran):
ytt=0
elif xtt>=gran:
ytt=xtt-gran
elif xtt<=(-gran):
ytt=xtt+gran
return ytt
```
Реализуем соединение компонент в соответствии с заданием
```py
yi1=0;yin1=0;yi2=0
vyhod=[]
for xt in vhod:
xt1=xt-yi2 #отрицательная обратная связь
[yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1)
yi2=tahogen(yin1,k2,yi2)
yt=nechus(yin1,Xm)
vyhod.append(yt)
print('y=',vyhod)
y= [0.0, 0.0575138628824743, 0.19757451809698162, 0.37271445071909315, 0.44764431066344834, 0.24935818305562138, -0.3024162461562951, -1.0323481238173855, -1.4374313649904746, -0.8573979371237693]
```
# 7. Завершение сеанса работы с IDLE

84
TEMA7/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,84 @@
# Общее контрольное задание по теме 7
Соловьёва Екатерина, А-01-23
## Задание
* Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
* Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
* Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
## Решение
# 1.
```py
def del_signal (signal, T):
'''Расчет выхода y(t) для устройства задержки'''
output = []
for i in range(len(signal)):
if i<T:
output.append(0)
else:
output.append(signal[i-T])
return output
x=[1,0.5,3.6,4.5,1,2,0.5]
y = del_signal(x,2)
print(y)
[0, 0, 1, 0.5, 3.6, 4.5, 1]
```
# 2.
```py
import random
import matplotlib.pyplot as plt
def histogram(sample, number):
min_1 = min(sample)
max_1 = max(sample)
bins = (max_1 - min_1) / number # Ширина одного интервала
rows = [0] * number # Создание списка для подсчёта элементов в каждом интервале
intervals = [] # Список для хранения границ интервалов
for i in range(number):
lower = min_1 + i * bins
upper = min_1 + (i + 1) * bins
intervals.append((lower, upper))
for x in sample:
i = int((x - min_1) / bins) # Вычисление номера интервала для текущего элемента
if i == number:
i = number - 1
rows[i] += 1
print("Границы интервала | Число элементов")
for i in range(number):
lower, upper = intervals[i]
print(lower, "-", upper, " |", rows[i])
plt.hist(sample, number)
plt.xlabel('Значения выборки')
plt.ylabel('Число элементов')
plt.title('Гистограмма выборки')
plt.show()
return rows
data = [random.gauss(1, 20) for _ in range(10)]
histogram(data, 3)
Границы интервала | Число элементов
-41.93512946278788 - -17.371680704583262 | 1
-17.371680704583262 - 7.191768053621352 | 3
7.191768053621352 - 31.755216811825967 | 6
```
# 3.
```py
linreg = lambda b1, b2, x: b1 + b2 * x
b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
x_val = float(input("Введите значение x: "))
print(linreg(b1, b2, x_val))
Введите коэффициент b1 линейной регрессии: 3
Введите коэффициент b2 линейной регрессии: 4
Введите значение x: 5
23.0
```

357
TEMA7/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,357 @@
# Индивидуальное контрольное задание по теме 7
Соловьёва Екатерина, А-01-23
## Задание
Разработайте функцию с 3 аргументами: x, А и В, реализующую преобразование входного сигнала x по формуле:
$y=B$, если $x>A$;
$y= 2B\frac{x}{A}-B x^2 / A^2$ , если 0≤ x ≤ А;
$y= 2B * x/A +B*x^2 /A^2$ , если $-A≤ x <0;$
$y=-B$, если $x< -A$.
Создайте список со 100 значениями входного сигнала х – случайными, равномерно распределенными числами в диапазоне значений от -5 до 12. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при трех разных парах значений А и В. Записать результаты в текстовый файл в виде двух столбцов: $хi, yi$.
## Решение
```py
import random
def func(x, A, B):
if x > A:
return B
elif 0 <= x <= A:
return (2 * B * x / A) - (B * x**2 / A**2)
elif -A <= x < 0:
return (2 * B * x / A) + (B * x**2 / A**2)
else:
return -B
x_values = [random.uniform(-5, 12) for _ in range(100)]
params = [(5, 7), (3, 4), (8, 12)]
with open('test.txt', 'w', encoding='utf-8') as f:
for A, B in params:
f.write(f'\nПараметры: A = {A}, B = {B}\n')
f.write('xi yi\n')
f.write('----------------\n')
for x in x_values:
y = func(x, A, B)
f.write(f'{x:10.5f} {y:10.5f}\n')
```
## Вывод
```txt
Параметры: A = 5, B = 7
xi yi
----------------
5.86982 7.00000
10.60889 7.00000
4.06461 6.75501
5.29288 7.00000
10.15479 7.00000
3.86484 6.63920
0.47680 1.27140
-1.27013 -3.10467
-1.24129 -3.04419
-1.03170 -2.59073
-1.50325 -3.57637
6.95909 7.00000
1.03174 2.59082
1.91432 4.33400
6.86539 7.00000
10.89394 7.00000
3.61242 6.46090
7.85303 7.00000
-4.35477 -6.88343
-1.10787 -2.75836
8.88241 7.00000
-3.41076 -6.29281
2.60220 5.39016
5.28102 7.00000
-4.78747 -6.98735
-1.71943 -3.98660
6.26656 7.00000
10.65755 7.00000
-2.27517 -4.92108
9.47499 7.00000
-0.31369 -0.85077
7.62057 7.00000
6.96683 7.00000
8.14176 7.00000
11.97237 7.00000
10.89297 7.00000
2.48892 5.23446
6.69740 7.00000
-4.11167 -6.77904
4.94378 6.99912
-4.48180 -6.92481
7.27224 7.00000
-0.83065 -2.13263
1.01590 2.55555
6.91175 7.00000
10.08303 7.00000
3.60696 6.45664
0.72761 1.88906
2.82893 5.68021
7.15816 7.00000
6.46978 7.00000
3.33574 6.22447
7.04571 7.00000
2.60493 5.39382
6.93663 7.00000
2.92556 5.79507
10.45675 7.00000
9.22932 7.00000
7.40673 7.00000
1.40836 3.38804
11.95106 7.00000
-3.11935 -6.00968
6.61976 7.00000
-1.59679 -3.75709
2.39406 5.09855
8.98971 7.00000
2.01005 4.49685
-1.42513 -3.42169
1.91515 4.33544
4.75207 6.98279
-3.22786 -6.12067
2.18031 4.77382
6.95316 7.00000
-3.92956 -6.67917
-1.97791 -4.44276
7.95253 7.00000
9.86943 7.00000
-3.45314 -6.33002
2.13008 4.69379
-1.21212 -2.98255
8.50756 7.00000
1.85195 4.22513
3.75620 6.56683
4.47003 6.92136
11.09999 7.00000
-1.70654 -3.96287
11.73001 7.00000
1.90609 4.31977
-2.36144 -5.05063
0.04914 0.13690
3.82695 6.61471
6.12422 7.00000
2.32662 4.99884
9.35261 7.00000
8.06504 7.00000
2.97498 5.85181
4.38768 6.89502
4.20153 6.82148
4.19242 6.81739
-4.63619 -6.96294
Параметры: A = 3, B = 4
xi yi
----------------
5.86982 4.00000
10.60889 4.00000
4.06461 4.00000
5.29288 4.00000
10.15479 4.00000
3.86484 4.00000
0.47680 1.17044
-1.27013 -2.67003
-1.24129 -2.62531
-1.03170 -2.27813
-1.50325 -3.00433
6.95909 4.00000
1.03174 2.27821
1.91432 3.47613
6.86539 4.00000
10.89394 4.00000
3.61242 4.00000
7.85303 4.00000
-4.35477 -4.00000
-1.10787 -2.40881
8.88241 4.00000
-3.41076 -4.00000
2.60220 3.92967
5.28102 4.00000
-4.78747 -4.00000
-1.71943 -3.27117
6.26656 4.00000
10.65755 4.00000
-2.27517 -3.76650
9.47499 4.00000
-0.31369 -0.79276
7.62057 4.00000
6.96683 4.00000
8.14176 4.00000
11.97237 4.00000
10.89297 4.00000
2.48892 3.88391
6.69740 4.00000
-4.11167 -4.00000
4.94378 4.00000
-4.48180 -4.00000
7.27224 4.00000
-0.83065 -1.90841
1.01590 2.25038
6.91175 4.00000
10.08303 4.00000
3.60696 4.00000
0.72761 1.70499
2.82893 3.98699
7.15816 4.00000
6.46978 4.00000
3.33574 4.00000
7.04571 4.00000
2.60493 3.93063
6.93663 4.00000
2.92556 3.99754
10.45675 4.00000
9.22932 4.00000
7.40673 4.00000
1.40836 2.87409
11.95106 4.00000
-3.11935 -4.00000
6.61976 4.00000
-1.59679 -3.12489
2.39406 3.83682
8.98971 4.00000
2.01005 3.56444
-1.42513 -2.89769
1.91515 3.47693
4.75207 4.00000
-3.22786 -4.00000
2.18031 3.70138
6.95316 4.00000
-3.92956 -4.00000
-1.97791 -3.53571
7.95253 4.00000
9.86943 4.00000
-3.45314 -4.00000
2.13008 3.66366
-1.21212 -2.57933
8.50756 4.00000
1.85195 3.41421
3.75620 4.00000
4.47003 4.00000
11.09999 4.00000
-1.70654 -3.25642
11.73001 4.00000
1.90609 3.46816
-2.36144 -3.81877
0.04914 0.12996
3.82695 4.00000
6.12422 4.00000
2.32662 3.79847
9.35261 4.00000
8.06504 4.00000
2.97498 3.99972
4.38768 4.00000
4.20153 4.00000
4.19242 4.00000
-4.63619 -4.00000
Параметры: A = 8, B = 12
xi yi
----------------
5.86982 11.14919
10.60889 12.00000
4.06461 9.09613
5.29288 10.62591
10.15479 12.00000
3.86484 8.79384
0.47680 1.38779
-1.27013 -3.50792
-1.24129 -3.43498
-1.03170 -2.89553
-1.50325 -4.08605
6.95909 11.79685
1.03174 2.89564
1.91432 5.05583
6.86539 11.75862
10.89394 12.00000
3.61242 8.39047
7.85303 11.99595
-4.35477 -9.50856
-1.10787 -3.09347
8.88241 12.00000
-3.41076 -8.05104
2.60220 6.53696
5.28102 10.61384
-4.78747 -10.06493
-1.71943 -4.60396
6.26656 11.43660
10.65755 12.00000
-2.27517 -5.85493
9.47499 12.00000
-0.31369 -0.92261
7.62057 11.97301
6.96683 11.79985
8.14176 12.00000
11.97237 12.00000
10.89297 12.00000
2.48892 6.30526
6.69740 11.68186
-4.11167 -9.16516
4.94378 10.24866
-4.48180 -9.67917
7.27224 11.90069
-0.83065 -2.36258
1.01590 2.85420
6.91175 11.77795
10.08303 12.00000
3.60696 8.38148
0.72761 2.08355
2.82893 6.98626
7.15816 11.86712
6.46978 11.56096
3.33574 7.92088
7.04571 11.82925
2.60493 6.54247
6.93663 11.78798
2.92556 7.17188
10.45675 12.00000
9.22932 12.00000
7.40673 11.93401
1.40836 3.85319
11.95106 12.00000
-3.11935 -7.53361
6.61976 11.64280
-1.59679 -4.31230
2.39406 6.10753
8.98971 12.00000
2.01005 5.27259
-1.42513 -3.89459
1.91515 5.05774
4.75207 10.02206
-3.22786 -7.73000
2.18031 5.64961
6.95316 11.79452
-3.92956 -8.89341
-1.97791 -5.20021
7.95253 11.99958
9.86943 12.00000
-3.45314 -8.12363
2.13008 5.53950
-1.21212 -3.36088
8.50756 12.00000
1.85195 4.91277
3.75620 8.62315
4.47003 9.66362
11.09999 12.00000
-1.70654 -4.57356
11.73001 12.00000
1.90609 5.03706
-2.36144 -6.03873
0.04914 0.14695
3.82695 8.73482
6.12422 11.34027
2.32662 5.96488
9.35261 12.00000
8.06504 12.00000
2.97498 7.26547
4.38768 9.55333
4.20153 9.29468
4.19242 9.28168
-4.63619 -9.87840
```

312
TEMA7/test.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,312 @@
Параметры: A = 5, B = 7
xi yi
----------------
5.86982 7.00000
10.60889 7.00000
4.06461 6.75501
5.29288 7.00000
10.15479 7.00000
3.86484 6.63920
0.47680 1.27140
-1.27013 -3.10467
-1.24129 -3.04419
-1.03170 -2.59073
-1.50325 -3.57637
6.95909 7.00000
1.03174 2.59082
1.91432 4.33400
6.86539 7.00000
10.89394 7.00000
3.61242 6.46090
7.85303 7.00000
-4.35477 -6.88343
-1.10787 -2.75836
8.88241 7.00000
-3.41076 -6.29281
2.60220 5.39016
5.28102 7.00000
-4.78747 -6.98735
-1.71943 -3.98660
6.26656 7.00000
10.65755 7.00000
-2.27517 -4.92108
9.47499 7.00000
-0.31369 -0.85077
7.62057 7.00000
6.96683 7.00000
8.14176 7.00000
11.97237 7.00000
10.89297 7.00000
2.48892 5.23446
6.69740 7.00000
-4.11167 -6.77904
4.94378 6.99912
-4.48180 -6.92481
7.27224 7.00000
-0.83065 -2.13263
1.01590 2.55555
6.91175 7.00000
10.08303 7.00000
3.60696 6.45664
0.72761 1.88906
2.82893 5.68021
7.15816 7.00000
6.46978 7.00000
3.33574 6.22447
7.04571 7.00000
2.60493 5.39382
6.93663 7.00000
2.92556 5.79507
10.45675 7.00000
9.22932 7.00000
7.40673 7.00000
1.40836 3.38804
11.95106 7.00000
-3.11935 -6.00968
6.61976 7.00000
-1.59679 -3.75709
2.39406 5.09855
8.98971 7.00000
2.01005 4.49685
-1.42513 -3.42169
1.91515 4.33544
4.75207 6.98279
-3.22786 -6.12067
2.18031 4.77382
6.95316 7.00000
-3.92956 -6.67917
-1.97791 -4.44276
7.95253 7.00000
9.86943 7.00000
-3.45314 -6.33002
2.13008 4.69379
-1.21212 -2.98255
8.50756 7.00000
1.85195 4.22513
3.75620 6.56683
4.47003 6.92136
11.09999 7.00000
-1.70654 -3.96287
11.73001 7.00000
1.90609 4.31977
-2.36144 -5.05063
0.04914 0.13690
3.82695 6.61471
6.12422 7.00000
2.32662 4.99884
9.35261 7.00000
8.06504 7.00000
2.97498 5.85181
4.38768 6.89502
4.20153 6.82148
4.19242 6.81739
-4.63619 -6.96294
Параметры: A = 3, B = 4
xi yi
----------------
5.86982 4.00000
10.60889 4.00000
4.06461 4.00000
5.29288 4.00000
10.15479 4.00000
3.86484 4.00000
0.47680 1.17044
-1.27013 -2.67003
-1.24129 -2.62531
-1.03170 -2.27813
-1.50325 -3.00433
6.95909 4.00000
1.03174 2.27821
1.91432 3.47613
6.86539 4.00000
10.89394 4.00000
3.61242 4.00000
7.85303 4.00000
-4.35477 -4.00000
-1.10787 -2.40881
8.88241 4.00000
-3.41076 -4.00000
2.60220 3.92967
5.28102 4.00000
-4.78747 -4.00000
-1.71943 -3.27117
6.26656 4.00000
10.65755 4.00000
-2.27517 -3.76650
9.47499 4.00000
-0.31369 -0.79276
7.62057 4.00000
6.96683 4.00000
8.14176 4.00000
11.97237 4.00000
10.89297 4.00000
2.48892 3.88391
6.69740 4.00000
-4.11167 -4.00000
4.94378 4.00000
-4.48180 -4.00000
7.27224 4.00000
-0.83065 -1.90841
1.01590 2.25038
6.91175 4.00000
10.08303 4.00000
3.60696 4.00000
0.72761 1.70499
2.82893 3.98699
7.15816 4.00000
6.46978 4.00000
3.33574 4.00000
7.04571 4.00000
2.60493 3.93063
6.93663 4.00000
2.92556 3.99754
10.45675 4.00000
9.22932 4.00000
7.40673 4.00000
1.40836 2.87409
11.95106 4.00000
-3.11935 -4.00000
6.61976 4.00000
-1.59679 -3.12489
2.39406 3.83682
8.98971 4.00000
2.01005 3.56444
-1.42513 -2.89769
1.91515 3.47693
4.75207 4.00000
-3.22786 -4.00000
2.18031 3.70138
6.95316 4.00000
-3.92956 -4.00000
-1.97791 -3.53571
7.95253 4.00000
9.86943 4.00000
-3.45314 -4.00000
2.13008 3.66366
-1.21212 -2.57933
8.50756 4.00000
1.85195 3.41421
3.75620 4.00000
4.47003 4.00000
11.09999 4.00000
-1.70654 -3.25642
11.73001 4.00000
1.90609 3.46816
-2.36144 -3.81877
0.04914 0.12996
3.82695 4.00000
6.12422 4.00000
2.32662 3.79847
9.35261 4.00000
8.06504 4.00000
2.97498 3.99972
4.38768 4.00000
4.20153 4.00000
4.19242 4.00000
-4.63619 -4.00000
Параметры: A = 8, B = 12
xi yi
----------------
5.86982 11.14919
10.60889 12.00000
4.06461 9.09613
5.29288 10.62591
10.15479 12.00000
3.86484 8.79384
0.47680 1.38779
-1.27013 -3.50792
-1.24129 -3.43498
-1.03170 -2.89553
-1.50325 -4.08605
6.95909 11.79685
1.03174 2.89564
1.91432 5.05583
6.86539 11.75862
10.89394 12.00000
3.61242 8.39047
7.85303 11.99595
-4.35477 -9.50856
-1.10787 -3.09347
8.88241 12.00000
-3.41076 -8.05104
2.60220 6.53696
5.28102 10.61384
-4.78747 -10.06493
-1.71943 -4.60396
6.26656 11.43660
10.65755 12.00000
-2.27517 -5.85493
9.47499 12.00000
-0.31369 -0.92261
7.62057 11.97301
6.96683 11.79985
8.14176 12.00000
11.97237 12.00000
10.89297 12.00000
2.48892 6.30526
6.69740 11.68186
-4.11167 -9.16516
4.94378 10.24866
-4.48180 -9.67917
7.27224 11.90069
-0.83065 -2.36258
1.01590 2.85420
6.91175 11.77795
10.08303 12.00000
3.60696 8.38148
0.72761 2.08355
2.82893 6.98626
7.15816 11.86712
6.46978 11.56096
3.33574 7.92088
7.04571 11.82925
2.60493 6.54247
6.93663 11.78798
2.92556 7.17188
10.45675 12.00000
9.22932 12.00000
7.40673 11.93401
1.40836 3.85319
11.95106 12.00000
-3.11935 -7.53361
6.61976 11.64280
-1.59679 -4.31230
2.39406 6.10753
8.98971 12.00000
2.01005 5.27259
-1.42513 -3.89459
1.91515 5.05774
4.75207 10.02206
-3.22786 -7.73000
2.18031 5.64961
6.95316 11.79452
-3.92956 -8.89341
-1.97791 -5.20021
7.95253 11.99958
9.86943 12.00000
-3.45314 -8.12363
2.13008 5.53950
-1.21212 -3.36088
8.50756 12.00000
1.85195 4.91277
3.75620 8.62315
4.47003 9.66362
11.09999 12.00000
-1.70654 -4.57356
11.73001 12.00000
1.90609 5.03706
-2.36144 -6.03873
0.04914 0.14695
3.82695 8.73482
6.12422 11.34027
2.32662 5.96488
9.35261 12.00000
8.06504 12.00000
2.97498 7.26547
4.38768 9.55333
4.20153 9.29468
4.19242 9.28168
-4.63619 -9.87840

26
TEMA7/testt.py Обычный файл
Просмотреть файл

@@ -0,0 +1,26 @@
import random
def func(x, A, B):
if x > A:
return B
elif 0 <= x <= A:
return (2 * B * x / A) - (B * x**2 / A**2)
elif -A <= x < 0:
return (2 * B * x / A) + (B * x**2 / A**2)
else:
return -B
x_values = [random.uniform(-5, 12) for _ in range(100)]
params = [(5, 7), (3, 4), (8, 12)]
with open('test.txt', 'w', encoding='utf-8') as f:
for A, B in params:
f.write(f'\nПараметры: A = {A}, B = {B}\n')
f.write('xi yi\n')
f.write('----------------\n')
for x in x_values:
y = func(x, A, B)
f.write(f'{x:10.5f} {y:10.5f}\n')

Двоичные данные
TEMA7/Рис1.png Обычный файл

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

После

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

Двоичные данные
TEMA7/Рис2.png Обычный файл

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

После

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

3
TEMA8/MM0.py Обычный файл
Просмотреть файл

@@ -0,0 +1,3 @@
import MM2
print('y=',MM2.vyhod)

22
TEMA8/MM1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,22 @@
def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя
yp = kk1 * xtt #усилитель
yti1 = yp + yti1 #Интегратор
ytin1 = (yti1+TT*ytin1)/(TT+1)
return [yti1, ytin1]
def tahogen(xtt,kk2,yti2):
#Модель тахогенератора
yp = kk2 * xtt #усилитель
yti2 = yp + yti2 #интегратор
return yti2
def nechus(xtt,gran):
if (xtt < gran) and (xtt > (-gran)):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt

25
TEMA8/MM2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,25 @@
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)

Просмотреть файл

@@ -1,2 +1,9 @@
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
def reading (file):
nums = []
with open(file, 'r') as file:
for line in file:
nums.extend(map(float, line.split()))
return nums

Просмотреть файл

@@ -1,11 +1,17 @@
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
import math
def correlation(list1, list2):
n = min(len(list1), len(list2))
if n < 2:
return None
x, y = list1[:n], list2[:n]
mean_x, mean_y = sum(x)/n, sum(y)/n
num = sum((x[i]-mean_x)*(y[i]-mean_y) for i in range(n))
den = math.sqrt(sum((x[i]-mean_x)**2 for i in range(n)) *
sum((y[i]-mean_y)**2 for i in range(n)))
return num/den if den != 0 else None
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
return math.exp(expi)

15
TEMA8/Mod3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,15 @@
from Mod1 import reading
from Mod2 import correlation
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = reading(file1)
arr2 = reading(file2)
if arr1 is None or arr2 is None:
print("Не удалось считать данные из файлов.")
else:
corr = correlation(arr1, arr2)
if corr is not None:
print(f"Коэффициент корреляции: {corr:.2f}")

2
TEMA8/data1.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
1.0 2.0 3.0 4.0 5.0
6.0 7.0 8.0 9.0 10.0

2
TEMA8/data2.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,2 @@
10.0 9.5 9.0 8.5 8.0
7.5 7.0 6.5 6.0 1.0

18
TEMA8/func_module.py Обычный файл
Просмотреть файл

@@ -0,0 +1,18 @@
import math
f = lambda x, a, b, c, d: a / (1 + math.exp(-b - c * x - d * x**2))
def calc_and_save(a, b, c, d, filename="results.txt"):
if a <= 0 or b <= 0 or c <= 0 or d <= 0:
raise ValueError("Все параметры должны быть положительными")
xs = list(range(-20, 21, 2))
values = [f(x, a, b, c, d) for x in xs]
with open(filename, "w", encoding="utf-8") as file:
for i in range(0, len(values), 3):
chunk = values[i:i+3]
line = " ".join(f"{v:.6f}" for v in chunk)
file.write(line + "\n")
return xs, values

25
TEMA8/main_module.py Обычный файл
Просмотреть файл

@@ -0,0 +1,25 @@
from func_module import calc_and_save
def main():
print("Ввод параметров a, b, c, d (положительные числа):")
a = float(input("a = "))
b = float(input("b = "))
c = float(input("c = "))
d = float(input("d = "))
if a <= 0 or b <= 0 or c <= 0 or d <= 0:
print("Ошибка: все параметры должны быть положительными!")
return
filename = input("Имя выходного файла (по умолчанию results.txt): ").strip()
if not filename:
filename = "results.txt"
try:
calc_and_save(a, b, c, d, filename)
print(f"Результаты записаны в файл {filename}")
except Exception as e:
print(f"Ошибка: {e}")
if __name__ == "__main__":
main()

333
TEMA8/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,333 @@
# Отчёт по Теме 8
Соловьёва Екатерина, А-01-23
## 1. Запуск интерактивной оболочки IDLE.
Следует начинать сеанс работы с IDLE со следующих инструкций:
```py
import sys, importlib #Импорт трёх важных вспомогательных модулей
import os
os.chdir("C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8")
os.getcwd() #Контролируем корректность установки текущего каталога
'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8'
```
Большие программы делятся на части-модули, записываемые в отдельные файлы. Это делается для удобства отладки, обеспечения возможности коллективной разработки, создания возможности повторного использования программ и по другим соображениям. При этом возникают 2 проблемы:
* передача управления от одного модуля к другому в процессе выполнения программы;
* передача данных между модулями.
Поэтому техника структурирования программ на любом языке программирования предусматривает изучение способов решения этих проблем.
## 2. Создание и использование модулей в среде Python.
Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле. В языке Python модули также являются объектами класса module.
## 2.1. Запуск модуля на выполнение путем его импорта.
Cодержимое модуля становится доступным для исполнения после выполнения процедуры импорта. После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями. В Python импорт является одним из важных способов решения проблемы передачи управления между модулями.
Файл с именем Mod1.py содержит:
```py
perm1=input('Mod1:Введите значение = ')
print('Mod1:Значение perm1=',perm1)
```
Пока введенный или измененный текст в этом окне не сохранен в файле, в заголовке перед именем файла стоит символ «*» (звёздочка).
Теперь вспомним возможность запуска модуля из командной строки оболочки IDLE.
```py
import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
```
При этом управление передается от модуля с именем main (это имя модуля – командной строки) к модулю Mod1, который ищется в файле с именем Mod1.py в рабочем каталоге. Если бы он находился в другом каталоге, то в инструкции импорта пришлось бы указать не только имя файла с модулем, но и его каталог.
После выполнения записанной в модуль программы (после ввода значения объекта perm1 и его отображения) управление возвращается вызывающему модулю, т.е. в данном случае, в командную строку. Объекты, созданные при выполнении модуля, становятся его атрибутами.
```py
type(Mod1)
<class 'module'>
dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
```
Доступ к значению созданного в модуле объекта perm1 – атрибута модуля Mod1:
```py
Mod1.perm1
'5'
import Mod1
```
Повторно выполнить модуль с помощью инструкции импорта не выходит. Для повторного выполнения ранее импортированного модуля следует применить функцию reload из модуля imp:
```py
importlib.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
Mod1.perm1
'3'
```
## 2.2. Словарь импортированных модулей
```py
print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_suggestions', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', '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', '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', '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', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
```
Для обеспечения возможности повторного импорта и, следовательно, выполнения программы из модуля, его надо удалить из этого словаря:
```py
sys.modules.pop('Mod1')
```
Mod1 из него исчез повторите импорт и проверьте, что записанная в нем программа будет снова выполнена. После этого еще раз удалите Mod1 из словаря.
```py
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_suggestions', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', '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', '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', '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', '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:Введите значение = 5
Mod1:Значение perm1= 5
Mod1.perm1
'5'
sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA8\\Mod1.py'>
```
## 2.3. Запуск модуля на выполнение с помощью функции exec().
Запуск модуля на выполнение может быть произведен с использованием ранее изученной функции exec. При этом модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции.
Внимание: объект-модуль при этом не создается! Созданные при выполнении модуля объекты становятся объектами главной программы!
```py
exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 2
Mod1:Значение perm1= 2
exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
```
Эту функцию можно вызывать любое число раз и каждый раз будет выполняться программа из модуля.
## 2.4. Использование инструкции from … import …
В одном модуле может содержаться несколько программных единиц (например, функций или пользовательских объектов). Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов.
```py
from Mod1 import perm1
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
'Mod1' in dir()
True
perm1
'4'
```
Пример 2.
Mod2, содержащий две функции
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
return t
def beta(q):
import math
expi=q*math.pi
return math.exp(expi)
```
```py
g=beta(2)
****BETA****
g
535.4916555247646
print(sorted(sys.modules.keys()))
['Mod2', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_suggestions', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', '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', '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', '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', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
```
```py
alpha() #Функция alpha не была импортирована
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'alpha' is not defined
from Mod2 import alpha as al
del al,beta
from Mod2 import alpha as al, beta as bt
del al,beta
from Mod2 import *
tt = alpha()
from Mod2 import *
tt=alpha()
****ALPHA****
Значение t=0.12
uu=beta(float(tt))
****BETA****
uu
1.4578913609506803
```
## 3. Создание многомодульных программ.
## 3.1. Пример простой многомодульной программы.
Модуль Mod0
```py
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)
```
Этот модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0.
```py
import Mod0
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
perm1= 1
****ALPHA****
Значение t=2
tt= 2
****BETA****
qq= 535.4916555247646
Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'2'
535.4916555247646
'1'
```
## 3.2. Еще пример.
Файл MM0.py:
```py
import MM2
print('y =', MM2.vyhod)
```
Файл MM1.py:
```py
def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя
yp = kk1 * xtt #усилитель
yti1 = yp + yti1 #Интегратор
ytin1 = (yti1+TT*ytin1)/(TT+1)
return [yti1, ytin1]
def tahogen(xtt,kk2,yti2):
#Модель тахогенератора
yp = kk2 * xtt #усилитель
yti2 = yp + yti2 #интегратор
return yti2
def nechus(xtt,gran):
if (xtt < gran) and (xtt > (-gran)):
ytt = 0
elif xtt >= gran:
ytt = xtt - gran
elif xtt <= (-gran):
ytt = xtt + gran
return ytt
```
Файл MM2.py:
```py
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)
```
```py
k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,1500
y = [0, 0, ... 0, -70.20177063675057, 0, 257.73311334096866, -677.4095530135962, ... -6.270038281034423e+306, -1.198995988522659e+307]
```
## 3.3. Области действия объектов в модулях.
В ранее созданных модулях вводятся и используются следующие объекты:
Mod1: perm1
Mod2: функции alpha, beta; переменные t, expi
Mod0: переменные tt,qq
Попробую вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha.
```py
def alpha():
print("Alpha called")
result_beta = beta(5) # вызов beta из alpha
print("Beta returned:", result_beta)
return "alpha_finished"
def beta(x):
print("Beta called with", x)
if x > 0:
pass
return x * 2
```
Отобразить на экране в модуле Mod0 значения объектов t и expi:
```py
import Mod2
print("t =", Mod2.t)
print("expi =", Mod2.expi)
t = 10
expi = 2.718
```
В модуле Mod0 увеличить в 3 раза значение
объекта perm1 и отобразить его после этого на экране.
Так как perm1 имеет тип str, то умножение напрямую без преобразования типов
будет выглядеть так:
```py
print('perm1 = ', Mod1.perm1)
print('Умножено:' , Mod1.perm1 * 3)
Mod1: Введите значение = 4
Mod1: Значение perm1 = 4
perm1 = 4
Умножено: 444
```
Преобразовав тип perm1, можно получить классическое умножение:
```py
print('Умножено:' , int(Mod1.perm1) * 3)
...
Mod1: Введите значение = 4
Mod1: Значение perm1 = 4
perm1 = 4
Умножено: 12
```
В командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq:
```py
Mod1.perm1 * 2
'55'
Mod0.tt * 2
'44'
Mod0.qq * 2
573502.6262733063
```
## 4. Окончание сеанса работы с IDLE.

7
TEMA8/results.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,7 @@
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000
0.999994 0.880797 1.000000
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000
1.000000 1.000000 1.000000

65
TEMA8/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,65 @@
# Общее контрольное задание по Теме 8
Соловьёва Екатерина, А-01-23
## Задание
Общее контрольное задание.
Разработайте программу, состоящую из трех модулей:
* Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
* Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
* Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
Mod1
```py
def reading (file):
nums = []
with open(file, 'r') as file:
for line in file:
nums.extend(map(float, line.split()))
return nums
```
Mod2
```py
import math
def correlation(list1, list2):
n = min(len(list1), len(list2))
if n < 2:
return None
x, y = list1[:n], list2[:n]
mean_x, mean_y = sum(x)/n, sum(y)/n
num = sum((x[i]-mean_x)*(y[i]-mean_y) for i in range(n))
den = math.sqrt(sum((x[i]-mean_x)**2 for i in range(n)) *
sum((y[i]-mean_y)**2 for i in range(n)))
return num/den if den != 0 else None
```
Mod3
```py
from Mod1 import reading
from Mod2 import correlation
file1 = input("Введите имя первого файла: ")
file2 = input("Введите имя второго файла: ")
arr1 = reading(file1)
arr2 = reading(file2)
if arr1 is None or arr2 is None:
print("Не удалось считать данные из файлов.")
else:
corr = correlation(arr1, arr2)
if corr is not None:
print(f"Коэффициент корреляции: {corr:.2f}")
```
## Вывод
```py
=================================================== RESTART: C:/Users/Ekaterina/OneDrive/Desktop/Solovyova/python-labs/TEMA8/Mod3.py ===================================================
Введите имя первого файла: data1.txt
Введите имя второго файла: data2.txt
Коэффициент корреляции: -0.88
```

0
TEMA8/test.md Обычный файл
Просмотреть файл

38
TEMA9/Employee.py Обычный файл
Просмотреть файл

@@ -0,0 +1,38 @@
class Employee:
"""Класс для работы с данными сотрудников"""
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self.__pooshreniya = []
def povysit_oklad(self, summa_povysheniya):
"""
Метод для повышения оклада сотрудника на заданное значение """
if summa_povysheniya <= 0:
raise ValueError("Сумма повышения должна быть положительной!")
self.oklad += summa_povysheniya
return self.oklad
def perevesti_v_drugoi_otdel(self, novy_otdel):
"""Перевод сотрудника в другой отдел"""
self.otdel = novy_otdel
print(f"Сотрудник {self.fio} переведен в отдел: {novy_otdel}")
def izmenit_dolzhnost(self, novaya_dolzhnost):
"""Метод изменения должности"""
self.dolzhnost = novaya_dolzhnost
@property
def pooshreniya(self):
return self.__pooshreniya.copy()
def dobavit_pooshrenie(self, text):
"""Добавить поощрение в список"""
self.__pooshreniya.append(text)

Двоичные данные
TEMA9/Figure_1.png Обычный файл

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

После

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

11
TEMA9/Mod3.py Обычный файл
Просмотреть файл

@@ -0,0 +1,11 @@
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)

21
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])

15
TEMA9/main_SAU.py Обычный файл
Просмотреть файл

@@ -0,0 +1,15 @@
###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()

295
TEMA9/report.md Обычный файл
Просмотреть файл

@@ -0,0 +1,295 @@
# Отчёт по Теме 9
Соловьёва Екатерина. А-01-23
## 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)#Отображение данных экземпляра класса
z1=Class1() #Создаём 1-й экземпляр класса
z2=Class1() #Создаём 2-й экземпляр класса
z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
z1
<__main__.Class1 object at 0x00000244872A6660>
z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
z2
<__main__.Class1 object at 0x0000024487293C50>
z1.otobrazh()
экз.класса 1
z2.otobrazh()
-632.453
z1.data='Новое значение атрибута у экз.1' # Измените значение атрибута у первого экземпляра
z1.otobrazh()
Новое значение атрибута у экз.1
```
## 2.2. Создание класса-наследника
В объявлении класса после его имени в скобках перечисляются его «родительские классы»
```py
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
```
Когда вызывается метод объекта, Python:
* Сначала ищет метод в классе объекта (Class2)
* Если не находит - ищет в родительских классах (Class1)
* Продолжает по цепочке наследования
## 3. Использование классов, содержащихся в модулях
Модуль с именем Mod3:
```py
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)
```
```py
from Mod3 import Class1
z4=Class1()
z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
z4.otobrazh()
File "C:\Users/Ekaterina/OneDrive/Desktop/Solovyova/python-labs/TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)#Отображение данных экземпляра
AttributeError: 'Class1' object has no attribute 'data'
```
При создании z4 не вызывается метод zad_zn(), поэтому атрибут data не создаётся. При вызове z4.otobrazh() метод пытается обратиться к self.data, но этого атрибута не существует.
```py
from Mod3 import Class1
z4=Class1() # Вызывается метод otobrazh() из класса Class1, который просто печатает self.data
z4.data='значение данного data у экз.4'
z4.otobrazh()
значение данного data у экз.4
```
Сравним с:
```py
del z4
import Mod3
z4=Mod3.Class2() # Вызывается ПЕРЕОПРЕДЕЛЁННЫЙ метод otobrazh() из класса Class2
z4.zad_zn('Класс из модуля')
z4.otobrazh()
значение= Класс из модуля
Mod3.otobrazh('Объект') # Вызывается ОТДЕЛЬНАЯ ФУНКЦИЯ otobrazh()
значение объекта= Объект
```
Разница в выводе объясняется тем, что во втором случае вызывается переопределённый метод Class2.otobrazh() (с префиксом "значение ="), а в третьем - самостоятельная функция из модуля.
## 4. Использование специальных методов
Имена специальных методов предваряются одним или двумя подчерками и имеют вид: <имя специального метода>
Для примера создам класс, содержащий два специальных метода
```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
```
Метод add - это один из методов, осуществляющих так называемую «перегрузку» операторов.
Перегрузка операторов это возможность определять поведение стандартных операторов (+, -, *, /, <, > и т.д.) для объектов собственных классов.
Для иллюстрации работы этих методов создам экземпляр класса Class3
```py
z5=Class3('abc') #При создании экземпляра срабатывает конструктор
z5.otobrazh()
значение= abc
z6=z5+'def' должен сработать специальный метод __add__
z6.otobrazh()
значение= abcdef
z6.zad_dr_zn(3)
z6.otobrazh()
значение= abcdefabcdefabcdef
```
## 5. Присоединение атрибутов к классу.
```py
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
Class3.fio='Иванов И.И.'
dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
z7=Class3(123)
dir(z7)==dir(Class3)
False
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(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']
```
## 6. Выявление родительских классов
Такое выявление делается с помощью специального атрибута bases, например, выведу родительский класс для созданного класса Class3:
```py
Class3.__bases__
(<class '__main__.Class2'>,)
Class2.__bases__
(<class '__main__.Class1'>,)
Class1.__bases__
(<class 'object'>,)
Class3.__mro__
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class '__main__.Class1'>, <class 'object'>)
ZeroDivisionError.__mro__
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
```
## 7. Создание свойства класса.
Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута.
Создам, например, новый класс с определенным в нем свойством
```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)
```
Здесь имеется 3 метода: chten, zapis, stiran, которые обслуживают созданное свойство, реализуя операции, соответственно, чтения, записи или удаления значений свойства. Теперь попробую некоторые операции с этим свойством
```py
exempl=Class4(12) # Вызывается __init__(12)
exempl.svojstvo Вызывается chten() возвращает self.__prm (12)
12
exempl.svojstvo=45 # Вызывается zapis(45) → self.__prm = 45
print(exempl.svojstvo) # Вызывается chten() → возвращает 45
45
del exempl.svojstvo # Вызывается stiran() → del self.__prm
exempl.svojstvo # атрибут удалён
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
exempl.svojstvo
File "<pyshell#42>", line 5, in chten
return sam.__prm
AttributeError: 'Class4' object has no attribute '_Class4__prm'
```
## 8. Рассмотрите пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
Создадим модуль SAU.py с классом:
```py
class SAU:
def init(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])
```
модуль main_Sau.py:
```py
###main_SAU
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
from SAU import *
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
SAUe=SAU(prm) # Создаём экземпляр класса
yt=[]
for xt in xx: # Прохождение входного сигнала
SAUe.zdn_zn(xt)
SAUe.model()
SAUe.otobraz()
yt.append(SAUe.ypr[1])
import pylab
pylab.plot(yt)
pylab.show()
```
Тестирование:
```py
y= 0.0
y= 0.2173913043478261
y= 0.4763705103969754
y= 0.686594887811293
y= 0.8199324616478645
y= 0.8837201137353929
y= 0.8994188484874774
y= 0.8892777072047301
y= 0.870097963179993
y= 0.8518346102696789
y= 0.8387499784485772
y= 0.8314204114211459
y= 0.8286051955249649
y= 0.8285656555914835
y= 0.8297915186846528
y= 0.8312697736438287
y= 0.8324765218921963
y= 0.8332456979978418
y= 0.8336163607592184
y= 0.8337101315489143
y= 0.833654237067147
```
![График](Figure_1.png)
## 9. Сохраните созданный текстовый файл протокола в своем рабочем каталоге. Закончите сеанс работы с IDLE.

78
TEMA9/task.md Обычный файл
Просмотреть файл

@@ -0,0 +1,78 @@
# Общее контрольное задание по Теме 9
Соловьёва Екатерина, А-01-23
## Задание
Создайте и запишите в модуль класс, содержащий следующие компоненты:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- метод для обеспечения перевода сотрудника из одного отдела в другой;
- метод для изменения должности сотрудника;
- свойство, содержащее перечень (список) поощрений сотрудника.
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
## Решение
```py
class Employee:
"""Класс для работы с данными сотрудников"""
def __init__(self, fio, otdel, dolzhnost, oklad):
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self.__pooshreniya = []
def povysit_oklad(self, summa_povysheniya):
"""
Метод для повышения оклада сотрудника на заданное значение
"""
if summa_povysheniya <= 0:
raise ValueError("Сумма повышения должна быть положительной!")
self.oklad += summa_povysheniya
return self.oklad
def perevesti_v_drugoi_otdel(self, novy_otdel):
"""Перевод сотрудника в другой отдел"""
self.otdel = novy_otdel
print(f"Сотрудник {self.fio} переведен в отдел: {novy_otdel}")
def izmenit_dolzhnost(self, novaya_dolzhnost):
"""Метод изменения должности"""
self.dolzhnost = novaya_dolzhnost
def get_pooshreniya(self):
"""Получить список поощрений"""
return self.__pooshreniya.copy()
def dobavit_pooshrenie(self, text):
"""Добавить поощрение в список"""
self.__pooshreniya.append(text)
@property #вызывает метод, который возвращает копию текущего списка поощрений.
def pooshreniya(self):
"""Свойство для получения списка поощрений"""
return self.__pooshreniya.copy()
```
## Вывод программы
```py
emp1=Employee ("Обычайко Д.С.", "Кафедра Управления и информационных технологий", "Ассистент", 100000)
emp2=Employee ("Пронин А.С.", "Кафедра Управления и информационных технологий", "Ассистент", 100000)
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
Обычайко Д.С., Кафедра Управления и информационных технологий, Ассистент, оклад: 100000
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
Пронин А.С., Кафедра Управления и информационных технологий, Ассистент, оклад: 100000
emp2.perevesti_v_drugoi_otdel("Деканат")
Сотрудник Пронин А.С. переведен в отдел: Деканат
emp1.izmenit_dolzhnost("Старший преподаватель")
print(f"Новая должность {emp1.fio}: {emp1.dolzhnost}")
Новая должность Обычайко Д.С.: Старший преподаватель
novy_oklad1 = emp1.povysit_oklad(20000)
emp2.dobavit_pooshrenie("За публикацию научной статьи")
print(f" Поощрения: {emp2.get_pooshreniya()}")
Поощрения: ['За публикацию научной статьи']
employee1.povysit_oklad(15000)
65000
```

187
TEMA9/test.md Обычный файл
Просмотреть файл

@@ -0,0 +1,187 @@
# Общее контрольно задание по Теме 9
Соловьёва Екатерина, А-01-23
## Задание:
1) Создайте модуль М1, содержащий 2 функции:
- функция 1: аргумент - список или кортеж с отсчетами некоторого сигнала; функция должна определить и вернуть число элементов, значение которых превышает значение предыдущего элемента;
- функция 2: аргумент - список или кортеж с последовательностью отсчетов сигнала; функция должна рассчитать список с накопленными суммами: первый элемент равен первому элементу исходной последовательности, второй - равен сумме двух первых элементов последовательности, третий - сумме первых трех элементов и т.д.
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
- запрашивается имя бинарного файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос;
- выборка вводится из файла;
- с помощью функции 1 производится определение числа элементов со значениями, превышающими значения их предшественников;
- с помощью функции 2 рассчитывается список с кумулятивными суммами;
- выборка отображается в виде графика.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
4) Проведите расчеты при 2-х разных исходных файлах.
## Решение:
M1.py
```py
def count_increasing_elements(sequence):
""" Функция 1: подсчитывает число элементов, значение которых превышает значение предыдущего элемента"""
if len(sequence) <= 1:
return 0
count = 0
for i in range(1, len(sequence)):
if sequence[i] > sequence[i-1]:
count += 1
return count
def cumulative_sum(sequence):
"""Функция 2: рассчитывает список с накопленными суммами"""
result = []
current_sum = 0
for value in sequence:
current_sum += value
result.append(current_sum)
return result
```
M2.py
```py
import os
import struct
import matplotlib.pyplot as plt
from M1 import count_increasing_elements, cumulative_sum
def read_binary_file(filename):
"""
Читает бинарный файл с числами с плавающей точкой
"""
data = []
try:
with open(filename, 'rb') as f:
while True:
bytes_data = f.read(8)
if not bytes_data:
break
value = struct.unpack('d', bytes_data)[0]
data.append(value)
except Exception as e:
print(f"Ошибка при чтении файла: {e}")
return data
def display_plots(original_data, cumulative_data):
"""
Отображает графики исходных данных и кумулятивных сумм
"""
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
ax1.plot(original_data, 'b-', linewidth=1.5, label='Исходный сигнал')
ax1.set_xlabel('Отсчеты')
ax1.set_ylabel('Амплитуда')
ax1.set_title('Исходный сигнал')
ax1.grid(True, alpha=0.3)
ax1.legend()
ax2.plot(cumulative_data, 'r-', linewidth=1.5, label='Накопленные суммы')
ax2.set_xlabel('Отсчеты')
ax2.set_ylabel('Сумма')
ax2.set_title('Кумулятивные суммы сигнала')
ax2.grid(True, alpha=0.3)
ax2.legend()
plt.tight_layout()
plt.show()
def process_signal_data():
""" Основная функция модуля M2 - выполняет все требуемые операции """
while True:
filename = input("Введите имя бинарного файла с выборкой: ").strip()
if os.path.exists(filename):
print(f"Файл '{filename}' найден.")
break
else:
print(f"Файл '{filename}' не существует. Пожалуйста, попробуйте еще раз.")
print("Чтение данных из файла...")
signal_data = read_binary_file(filename)
if not signal_data:
print("Файл пуст или содержит некорректные данные.")
return None, None, None
print(f"Прочитано {len(signal_data)} отсчетов сигнала.")
increasing_count = count_increasing_elements(signal_data)
print(f"Количество элементов, превышающих предыдущий: {increasing_count}")
cumulative_sums = cumulative_sum(signal_data)
print("Список с кумулятивными суммами рассчитан.")
display_plots(signal_data, cumulative_sums)
return signal_data, increasing_count, cumulative_sums
if __name__ == "__main__":
process_signal_data()
```
M0.py
```py
from M2 import process_signal_data
def main():
"""
Главная функция программы
"""
print("=" * 60)
print("ПРОГРАММА ОБРАБОТКИ СИГНАЛОВ")
print("=" * 60)
print("\n" + "=" * 60)
print("РАСЧЕТ №1")
print("=" * 60)
data1, count1, sums1 = process_signal_data()
if data1:
print(f"\nРезультаты расчета №1:")
print(f" • Общее количество отсчетов: {len(data1)}")
print(f" • Элементов, превышающих предыдущий: {count1}")
print(f" • Процент возрастающих элементов: {count1/len(data1)*100:.2f}%")
print("\n" + "=" * 60)
print("РАСЧЕТ №2")
print("=" * 60)
data2, count2, sums2 = process_signal_data()
if data2:
print(f"\nРезультаты расчета №2:")
print(f" • Общее количество отсчетов: {len(data2)}")
print(f" • Элементов, превышающих предыдущий: {count2}")
print(f" • Процент возрастающих элементов: {count2/len(data2)*100:.2f}%")
print("\n" + "=" * 60)
print("ОБРАБОТКА ЗАВЕРШЕНА")
print("=" * 60)
if __name__ == "__main__":
main()
```