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

..

103 Коммитов

Автор 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
Solovyova_ED
d986456727 done 2025-10-12 21:30:23 +03:00
Solovyova_ED
cef70ce455 done 2025-10-12 21:28:29 +03:00
Solovyova_ED
b4e003ddbe done 2025-10-12 21:27:20 +03:00
Solovyova_ED
fd4335c0d4 done 2025-10-12 21:23:01 +03:00
130598660c Изменил(а) на 'TEMA3/test.md' 2025-09-29 09:46:57 +00:00
Solovyova_ED
74a29b8912 Добавлен протокол и обновлены отчеты 2025-09-29 12:43:47 +03:00
e42f3c2e39 Изменил(а) на 'TEMA3/task.md' 2025-09-29 09:12:17 +00:00
Solovyova_ED
61dfe83e17 Добавлен протокол и обновлены отчеты 2025-09-29 12:01:38 +03:00
Solovyova_ED
33daa4f793 Добавлен протокол 2025-09-29 10:17:52 +03:00
Solovyova_ED
cac315d9a9 Добавлен отчёт TEMA3 2025-09-29 10:17:07 +03:00
Solovyova_ED
b2a3ae24b0 Добавлено индивидуальное контрольное задание 2025-09-26 10:33:05 +03:00
Solovyova_ED
8cec55308f Добавлено общее контрольное задание 2025-09-26 10:15:24 +03:00
Solovyova_ED
e08228c63f Добавлен отчёт TEMA2 2025-09-26 10:14:45 +03:00
Solovyova_ED
6d3f9684e5 Добавлен отчёт TEMA2 2025-09-26 01:27:26 +03:00
Solovyova_ED
804438a73a Добавлен отчёт TEMA2 2025-09-25 02:33:49 +03:00
Solovyova_ED
fccfccd885 Добавлен отчёт TEMA2 2025-09-25 02:32:38 +03:00
Solovyova_ED
b34e919b8e Добавлен отчёт TEMA2 2025-09-25 02:30:48 +03:00
Solovyova_ED
4efd7b8454 Добавлен отчёт TEMA2 2025-09-25 02:28:37 +03:00
Solovyova_ED
5b980b733c Добавлен отчёт TEMA2 2025-09-25 02:22:22 +03:00
Solovyova_ED
d685642ffd Добавлен отчёт TEMA2 2025-09-25 02:19:02 +03:00
1120f71918 Изменил(а) на 'TEMA1/test.md' 2025-09-15 09:37:39 +00:00
Solovyova_ED
bdd62bf317 doc: добавлен отчёт 2025-09-15 12:37:02 +03:00
Solovyova_ED
c51b0a827c общее контрольное задание 2025-09-15 12:37:02 +03:00
77 изменённых файлов: 6060 добавлений и 23 удалений

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

@@ -3,7 +3,6 @@
## 1.Создание копии репозитория
```py
$ git clone http://uit.mpei.ru/git/Solovyova_ED/python-labs.git
```

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

@@ -0,0 +1,6 @@
# Индивидуальное контрольное задание по теме 1
Соловьёва Екатерина А-01-23
## Задание
Что означает название интерактивной оболочки IDLE?
## Ответ
Integrated Development and Learning Environment (Интегрированная среда разработки и обучения)

188
TEMA2/protocol.py Обычный файл
Просмотреть файл

@@ -0,0 +1,188 @@
#Протокол по Теме 2 Соловьёва Е.Д.
f1=16; f2=3
f1,f2
(16, 3)
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
type(f2)
<class 'int'>
del f1,f2
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
f1=16; f2=3
dir(f2)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
dir(f1)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
help(abs)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
abs(-2)
2
help(abs),help(len), help(max), help(min), help(pow), help(round), help(sorted), help(sum), help(zip)
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
Help on built-in function max in module builtins:
max(...)
max(iterable, *[, default=obj, key=func]) -> value
max(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its biggest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more positional arguments, return the largest argument.
Help on built-in function min in module builtins:
min(...)
min(iterable, *[, default=obj, key=func]) -> value
min(arg1, arg2, *args, *[, key=func]) -> value
With a single iterable argument, return its smallest item. The
default keyword-only argument specifies an object to return if
the provided iterable is empty.
With two or more positional arguments, return the smallest argument.
Help on built-in function pow in module builtins:
pow(base, exp, mod=None)
Equivalent to base**exp with 2 arguments or base**exp % mod with 3 arguments
Some types, such as ints, are able to use a more efficient algorithm when
invoked using the three argument form.
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.
Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
A custom key function can be supplied to customize the sort order, and the
reverse flag can be set to request the result in descending order.
Help on built-in function sum in module builtins:
sum(iterable, /, start=0)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
Help on class zip in module builtins:
class zip(object)
| zip(*iterables, strict=False)
|
| The zip object yields n-length tuples, where n is the number of iterables
| passed as positional arguments to zip(). The i-th element in every tuple
| comes from the i-th iterable argument to zip(). This continues until the
| shortest argument is exhausted.
|
| If strict is true and one of the arguments is exhausted before the others,
| raise a ValueError.
|
| >>> list(zip('abcdefg', range(3), range(4)))
| [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
|
| Methods defined here:
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __iter__(self, /)
| Implement iter(self).
|
| __next__(self, /)
| Implement next(self).
|
| __reduce__(self, /)
| Return state information for pickling.
|
| __setstate__(self, object, /)
| Set state information for unpickling.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs)
| Create and return a new object. See help(type) for accurate signature.
(None, None, None, None, None, None, None, None, None)
Gg1=45
Gg1
45
gg1
1.6
bb1=True; bb2=False
bb1;bb2
True
False
type(bb1)
<class 'bool'>
ii1=-1234567890
ff1=-8.9876e-12
dv1=0b1101010
type(dv1)
<class 'int'>
vsm1=0o52765
shest1=0x7109af6
cc1=2-3j
a=3.67; b=-0.45
cc2=complex(a,b)
cc2
(3.67-0.45j)
ss1='Это - строка символов'
ss1="Это - строка символов"
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
ss1b= 'Меня зовут: \n Соловьёва Е. Д.'
print(ss1b)
Меня зовут:
Соловьёва Е. Д.
ss1b[0:23]
'Меня зовут: \n Соловьёва'
ss1b[14:23:1]
'Соловьёва'
ss1b[3:10]
'я зовут'
ss1b[14:23:2]
'Слвёа'
spis1=[111,'Spisok',5-9j]
stup=[0,0,1,1,1,1,1,1,1]
spis=[1,2,3,4,
5,6,7,
8,9,10]
spis
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
spis1[-1]
(5-9j)
stup[-8::2]
[0, 1, 1, 1]
spis1[1]='Список'
spis1
[111, 'Список', (5-9j)]

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

@@ -40,7 +40,32 @@ import builtins
```py
help(abs),help(len), help(max), help(min), help(pow), help(round), help(sorted), help(sum), help(zip)
```
abs - модуль от числа max/min - вывод максимального/минимального числа для либо списка либо для нескольких перечисленных переменных len - выводит кол-во объектов в контейнере pow - возводит число в степень round - округляет число sum - дает сумму всех элементов в контейнере sorted - сортирует по возрастанию элементы в контейнере zip - "сшивает" значения из одной последовательности значений с соответвтвующими значениями из другой
abs - модуль от числа max/min - вывод максимального/минимального числа для либо списка либо для нескольких перечисленных переменных len - выводит кол-во объектов в контейнере pow - возводит число в степень round - округляет число sum - дает сумму всех элементов в контейнере sorted - сортирует по возрастанию элементы в контейнере zip - "сшивает" значения из одной последовательности значений с соответствующими значениями из другой
Попробую применить каждую из функций:
```py
abs(-2)
2
a=[1,2,3]
len(a)
3
max(a)
3
min(a)
1
print(pow(2, 3)) #возводит 2 в степень 3
8
print(round(3.14159, 2)) #округляет до 2 знаков после запятой, так как я указала
3.14
names = ["Анна", "Борис", "Виктор"]
ages = [25, 30, 35]
print(sorted(names))
['Анна', 'Борис', 'Виктор']
sum(a)
6
zipped = list(zip(names, ages))
print(zipped)
[('Анна', 25), ('Борис', 30), ('Виктор', 35)]
```
## 6. Значимость регистра
При присваивании имен переменным важен также регистр букв.
```py
@@ -52,12 +77,14 @@ gg1
```
## 7.Изучение базовых типов объектов
## 7.1 Логический тип
bb1=True; bb2=False
bb1;bb2
True
False
type(bb1)
<class 'bool'>
```py
bb1=True; bb2=False
bb1;bb2
True
False
type(bb1)
<class 'bool'>
```
## 7.2. Другие простые типы
```py
ii1=-1234567890
@@ -74,11 +101,15 @@ cc2=complex(a,b)
```
## 7.3. Строка символов
```py
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов ",
выводимая на двух строках
ss1b= 'Меня зовут: \n Соловьёва Е. Д.'
print(ss1b)
Меня зовут:
Соловьёва Е. Д.
#Многострочные строки можно задавать в виде значения объекта с использованием тройных кавы-чек, например,
#Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например,
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
@@ -88,7 +119,7 @@ print(ss1b)
имеющее более сложный тип из тех, которые участвуют в операции.
```
Можно обращаться к частям строки символов с использованием индексов символов по их поряд-ку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например,
Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например,
```py
ss1[0] #Это – символ «Э»
ss1[8] #А это – символ «р»
@@ -120,6 +151,7 @@ ss1b[14:23:2]
'Слвёа'
```
## 8. Сложные типы объектов.
## 8.1 Список
```py
spis1=[111,'Spisok',5-9j] #Пример списка с 3 элементами разных типов
stup=[0,0,1,1,1,1,1,1,1]
@@ -138,7 +170,6 @@ spis1
len(spis1) #число элементов в списке
help(spis1.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
@@ -148,8 +179,40 @@ spis1.append(ss1b)
print(spis1)
[111, (5-9j), 'New item', 'Меня зовут: \n Соловьёва Е. Д.']
```
len(...) возвращает длину списка(количестево элементов в контейнере) spis1.append(элемент) добавляет элемент в конец списка spis1+[элемент] - добавляет элемент на вывод 1 раз. Не вписывает этот элемент в список spis1.pop(индекс элемента) - удаляет элемент с указанным индексом spis1.reverse - переворачивает список spis1.insert(индекс, элемент) - вставляет элемент после элемента с указанным индексом spis1.extend(список) - присоединяет в конец другой список spis1.remove(элемент) - удаляет первый встреченный элемент равный указанному spis1.sort() - сортирует список в порядке возрастания spis1.copy() - создает поверхностную копию(shallow copy) spis1.index(элемент) - возвращает индекс первого соответсвующего элемента spis1.clear() - очищает список spis1.count(элемент) - считает кол-во соответствующих элементов
spis1.append(элемент) добавляет элемент в конец списка spis1+[элемент] - добавляет элемент на вывод 1 раз. Не вписывает этот элемент в список spis1.pop(индекс элемента) - удаляет элемент с указанным индексом spis1.reverse - переворачивает список spis1.insert(индекс, элемент) - вставляет элемент после элемента с указанным индексом spis1.extend(список) - присоединяет в конец другой список spis1.remove(элемент) - удаляет первый встреченный элемент равный указанному spis1.sort() - сортирует список в порядке возрастания spis1.copy() - создает поверхностную копию(shallow copy) spis1.index(элемент) - возвращает индекс первого соответсвующего элемента spis1.clear() - очищает список spis1.count(элемент) - считает кол-во соответствующих элементов
Попробую применить каждую из функций:
```py
spisok = [1, 2, 4, 5]
spisok.remove(2)
print(spisok)
[1, 4, 5]
spisok.extend([4, 5, 6])
print(spisok)
[1, 4, 5, 4, 5, 6]
spisok.sort()
print(spisok)
[1, 4, 4, 5, 5, 6]
spisok.reverse(),print(spisok)
[6, 5, 5, 4, 4, 1]
(None, None)
spisok.reverse()
print(spisok)
[1, 4, 4, 5, 5, 6]
kopiya = spisok.copy()
print(kopiya)
[1, 4, 4, 5, 5, 6]
print(kopiya.count(5))
2
print(spisok.index(4))
1
kopiya.clear(),print(kopiya)
[]
(None, None)
spisok.insert(2, 3) # Вставить 3 на позицию с индексом 2
print(spisok)
[1, 2, 3, 4, 5]
```
Списки могут быть вложенными:
```py
spis2=[spis1,[4,5,6,7]]
@@ -161,3 +224,119 @@ spis1
spis2
[[111, 78, 'New item', 'Меня зовут: \n Соловьёва Е. Д.'], [4, 5, 6, 7]]
```
spis1 изменился потому, что в Python списки передаются по ссылке, а не по значению. Когда мы изменяем элемент через spis2[0][1], мы фактически изменяем тот же объект, на который указывает spis1
Далее я создала список включающий объекты разных типов: число, строка, логическое значение, список:
```py
spis3=[1,"one",True,spis1]
spis3
[1, 'one', True, [111, 78, 'New item', 'Меня зовут: \n Соловьёва Е. Д.']]
```
## 8.2. Кортеж
Работа с кортежами - их нельзя изменять, но можно переопределять, таким образом внося изменения.
```py
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2)
kort1= kort1+(ss1b,)
kort2=kort1[:2]+kort1[3:]
kort1.index(2)
4
kort1.count(222)
1
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#115>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
```
Создам кортеж с элементами разных типов: число, строка, список, кортеж:
```py
kortezh = (1,'one',[1, 1, 1],(1,2,3))
print(kortezh)
(1, 'one', [1, 1, 1], (1, 2, 3))
```
## 8.3. Словарь
Работа со словарями. Ключи - неизменяемы.
```py
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
dic1['Orel']
56
dic1['Pskov']=78
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
sorted(dic1.keys())
['Orel', 'Pskov', 'Saratov', 'Vologda']
sorted(dic1.values())
[45, 56, 78, 145]
dic2={1:'mean',2:'standart deviation',3:'correlation'}
dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
dic3['statistics'][2]
'standart deviation'
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
dic5
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Соловьёва Е. Д.'}
```
Свой словарь состоит из 5 элементов, потому что мы "сшили" два контейнера, длина определилась по минимальному кол-ву.
```py
testlist = ['pink','yellow','black','green','red']
testkort = ('P','Y','B','G','R','T','Q')
dictest=dict(zip(testkort,testlist))
dictest
{'P': 'pink', 'Y': 'yellow', 'B': 'black', 'G': 'green', 'R': 'red'}
```
## 8.4. Множество
Рассмотрим пример создания множества:
```py
mnoz1
{'микропроцессор', 'двигатель', 'линия связи', 'датчик'}
len(mnoz1)
4
'датчик' in mnoz1
True
mnoz1.add('реле')
mnoz1.remove('линия связи')
mnoz1
{'микропроцессор', 'реле', 'двигатель', 'датчик'}
```
Создам свой пример множества
```py
mnoz2={1,2,3,(222,'Kortezh',77+8j)}
222 in mnoz2
False
Kortezh in mnoz2
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
Kortezh in mnoz2
NameError: name 'Kortezh' is not defined
(222, 'Kortezh', 77+8j) in mnoz2
True
```
## 9.3. Самостоятельное создание кортежа и применение его методов.
```py
kort.count(2)
3
kort.index(4)
4
```
## 9.3. Самостоятельное создание словаря и множества, применение их методов.
```py
dict = {'a': 1, 'b': 2, 'c': 3}
dict.keys() # Все ключи
dict_keys(['a', 'b', 'c'])
dict.values()# Все значения
dict_values([1, 2, 3])
dict.items()# Пары ключ-значение
dict_items([('a', 1), ('b', 2), ('c', 3)])
dict.update({'d': 4, 'e': 5})# Добавляет новые пары
dict
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
dict.pop('b') # Удаляет ключ 'b' и возвращает значение
{'a': 1, 'c': 3, 'd': 4, 'e': 5}
```
Множества
```py
kort.count(2)
3
kort.index(4)
4
```

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

@@ -0,0 +1,36 @@
# Общее контрольное задание по теме 2
Соловьёва Екатерина, А-01-23
## Задание
1. Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
2. Создать переменную со значением, совпадающим с первой буквой из familia.
3. Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
4. Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
5. Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
6. Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
7. Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
8. Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
# Решение
```py
familia='Solovyova'
familia
'Solovyova'
bukva = familia[0]
bukva
'S'
sp_kw = kw.kwlist
sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
sp_kw.remove('nonlocal')
sp_kw
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
kort_nam = ('Екатерина', 'Фёдор', 'Елизавета','Никита')
type(kort_nam)
<class 'tuple'>
kort_nam = kort_nam + ("Дима", "Максим")
kort_nam.count('Дима')
1
dict_bas = {'Строка': [familia,bukva], 'Список': sp_kw, 'Кортеж': kort_nam}
dict_bas
{'Строка': ['Solovyova', 'S'], 'Список': ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'], 'Кортеж': ('Екатерина', 'Фёдор', 'Елизавета', 'Никита', 'Дима', 'Максим')}
```

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

@@ -0,0 +1,14 @@
# Индивидуальное контрольное задание по теме 2
Соловьёва Екатерина, А-01-23
## Задание
Пусть создан объект
gg=(11,2,-4,23,12,56)
К какому классу относится этот объект? Подсчитайте сумму его элементов, расположенных на нечетных позициях.
## Решение
```py
gg = (11, 2, -4, 23, 12, 56)
type(gg)
<class 'tuple'>
sum(gg[1::2])
81
```

546
TEMA3/protocol.py Обычный файл
Просмотреть файл

@@ -0,0 +1,546 @@
'Тема 3 Соловьёва Е. Д.'
Python 3.13.6 (tags/v3.13.6:4e66535, Aug 6 2025, 14:36:00) [MSC v.1944 64 bit (AMD64)] on win32
Enter "help" below or click "Help" above for more information.
import os
os.chdir('C:\\Users\\Ekaterina\\OneDrive\\Desktop\\Solovyova\\python-labs\\TEMA3')
logiz1=bool(56)
logiz2=bool(0)
logiz3=bool("Beta")
logiz4=bool("")
logiz1
True
logiz2
False
logiz3
True
logiz4
False
tt1=int(198.6)
tt1
198
tt2=int("-76")
tt2'
SyntaxError: unterminated string literal (detected at line 1)
tt2
-76
tt2=int("-76")
tt4=int("71",8)
type(tt2)
<class 'int'>
tt3=int("B",16)
tt3
11
tt4=int("71",8)
tt4
57
tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
tt4 = int(71, 8)
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
tt4 = int(71, 8)
TypeError: int() can't convert non-string with explicit base
a=int(2)
a
2
flt1=float(789)
flt1
789.0
flt2=float(-6.78e2)
flt2
-678.0
flt3=float("Infinity")
flt3
inf
flt4=float("-inf")
flt4
-inf
hh=123
dv1=bin(hh)
dv1
'0b1111011'
vos1=oct(hh)
vos1
'0o173'
shs1=hex(hh)
shs1
'0x7b'
dv1=int(dv1,2)
dv1
123
vos1=int(vos1,8)
vos1=int(vos1,8)
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
vos1=int(vos1,8)
TypeError: int() can't convert non-string with explicit base
vos1
123
shs1=int(shs1,16)
shs1
123
strk1=str(23.6)
strk1
'23.6'
strk2=str(logiz3)
strk2
'True'
strk3=str(["A","B","C"])
strk3
"['A', 'B', 'C']"
strk4=str(("A","B","C"))
strk4
"('A', 'B', 'C')"
strk5=str({"A":1,"B":2,"C":9})
strk5
"{'A': 1, 'B': 2, 'C': 9}"
print(strk1)
23.6
print(strk2)
True
print(strk3)
['A', 'B', 'C']
print(strk4)
('A', 'B', 'C')
print(strk5)
{'A': 1, 'B': 2, 'C': 9}
type(strk5)
<class 'str'>
spis1=list("Строка символов")
spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
spis2=list((124,236,-15,908))
spis2
[124, 236, -15, 908]
spis3=list({"A":1,"B":2,"C":9})
spis3
['A', 'B', 'C']
spis3 = list({"A":1,"B":2,"C":9}.values())
spis3
[1, 2, 9]
spis3 = list({"A":1,"B":2,"C":9}.items())
spis3
[('A', 1), ('B', 2), ('C', 9)]
spis3 = [value for value in {"A":1,"B":2,"C":9}.values() if value % 2 == 0]
spis3
[2]
print(spis1)
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
kort7=tuple('Строка символов')
SyntaxError: unexpected indent
kort7=tuple('Строка символов')
kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
kort8=tuple(spis2)
kort8
(124, 236, -15, 908)
kort9=tuple({"A":1,"B":2,"C":9})
kort9
('A', 'B', 'C')
del strk5, kort8
fio='Solovyova E D'
spis0=list(fio)
spis0
['S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D']
kort0=tuple(fio)
kort0
('S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D')
strk0=str(kort0)
kort0=tuple(spis0)
kort0
('S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D')
strk0=str(kort0)
strk0
"('S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D')"
strk5
SyntaxError: unexpected indent
strk5
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
kort8
Traceback (most recent call last):
File "<pyshell#99>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
12+7+90
109
5.689e-1 - 0.456
0.11289999999999994
23.6+54
77.6
14-56.7+89
46.3
-6.7*12
-80.4
-234.5/6
-39.083333333333336
a=178/45
type(a)
<class 'float'>
a
3.9555555555555557
b=178//45,b
Traceback (most recent call last):
File "<pyshell#109>", line 1, in <module>
b=178//45,b
NameError: name 'b' is not defined
b=178//45
b
3
type(b)
<class 'int'>
c=-24.6//12.1
c
-3.0
tipe(c)
Traceback (most recent call last):
File "<pyshell#115>", line 1, in <module>
tipe(c)
NameError: name 'tipe' is not defined. Did you mean: 'type'?
type(c)
<class 'float'>
d = 56 // 6.01
d
9.0
print(d)
9.0
type(d)
<class 'float'>
e = 7.54// 2
у
Traceback (most recent call last):
File "<pyshell#122>", line 1, in <module>
у
NameError: name 'у' is not defined
e
3.0
type(e)
<class 'float'>
f = -15 // 4
а
Traceback (most recent call last):
File "<pyshell#126>", line 1, in <module>
а
NameError: name 'а' is not defined
а
Traceback (most recent call last):
File "<pyshell#127>", line 1, in <module>
а
NameError: name 'а' is not defined
f
-4
type(f)
<class 'int'>
148%33
16
12.6%3.8
1.2000000000000002
20 % 3.5
2.5
-17 % 5
3
15.7 % 4
3.6999999999999993
14**3
2744
e=2.7**3.6
SyntaxError: unexpected indent
e=2.7**3.6
14**3.6
13367.830445904418
2.7**3
19.683000000000003
z = complex(6, -8)
z**2
(-28-96j)
2**z
(47.34786346201795+43.06018840625417j)
dv1=9
dv1
9
dv2=~dv1
dv2
-10
7&9
1
7&8
0
7|9
15
7|8
15
14|5
15
14^5
11
h=14
g=h<<2
g
56
g1=h>>1
g1
7
g2=h>>2
g2
3
bin(245)
'0b11110101'
k=245
k<<2
980
m=k<<2
m
980
k>>3
30
bin(456)
'0b111001000'
t=456
t>>5
14
t<<14
7471104
'Система '+'регулирования'
'Система регулирования'
'ля-'*5
'ля-ля-ля-ля-ля-'
['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
signal1=[0]*3+[1]*99
signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
signal2=(0,)*3+(1,)*5+(0,)*7
signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
stroka='Система автоматического управления'
'автомат' in stroka
True
'ку' in ['ку','-']*3
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
False
stroka='Температура = %g %s %g'
print(stroka)
Температура = %g %s %g
stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
stroka='Система'
stroka+=' регулирования'
z
(6-8j)
z=10
zz
Traceback (most recent call last):
File "<pyshell#189>", line 1, in <module>
zz
NameError: name 'zz' is not defined. Did you mean: 'z'?
zz=10
zz/=2
zz
5.0
zz*=5
zz
25.0
n1,n2,n3=(11,-3,'all')
т3
Traceback (most recent call last):
File "<pyshell#196>", line 1, in <module>
т3
NameError: name 'т3' is not defined
n3
'all'
161=/10
SyntaxError: cannot assign to literal
x=161
x=/10
SyntaxError: invalid syntax
161//=10
SyntaxError: 'literal' is an illegal expression for augmented assignment
x//=10
x
16
x=166
x\\=10
SyntaxError: unexpected character after line continuation character
x//=10
x
16
x%=2
x
0
x=167
x=2
x**=4
x
16
n1,n2,n3=[11,-3,'all']
n1,n2,n3='11,-3,'all''
SyntaxError: invalid syntax
n1,n2,n3='11,-3,'a"
SyntaxError: unterminated string literal (detected at line 1)
n1,n2,n3='11,-3,'a' '
SyntaxError: invalid syntax
n1,n2,n3="11,-3,'all' "
Traceback (most recent call last):
File "<pyshell#218>", line 1, in <module>
n1,n2,n3="11,-3,'all' "
ValueError: too many values to unpack (expected 3)
n1, n2, n3 = "11,-3,'a'"
Traceback (most recent call last):
File "<pyshell#219>", line 1, in <module>
n1, n2, n3 = "11,-3,'a'"
ValueError: too many values to unpack (expected 3)
n1, n2, n3 = "11", "-3", "all"
n1, n2, n3 = {11, -3, 'all'}
print(n1, n2, n3)
11 -3 all
print(n1, n2, n3)
11 -3 all
n1, n2, n3 = {'a': 1, 'b': 2, 'c': 3}
print(n1, n2, n3)
a b c
w
Traceback (most recent call last):
File "<pyshell#226>", line 1, in <module>
w
NameError: name 'w' is not defined
v
Traceback (most recent call last):
File "<pyshell#227>", line 1, in <module>
v
NameError: name 'v' is not defined
w=10
v=20
w==v
False
w!=v
True
w<v
True
w>v
False
w<=v
True
w=>v
SyntaxError: invalid syntax
w>=v
False
mnoz1={'pen','book','pen','iPhone','table','book'}
'book' in mnoz1
True
'cap' in mnoz1
False
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
'Vologda' in dic1
True
'Pskov' in dic1
False
56 in dic1.values()
True
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
'UII' in dct1['Depart']
True
dct1['Depart'][1] == 'MM'
False
a=17
SyntaxError: unexpected indent
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1
)
True
x = 10
y = 5
name = "Anna"
result1 = (x > y) and (len(name) == 4) and not (y < 0)
print(result1)
True
(x > y) and (len(name) == 4) and not (y < 0)
True
price=3000
color=blue
Traceback (most recent call last):
File "<pyshell#260>", line 1, in <module>
color=blue
NameError: name 'blue' is not defined
color='blue'
price1=4000
(price<price1) and (color=='red')
False
w=v=10
w is v
True
w1=['A','B']
v1=['A','B']
w1 is v1
False
stroka='Микропроцессорная система управления'
dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
stroka.find('пр')
5
stroka.count("с")
4
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
spis22=stroka.split(' ')
stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
stroka3=" ".join(spis22)
stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
strk1.format(1,89.7)
'23.6'
strk1='Момент времени 23.6 , значение = 23.6'
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk1 = 'Момент времени {}, значение = {}'
strk1.format(1, 89.7)
'Момент времени 1, значение = 89.7'
strk3='Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
spsk='a','b','c','d','e','f'
spsk=[a,b,c,d,e,f]
spsk.pop(2)
-3.0
spsk
[17, -6, 9.0, 35.719843790663525, -4]
spsk=['a,b,c,d,e,f']
spsk
['a,b,c,d,e,f']
spsk.pop(2)
Traceback (most recent call last):
File "<pyshell#294>", line 1, in <module>
spsk.pop(2)
IndexError: pop index out of range
spsk=['a','b','c','d','e','f']
spsk.pop(2)
'c'
spsk
['a', 'b', 'd', 'e', 'f']
spsk.append('c')
spsk
['a', 'b', 'd', 'e', 'f', 'c']
spsk.insert(2,'a')
spsk
['a', 'b', 'a', 'd', 'e', 'f', 'c']
spsk.count('a')
2

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

@@ -0,0 +1,610 @@
# Отчёт по теме 3
Соловьёва Екатерина, А-01-23
## 1. Начало работы с оболочкой IDLE.
## 2. Преобразование простых базовых типов объектов.
## 2.1. Преобразование в логический тип с помощью функции bool(<Объект>).
```py
logiz1=bool(56)
logiz2=bool(0)
logiz3=bool("Beta")
logiz4=bool("")
logiz1
True
logiz2
False
logiz3
True
logiz4
False
```
* False : Пустые значения, ноль и None.
* True : Почти все остальное.
## 2.2. Преобразование в целое десятичное число объекта с заданной системой счисления.
Осуществляется с помощью функции int(<Объект>[,<Система счисления, в которой определен объект>]). По умолчанию система счисления принимается десятичной.
```py
tt1=int(198.6) #Функция получает уже готовое число 198.6 (тип float) и просто отбрасывает дробную часть.
tt1
198
tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
tt2
-76
tt3=int("B",16)
tt3
11
tt4=int("71",8) #"71"(8)= 7 × 8¹ + 1 × 8⁰ = 7 × 8 + 1 × 1 = 56 + 1 = 57
tt4 = int(71, 8)
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module> #Это вызовет ошибку, потому что функция int() не может применить систему счисления к уже готовому числу.
tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76' #int() не умеет обрабатывать дробные числа в строках - она ожидает только целые числа.
```
## 2.3. Преобразование целых чисел или строк символов в вещественное число – с помощью функции float(<Объект>).
```py
flt1=float(789)
flt1
789.0
flt2=float(-6.78e2)
flt2
-678.0
flt3=float("Infinity")
flt3
inf
flt4=float("-inf")
flt4
-inf
```
## 2.4. Преобразование десятичных чисел в другие системы счисления.
```py
hh=123
dv1=bin(hh) #Преобразование в строку с двоичным представлением
dv1
'0b1111011'
vos1=oct(hh)# Преобразование в строку с восьмеричным представлением
vos1
'0o173'
shs1=hex(hh)# Преобразование в строку с шестнадцатеричным представлением
shs1
'0x7b'
```
Выполню обратные преобразования объектов:
```py
dv1=int(dv1,2)
dv1
123
vos1=int(vos1,8)
vos1
123
shs1=int(shs1,16)
shs1
123
```
## 3. Изучите преобразования более сложных базовых типов объектов.
## 3.1. Преобразование в строку символов с помощью функции str(<Объект>).
```py
strk1=str(23.6)
strk2=str(logiz3)
strk3=str(["A","B","C"])#Преобразуем список
strk4=str(("A","B","C"))#Преобразуем кортеж
strk5=str({"A":1,"B":2,"C":9})#Преобразуем словарь
print(strk1)
23.6
print(strk2)
True
print(strk3)
['A', 'B', 'C']
print(strk4)
('A', 'B', 'C')
print(strk5)
{'A': 1, 'B': 2, 'C': 9}
```
## 3.2. Преобразование элементов объекта в список с помощью функции list(<Объект>).
```py
spis1=list("Строка символов")
spis1
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
spis2=list((124,236,-15,908))
spis2
[124, 236, -15, 908]
spis3=list({"A":1,"B":2,"C":9})# возвращает список ключей по умолчанию
spis3
['A', 'B', 'C']
```
Попробую создать списки из других частей того же словаря:
```py
spis3 = list({"A":1,"B":2,"C":9}.values()) #cписок значений
spis3
[1, 2, 9]
spis3 = list({"A":1,"B":2,"C":9}.items()) #cписок пар (ключ, значение)
spis3
[('A', 1), ('B', 2), ('C', 9)]
spis3 = [value for value in {"A":1,"B":2,"C":9}.values() if value % 2 == 0] #cписок только четных значений
spis3
[2]
```
## 3.3. Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
```py
kort7=tuple('Строка символов')
kort7
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
kort8=tuple(spis2)
kort8
(124, 236, -15, 908)
kort9=tuple({"A":1,"B":2,"C":9})# возвращает список ключей по умолчанию
kort9
('A', 'B', 'C')
```
## 3.4. Удаление объектов.
Проверю остались ли объекты в оперативной памяти после применения операции del:
```py
del strk5, kort8
strk5
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
strk5
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
kort8
Traceback (most recent call last):
File "<pyshell#99>", line 1, in <module>
kort8
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
```
Создам строку со своей фамилией и инициалами, преобразую её в список, затем список – в кортеж, кортеж – в строку
```py
fio='Solovyova E D'
spis0=list(fio)
spis0
['S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D']
kort0=tuple(spis0)
kort0
('S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D')
strk0=str(kort0)
strk0
"('S', 'o', 'l', 'o', 'v', 'y', 'o', 'v', 'a', ' ', 'E', ' ', 'D')"
```
## 4. Арифметические операции.
## 4.1 Сложение и вычитание (+ и -)
```py
12+7+90 # Сложение целых чисел
109
5.689e-1 - 0.456 #Вычитание вещественных чисел
0.11289999999999994
23.6+54 #Сложение вещественного и целого чисел
77.6
14-56.7+89 # Сложение и вычитание целых и вещественных чисел
46.3
```
## 4.2 Умножение (*)
```py
-6.7*12 #Умножение вещественного числа на целое число
-80.4
```
## 4.3. Деление (/).
Результатом деления всегда будет вещественное число!
```py
-234.5/6 #Деление вещественного числа на целое
-39.083333333333336
a=178/45 #Деление двух целых чисел
type(a)
<class 'float'>
a
3.9555555555555557
```
## 4.3 Деление с округлением вниз (//).
Здесь результат может быть целым или вещественным.
```py
b=178//45 #Деление двух целых чисел
b
3
type(b)
<class 'int'>
c=-24.6//12.1 #Деление двух вещественных чисел
c
-3.0
type(c)
<class 'float'>
d = 56 // 6.01 #Деление целого числа на вещественное
d
9.0
type(d)
<class 'float'>
e = 7.54// 2 #Деление вещественного числа на целое
e
3.0
type(e)
<class 'float'>
f = -15 // 4 #Деление отрицательных чисел
f
-4
type(f)
<class 'int'>
```
Вывод:
* int - если оба операнда целые
* float - если хотя бы один операнд вещественный
## 4.5. Получение остатка от деления (%).
Формула остатка от деления:
a % b = a - b * (a // b)
```py
148%33 #Остаток от деления двух целых чисел
16
12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
20 % 3.5 #Остаток от деления целого на вещественное
2.5
-17 % 5 Остаток от деления отрицательного на целое
3
15.7 % 4 #Остаток от деления вещественного на целое
3.6999999999999993
```
## 4.6. Возведение в степень (**).
```py
14**3 #Целое число возводится в целую степень
2744
e=2.7**3.6 #Вещественное число возводится в вещественную степень
14**3.6 #Целое число возводится в вещественную степень
13367.830445904418
2.7**3 #Вещественное число возводится в целую степень
19.683000000000003
```
операции недоступные с комплексными числами:
* Целочисленное деление
z // 2
* Остаток от деления
z % 2
*Сравнения (<, >, <=, >=)
z > 2
Доступные:
* Сложение
* Вычитание
* Умножение
* Деление
* Возведение в степень
## 5. Операции с двоичными представлениями целых чисел.
## 5.1. Двоичная инверсия (~).
Значение каждого бита в представлении числа заменяется на противоположное значение (0 на 1, 1 на 0).
```py
dv1=9
dv2=~dv1
dv2
-10
bin(dv1)
'0b1001'
bin(dv2)
'-0b1010'
```
В Python операция ~x эквивалентна -x - 1, а работает это так:
9: 0000 1001
~9: 1111 0110
## 5.2. Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
```py
7&9 # 0111 и 1001 = 0001
1
7&8 # 0111 и 1000 = 0000
0
```
## 5.3. Двоичное «ИЛИ» (|)
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда равны 0
```py
7|9 # 111 или 1001 = 1111
15
7|8 # 111 или 1000 = 1111
15
14|5 # 1110 или 0101 = 1111
15
```
## 5.4. Двоичное «исключающее ИЛИ»(^)
Побитовое сравнение двоичных представлений чисел и 0 получается, только если оба сравниваемых разряда имеют одинаковые значения – оба 0 или оба 1.
```py
14^5 # 1110 исключающее или 0101 = 1011
11
```
## 5.5. Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>) с дополнением нулями, соответственно справа или слева.
```py
h=14 #Двоичное представление = 1110
g=h<<2 # Новое двоичное представление = 111000
g
56
g1=h>>1 # Новое двоичное представление = 0111
g1
7
g2=h>>2 # Новое двоичное представление = 0011
g2
3
```
Свои примеры:
```py
k=245
bin(245)
'0b11110101'
k<<2
980
k>>3
30
bin(456)
'0b111001000'
t=456
t>>5
14
bin(14)
'0b1110'
t<<14
7471104
bin(7471104)
'0b11100100000000000000000'
```
## 6. Операции при работе с последовательностями (строками, списками, кортежами).
## 6.1. Объединение последовательностей (конкатенация)(+)
```py
'Система '+'регулирования' #Соединение двух строк символов
['abc','de','fg']+['hi','jkl'] # Объединение двух списков
('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
```
## 6.2. Повторение (*)
```py
'ля-'*5
'ля-ля-ля-ля-ля-'
['ку','-']*3
['ку', '-', 'ку', '-', 'ку', '-']
('кис','-')*4
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
signal1=[0]*3+[1]*99
signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
signal2=(0,)*3+(1,)*5+(0,)*7
signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
## 6.3. Проверка наличия заданного элемента в последовательности (in)
```py
stroka='Система автоматического управления'
'автомат' in stroka #Наличие подстроки в строке
True
'ку' in ['ку','-']*3 #Наличие контекста в списке
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
```
## 6.4. Подстановка значений в строку с помощью оператора «%»
```py
# Пример 1.
stroka='Температура = %g %s %g'
stroka % (16,' меньше ',25)
# Пример 2. Именованная подстановка из словаря.
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
```
## 7. Оператор присваивания
## 7.1. Обычное присваивание значения переменной (=)
```py
zz=-12
```
## 7.2. Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
```py
zz+=5 # Значение zz увеличивается на 5
zz-=3 # Значение уменьшается на 3
stroka='Система'
stroka+=' регулирования'
```
## 7.3. Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
```py
zz=10
zz/=2
zz
5.0
zz*=5
zz
25.0
```
## 7.4. Операции деления с округлением вниз (//=), получения остатка от деления (%=) и возведения в степень(**=).
```py
x=166
x//=10 #округление вниз
x
16
x%=2 #получение остатка от деления
x
0
x=167
x=2
x**=4 #возведение в степень
x
16
```
## 7.5. Множественное присваивание
```py
w=v=10 # Переменным присваивается одно и то же значение
n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
```
Проверим можно ли вместо кортежа справа использовать строку, список, словарь, множество
```py
n1, n2, n3 = "11", "-3", "all"
n1,n2,n3=[11,-3,'all']
n1, n2, n3 = {11, -3, 'all'}
print(n1, n2, n3)
11 -3 all
n1, n2, n3 = {'a': 1, 'b': 2, 'c': 3}
print(n1, n2, n3)
a b c
```
Вывод: всё работает, но в случае словаря присваиваются ключи
## 8. Логические операции – при создании логических выражений, дающих в результате вычисления значения True или False.
## 8.1. Операции сравнение: равенство (==), не равно (!=), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=)
```py
w=10
v=20
w==v
False
w!=v
True
w<v
True
w>v
False
w<=v
True
w>=v
False
```
## 8.2. Проверка наличия заданного элемента в последовательности или во множестве, а также проверка наличия ключа в словаре (in).
```py
# Операции с множеством
mnoz1={'pen','book','pen','iPhone','table','book'}
'book' in mnoz1
True
'cap' in mnoz1
False
# Операции со словарем
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
'Vologda' in dic1
True
'Pskov' in dic1
False
56 in dic1.values()
True
dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
'UII' in dct1['Depart']
True
dct1['Depart'][1] == 'MM'
False
```
## 8.3. Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
```py
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
x = 10
y = 5
name = "Anna"
(x > y) and (len(name) == 4) and not (y < 0)
True
price=3000
color='blue'
price1=4000
(price<price1) and (color=='red')
False
```
## 8.4. Проверка ссылок переменных на один и тот же объект (is).
```py
w=v=10
w is v
True
w1=['A','B']
v1=['A','B']
w1 is v1
False
```
Вывод: is проверяет, ссылаются ли переменные на один и тот же объект в памяти, а не на одинаковые значения
## 9. Операции с объектами, выполняемые с помощью методов.
```py
stroka='Микропроцессорная система управления'
dir(stroka)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
```
## 9.1. Методы для работы со строками.
```py
stroka.find('пр')
5
stroka.count("с")
4
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
spis22=stroka.split(' ')
stroka.upper()
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
stroka3=" ".join(spis22)
stroka3.partition("с")
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с")
('Микропроцессорная си', 'с', 'тема управления')
strk1.format(1, 89.7)
'Момент времени 1, значение = 89.7'
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk3='Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
## 9.2. Методы для работы со списками.
```py
spsk=['a','b','c','d','e','f'] # удалить второй по счёту элемент
spsk.pop(2)
'c'
spsk
['a', 'b', 'd', 'e', 'f']
spsk.append('c') # Добавть с в конец списка
spsk
['a', 'b', 'd', 'e', 'f', 'c']
spsk.insert(2,'a') # Вставить a на позицию с индексом 2
spsk
['a', 'b', 'a', 'd', 'e', 'f', 'c']
spsk.count('a') # Подсчёт количества 'а' в списке
2
```
## 9.3. Самостоятельное создание кортежа и применение его методов.
```py
kort = (1, 2, 3, 2, 4, 2, 5)
len(kort)
7
max(kort)
5
min(kort)
1
sorted(kort)
[1, 2, 2, 2, 3, 4, 5]
kort.index(2)
1
kort.count(2)
3
```
## 9.3. Самостоятельное создание словаря и множества, применение их методов.
```py
dict = {'a': 1, 'b': 2, 'c': 3}
dict.keys() # Все ключи
dict_keys(['a', 'b', 'c'])
dict.values()# Все значения
dict_values([1, 2, 3])
dict.items()# Пары ключ-значение
dict_items([('a', 1), ('b', 2), ('c', 3)])
dict.update({'d': 4, 'e': 5})# Добавляет новые пары
dict
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
dict.pop('b') # Удаляет ключ 'b' и возвращает значение
{'a': 1, 'c': 3, 'd': 4, 'e': 5}
```
Множества
```py
mnoz1 = {1, 2, 3, 4, 5}
mnoz2 = {4, 5, 6, 7, 8}
mnoz1.union(mnoz2) # Объединение
{1, 2, 3, 4, 5, 6, 7, 8}
mnoz1.intersection(mnoz2)# Пересечение
{4, 5}
mnoz1.difference(mnoz2) # разность (возвращает элементы, которые есть в mnoz1, но нет в mnoz2)
{1, 2, 3}
mnoz1.symmetric_difference(mnoz2)# Симметричная разность возвращает элементы, которые есть только в одном из множеств
{1, 2, 3, 6, 7, 8}
mnoz1.add(6) # Добавляет элемент
mnoz1
{1, 2, 3, 4, 5, 6}
mnoz2.remove(3)# Удаляет конкретный элемент (ошибка если нет)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
mnoz2.remove(3)
KeyError: 3
mnoz1.remove(3)
mnoz1
{1, 2, 4, 5, 6}
```

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

@@ -0,0 +1,53 @@
# Общее контрольное задание по теме 3
Соловьёва Екатерина, А-01-23
## Задание
1. Преобразовать восьмеричное значение 45 в целое число.
2. Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
3. Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
4. Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
5. Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
6. Определить список методов, доступных у ранее созданного словаря D. Поочередно использовать его методы keys и values, определить, что можно получить с применением этих методов.
7. Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
## Решение
```py
#1
w=int('45',8)
w
37
#2
D={"усиление":23, "запаздывание":12, "постоянная времени":78}
keys= list(D.keys())
keys
['усиление', 'запаздывание', 'постоянная времени']
values = list(D.values())
values
[23, 12, 78]
kort=(keys,values)
kort
(['усиление', 'запаздывание', 'постоянная времени'], [23, 12, 78])
# Списки используются, когда нужно работать с изменяемым набором элементов
# Кортежи используются, когда нужно создать неизменяемую коллекцию данных (например, для хранения констант)
#3
((1768 // 24.8) % 3) ** 2.4
5.278031643091577
#4
((~(13 & 27)) ^ 14) << 2
-32
#5
spisok = ['колебат'] * 4
'аткол' in (spisok[1] + spisok[2])
True
#6
dir(D)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__','__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
keys
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
values
dict_values([23, 12, 78])
spis[spis.index("-")] = ","
spis
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
spis.remove('данного')
spis
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
```

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

@@ -0,0 +1,56 @@
# Индивидуальное контрольное задание по теме 3
Соловьёва Екатерина, А-01-23
## Задание
1) Для чего предназначено предложение "Окно (Window)" главного меню?
2) Создайте объект-словарь с 8 элементами: ключи - фамилии студентов группы, значения - средние баллы по итогам сессии. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
3) Пополните словарь еще двумя элементами. Отобразите получившийся объект. Напишите инструкцию, позволяющую для указанного студента из словаря получить значение его среднего балла. Напишите инструкцию для получения списка всех студентов, представленных в словаре.
4) У одного из студентов средний балл оказался на 0.2 меньше указанного в словаре. Напишите инструкцию, исправляющую это значение в словаре. Отобразите полученный объект. Напишите инструкцию, вычисляющую общий средний балл для всех студентов, представленных в словаре.
5) Создайте список из названий 4-х учебных дисциплин и список с числом часов в неделю на изучение каждой из 4-х дисциплин. Напишите инструкцию, позволяющую создать словарь, объединяющий эти два списка.
## Решение
1) Предложение «Окно (Window)» главного меню предназначено для управления открытыми на экране окнами.
С его помощью можно упорядочивать, скрывать окна и переходить из одного окна в другое. Кроме того, команды данного меню позволяют активизировать любое открытое окно.
2)
```py
spisok = {"Соловьёва": 4.5,"Лыкова": 4.7,"Подольский": 4.0,"Мельников": 3.0,"Филиппова": 4.5,"Терехов": 5.0,"Ходюк": 4.3,"Тимошенко": 4.6}
type(spisok)
<class 'dict'>
dir(spisok)
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
```
3)
```py
spisok["Таболин"] = 3.5
spisok["Филиппов"] = 3.7
spisok
{'Соловьёва': 4.5, 'Лыкова': 4.7, 'Подольский': 4.0, 'Мельников': 3.0, 'Филиппова': 4.5, 'Терехов': 5.0, 'Ходюк': 4.3, 'Тимошенко': 4.6, 'Таболин': 3.5, 'Филиппов': 3.7}
spisok.keys()
dict_keys(['Соловьёва', 'Лыкова', 'Подольский', 'Мельников', 'Филиппова', 'Терехов', 'Ходюк', 'Тимошенко', 'Таболин', 'Филиппов'])
spisok.get('Соловьёва')
4.5
```
4)
```py
spisok['Мельников'] -= 0.2
spisok
{'Соловьёва': 4.5, 'Лыкова': 4.7, 'Подольский': 4.0, 'Мельников': 2.8, 'Филиппова': 4.5, 'Терехов': 5.0, 'Ходюк': 4.3, 'Тимошенко': 4.6, 'Таболин': 3.5, 'Филиппов': 3.7}
summa = sum(spisok.values())
average= summa / len(spisok)
average
4.16
```
5)
```py
subjects = ["Математический анализ", "Физика", "ТАУ", "ИАД"]
hours = [6, 4, 5, 3]
subjects_dict = dict(zip(subjects, hours))
subjects_dict
{'Математический анализ': 6, 'Физика': 4, 'ТАУ': 5, 'ИАД': 3}
```py

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

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

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

После

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

384
TEMA4/protocol.py Обычный файл
Просмотреть файл

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

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

@@ -0,0 +1,314 @@
# Отчёт по Теме 4
Соловьёва Екатерина А-01-23
## 1. Запуск интерактивной оболочки IDLE
## 2. Стандартные функции, находящиеся в модуле builtins
## 2.1. Функция round – округление числа с заданной точностью.
Получим справку по назначению этой функции
```py
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.
```py
s=round(123.456,1)
ss=round(123.456,0)
type(ss)
<class 'float'>
type(s)
<class 'float'>
```
оба числа типа float. Отличие только в значении после запятой
```py
round(123.456)
123
type(123)
<class 'int'>
```
Без второго аргумента возвращает целое число.
## 2.2. Функция range – создание последовательности целых чисел с заданным шагом
```py
gg=range(76,123,9)
gg
range(76, 123, 9)
list(gg)
[76, 85, 94, 103, 112, 121]
```
эта инструкция создает, так называемый, «итерируемый объект» класса range. Чтобы увидеть получившуюся последовательность чисел, его надо преобразовать, например, в список
```py
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]
```
Значения: от 0 до 22
Шаг: 1
## 2.3. Функция zip
zip – создание общего объекта, элементами которого являются кортежи, составленные из элемен-тов двух или более объектов-последовательностей (zip – застежка-«молния»). Длина результиру-ющего объекта равна длине самого короткого объекта из двух аргументов функции.
```py
list(gg)
[76, 85, 94, 103, 112, 121]
qq = ["Соловьёва", "Лыкова", "Филиппова", "Мельников"]
ff=zip(gg,qq)
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
```
Количество элементов: 3 (по длине короткого списка gg)
ff[0] вызовет ошибку, к объекту zip нельзя обращаться по индексу
## 2.4. Функция eval – вычисление значения выражения, корректно записанного на языке Python и представленного в виде символьной строки.
```py
fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=5
fff
5.0
dan
-131.0
```
## 2.5. Функция exec – чтение и выполнение объекта-аргумента функции (Этот объект должен представлять собой строку символов с совокупностью инструкций на языке Python)
```py
exec(input('введите инструкции:'))
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
gg
221.456
```
## 2.6. Самостоятельное изучение функций abs, pow, max, min, sum, divmod, len, map.
```py
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']
```
## 3. Функции из стандартного модуля math – совокупность разнообразных математических функций.
```py
math.sin(3.14)
0.0015926529164868282
math.acos(0.5)
1.0471975511965979
math.degrees(1)
57.29577951308232
math.radians(57.29577951308232)
1.0
math.exp(1)
2.718281828459045
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
```
## 4. Функции из модуля cmath – совокупность функций для работы с комплексными числами.
```py
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
```
## 5. Стандартный модуль random – совокупность функций для выполнения операций с псевдослучайными числами и выборками.
```py
import random
dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_fabs', '_floor', '_index', '_inst', '_isfinite', '_lgamma', '_log', '_log2', '_os', '_parse_args', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', 'betavariate', 'binomialvariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'main', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
help(random.seed)
Help on method seed in module random:
seed(a=None, version=2) method of random.Random instance
Initialize internal state from a seed.
The only supported seed types are None, int, float,
str, bytes, and bytearray.
None or no argument seeds from current time or from an operating
system specific randomness source if available.
If *a* is an int, all bits are used.
For version 2 (the default), all of the bits are used if *a* is a str,
bytes, or bytearray. For version 1 (provided for reproducing random
sequences from older versions of Python), the algorithm for str and
bytes generates a narrower range of seeds.
random.seed() #эта функция не имеет возвращаемых значений
```
Далее самостоятельно изучу и попробую применить следующие функции: random (равно-мерно распределенное случайное число), uniform (равномерно распределенное случайное число), randint (случайные целые числа), gauss (нормально распределенное случайное число), randint (случайное целое число), choice (случайный выбор из совокупности), shuffle (случайная переста-новка элементов списка), sample (случайный выбор подмножества элементов), betavariate(случайное число с бета-распределением), gammavariate(случайное число с гамма-распределением).
```py
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)
lst
[3, 2, 1]
random.sample([1,2,3,4], 2)
[4, 2]
random.betavariate(2, 5)
0.27219690103691246
random.gammavariate(2, 1)
2.5239555636492557
```
Создам список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
```py
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]
```
## 6. Функции из модуля time – работа с календарем и со временем.
```py
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
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)
print(f"Год: {local_time.tm_year}")
Год: 2025
```
Изучу и попробую применить функции: asctime (преобразование представления времени из кортежа в строку) , ctime (преобразование времени в секундах, прошедшего с начала эпохи, в строку), sleep (прерывание работы программы на заданное время), mktime (преобразова-ние времени из типа кортежа или struct_time в число секунд с начала эпохи). Обратное преобразование из секунд в местное время осуществляется той же функцией localtime()
time.localtime(c1)
```py
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)
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)
```
## 7. Графические функции.
```py
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()
```
![График](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]
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)
<BarContainer object of 3 artists>
pylab.show()
```
Получились следующие графики
![График](hist.png)
![График](bar.png)
## 8. Самостоятельное изучение состава статистического модуля statistics.
```py
data = [1, 2, 2, 3, 3, 3, 4, 4, 5]
import statistics
sred = statistics.mean(data) # среднее значение
moda = statistics.mode(data) # Мода (наиболее частое значение)
often
3
mediana = statistics.median(data) # медиана
mediana
3
```

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()
```