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

...

23 Коммитов
main ... main

Автор SHA1 Сообщение Дата
ShabatovAA ad008d92af tema9
2 дней назад
ShabatovAA 3a7bf8c739 temka8
2 дней назад
ShabatovAA 811df1c273 7
2 недель назад
ShabatovAA 22fca0630e tema6
1 месяц назад
ShabatovAA ef0117beae idz
1 месяц назад
ShabatovAA cb7cd8cbe1 ОКЗ
1 месяц назад
ShabatovAA c1c454669f Отчет
1 месяц назад
ShabatovAA 8befdf08c0 idz
2 месяцев назад
ShabatovAA b4c1f99ae6 Идз
2 месяцев назад
ShabatovAA 0ec5902d28 Фотки
2 месяцев назад
ShabatovAA e1f2ba152a Отчет
2 месяцев назад
ShabatovAA 98c76a496c Тест 1
2 месяцев назад
ShabatovAA 0f7b19a9b7 Тест 1
2 месяцев назад
ShabatovAA 562ff3ff39 Общее контрольное задание
2 месяцев назад
ShabatovAA c2f1daf6d1 Отчет
2 месяцев назад
ShabatovAA f54ab51dd4 Общее контрольное задание
3 месяцев назад
ShabatovAA 5c377f8c79 Общее контрольное задание
3 месяцев назад
ShabatovAA 66412c29d2 Итоговый отчет
3 месяцев назад
ShabatovAA 7fe269d81e Итоговый отчет
3 месяцев назад
ShabatovAA 156eae5859 Итоговый отчет
3 месяцев назад
ShabatovAA 4805bffa12 Итоговый отчет
3 месяцев назад
ShabatovAA 6c5bb752f3 Тема 1
3 месяцев назад
u207-12 2322fa9196 не доделал отчет
3 месяцев назад

@ -0,0 +1,5 @@
#Программа по Теме 1. Шабатов Андрей
print('Hello')
h=input('Your name=')
import os
os.chdir('C:\\Users\\u207-12\\Desktop\\python-labs\\TEMA1')

Двоичные данные
TEMA1/cache.png

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

После

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

Двоичные данные
TEMA1/clock.png

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

После

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

@ -0,0 +1,134 @@
# Отчет по теме 1. Шабатов Андрей А-02-23
## 1. На рабочем диске была создана папка, в которой хранятся все темы
## 2. Запуск Python
## 3. Изучил диалоговое окно и ввел пробную инструкцию
```py
print('Hello')
Hello
```
## 4. Выполнил инструкцию, которая потребовала текст с клавиатуры
```py
h=input('Your name=')
Your name=Andruxa
```
## 5. Закрыл диалоговое окно
```py
exit()
```
## 6. Запустил IDLE Python
## 7. Изучил главное командное окно
## 8. Настройка рабочего каталога
```py
import os
os.chdir('C:\\Users\\u207-12\\Desktop\\python-labs\\TEMA1')
```
## 9. Изучил главное меню. В настройках изменил шрифт и размер начального окна.
## 10 Создал новый файл. Cохранил его в рабочем каталоге под названием Pr0.py и запустил его тремя способами:
1) через меню редактора
2) с помощью инструкции import Pr0
3) c помощью клавиши F5(быстрый запуск).
```py
#Программа по Теме 1. Шабатов Андрей
print('Hello')
h=input('Your name=')
import os
os.chdir('C:\\Users\\u207-12\\Desktop\\python-labs\\TEMA1')
```
```py
Hello
Your name=123
```
## 11. Запустил программу prb1.py и изучил возможность повторения введенах ранее команд
```py
import prb1
Как Вас зовут? andruxa
Привет, andruxa
```
## 12-13. Запустил файл Pr0.cpython-34.pyc в текстовом редакторе
![](cache.png)
Компиляция необходима, для того чтобы оптимизировать запуск программы. Также она позволяет переводить программу в машинный код.
## 14. Изучил раздел помощи
```py
help(print)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
help(print);help(input)
Help on built-in function print in module builtins:
print(*args, sep=' ', end='\n', file=None, flush=False)
Prints the values to a stream, or to sys.stdout by default.
sep
string inserted between values, default a space.
end
string appended after the last value, default a newline.
file
a file-like object (stream); defaults to the current sys.stdout.
flush
whether to forcibly flush the stream.
Help on built-in function input in module builtins:
input(prompt='', /)
Read a string from standard input. The trailing newline is stripped.
The prompt string, if given, is printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline is used if available.
```
## 15
### 15.1. Запустил файл prb1.py и изучил перемещение между окнами.
```py
Как Вас зовут? andruxa
Привет, andruxa
```
### 15.2 Запустил программу из файла tdemo_chaos.py
![](tdemo.png)
### 15.3 Оценил возможности использования графических примеров в Python
![](clock.png)
## 16. Завершил работу со средой

Двоичные данные
TEMA1/tdemo.png

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

После

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

@ -0,0 +1,550 @@
# Отчет по теме 2. Шабатов Андрей А-02-23
## 1. Запустил оболочку IDLE и настроил рабочий каталог
```py
import os
os.chdir("C:\\Users\\user\\Desktop\\python-labs\\TEMA2")
```
## 2. Изучил простые объекты
### 2.1 Операции присваивания
```py
f1=16; f2=3
f1,f2
(16, 3)
f1;f2
16
3
```
### 2.2 Функции dir() и type()
```py
dir()
['__annotations__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2']
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']
type(f2)
<class 'int'>
```
### 2.3 Инструкция del
```py
del f1,f2
dir()
['__annotations__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
```
## 3. Изучил правила изменения объектов в Python
```py
gg1=1.6 #значение в виде вещественного числа
gg1
1.6
hh1='Строка' #значение в виде символьной строки
hh1
'Строка'
73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
SyntaxError: invalid decimal literal
and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика!
SyntaxError: invalid syntax
```
## 4. Вывел список ключевых слов
```py
import keyword
keyword.kwlist
['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']
q = keyword.kwlist
q
['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']
```
## 5. Вывел список встроенных идентификаторов и использовал некоторые функции
```py
ex1 = -9999
print(abs(ex1))
9999
ex2 = 'ПРИМЕР2'
print(len(ex2))
7
ex3 = [1,2,3,4,5,6]
print(max(ex3))
6
print(max(ex3),min(ex3))
6 1
exp4 = pow(2,5)
print(exp4)
32
print(round(33.3))
33
print(round(33.5))
34
ex5 = [3,4,6,2,1,5]
print(sorted(ex5))
[1, 2, 3, 4, 5, 6]
print(sum(ex5))
21
ex61 = ('alice','bob','max')
ex62 = (20,35,50)
ex6 = zip(ex61,ex62)
print(list(ex6))
[('alice', 20), ('bob', 35), ('max', 50)]
```
## 6. Убедился в чувствительности регистра
```py
Gg1 = 45
gg1,Gg1
(1.6, 45)
```
## 7. Изучил базовые типы объектов
### 7.1. Логический тип
```py
bb1=True;bb2=False
print((bb1,bb2), type(bb1))
(True, False) <class 'bool'>
```
### 7.2. Простые типы
```py
ii1=-1234567890
ff1=-8.9876e-12
ff1
-8.9876e-12
dv1=0b1101010
type(dv1)
<class 'int'>
vsm1=0o52765
shest1=0x7109af6
type(shest1)
<class 'int'>
cc1=2-3j
a=3.67; b=-0.45
cc2 = complex(a,b)
cc2
(3.67-0.45j)
```
### 7.3. Изучение строк
```py
ss1='Это - строка символов'
ss1
'Это - строка символов'
ss11 = "Это - строка символов"
ss11
'Это - строка символов'
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
print(ss1a)
Это - " строка символов",
выводимая на двух строках
ss1b = "Меня зовут: \n Шабатов А.А."
ss1b
'Меня зовут: \n Шабатов А.А.'
print(ss1b)
Меня зовут:
Шабатов А.А.
mnogo="""Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции."""
print(mnogo)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.
```
**Обращение к частям строки символов с помощью индексов**
```py
ss1[0]
'Э'
ss1[8]
'р'
ss1[-2]
'о'
ss1[6:9]
'стр'
ss1[13:]
'символов'
ss1[:13]
'Это - строка '
ss1[5:-8]
' строка '
ss1[3:17:2]
' тоасм'
ss1[17:3:-2]
'омсаот '
ss1[-4:3:-2]
'омсаот '
ss1[4]='='
Traceback (most recent call last):
File "<pyshell#89>", line 1, in <module>
ss1[4]='='
TypeError: 'str' object does not support item assignment
ss1 = ss1[:4]+'='+ss1[5:]
ss1
'Это = строка символов'
```
**Самостоятельно создал объекты с разными срезами**
```py
ss1b[:6]
'Меня з'
ss1b[:-6]
'Меня зовут: \n Шабато'
ss1b[3:16]
'я зовут: \n Ша'
ss1b[13:]
' Шабатов А.А.'
ss1b[18]
'т'
ss1b[-1]
'.'
ss1b = ss1b[:4]+'!!!'+ss1b[5:]
ss1b
'Меня!!!зовут: \n Шабатов А.А.'
```
### 7.4. Самостоятельно придумал объекты и отобразил их типы
```py
pr1 = 1231
print(type(pr1))
<class 'int'>
pr2 = 23323.44211
print(type(pr2))
<class 'float'>
pr3 = False
print(type(pr3))
<class 'bool'>
pr4 = 1+42j
print(type(pr4))
<class 'complex'>
pr5 = 'rwwqrqrwtqw'
print(type(pr5))
<class 'str'>
```
## 8. Изучил сложные типы объектов
### 8.1. Изучение списков
```py
spis1=[111,'Spisok',5-9j]
print(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]
10
stup[-8::2]
[0, 1, 1, 1]
spis1[1]='Список'
spis1
[111, 'Список', (5-9j)]
len(spis1)
3
```
**Использование методов объектов**
```py
spis1.append('New item')
spis1+['New item']
[111, 'Список', (5-9j), 'New item', 'New item']
spis1
[111, 'Список', (5-9j), 'New item']
spis1.append(ss1b)
spis1
[111, 'Список', (5-9j), 'New item', 'Меня!!!зовут: \n Шабатов А.А.']
spis1.pop(1)
'Список'
spis1
[111, (5-9j), 'New item', 'Меня!!!зовут: \n Шабатов А.А.']
```
**Самостоятельно изучил другие методы**
```py
spisok = [1,'qwfwq',2222]
spisok.insert(0, 'qwer')
spisok
['qwer', 1, 'qwfwq', 2222]
spisok.insert(2,1)
spisok
['qwer', 1, 1, 'qwfwq', 2222]
spisok.remove(1)
spisok
['qwer', 1, 'qwfwq', 2222]
spisok1 = [1,2,3,4]
spisok.extend(spisok1)
spisok
['qwer', 1, 'qwfwq', 2222, 1, 2, 3, 4]
spisok1.clear()
spisok1
[]
spisok2 = [1,32424,42,3,6]
spisok2.sort()
spisok2
[1, 3, 6, 42, 32424]
spisok2.reverse()
spisok2
[32424, 42, 6, 3, 1]
spisok3 = spisok2.copy()
spisok3
[32424, 42, 6, 3, 1]
spisok.count(1)
2
spisok
['qwer', 1, 'qwfwq', 2222, 1, 2, 3, 4]
spisok.index(2)
5
```
**Вложенные списки**
```py
spis2=[spis1,[4,5,6,7]]
spis2
[[111, (5-9j), 'New item', 'Меня!!!зовут: \n Шабатов А.А.'], [4, 5, 6, 7]]
spis2[0][1]
(5-9j)
spis2[0][1]=78
spis2
[[111, 78, 'New item', 'Меня!!!зовут: \n Шабатов А.А.'], [4, 5, 6, 7]]
spis1
[111, 78, 'New item', 'Меня!!!зовут: \n Шабатов А.А.']
```
**Изменив элемент spis2[0][1] во вложенном списке, мы также изменили элемент в списке spis1, потому что это один и тот же объект в памяти**
### 8.2. Объект-кортеж
```py
kort1=(222,'Kortezh',77+8j)
kort1= kort1+(1,2)
kort1
(222, 'Kortezh', (77+8j), 1, 2)
kort1= kort1+(ss1b,)
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня!!!зовут: \n Шабатов А.А.')
kort2=kort1[:2]+kort1[3:]
kort2
(222, 'Kortezh', 1, 2, 'Меня!!!зовут: \n Шабатов А.А.')
```
**Использование методов кортежа**
```py
kort1.index(2)
4
kort1.count(222)
1
kort1
(222, 'Kortezh', (77+8j), 1, 2, 'Меня!!!зовут: \n Шабатов А.А.')
kort1[2]=90
Traceback (most recent call last):
File "<pyshell#183>", line 1, in <module>
kort1[2]=90
TypeError: 'tuple' object does not support item assignment
```
**Самостоятельно создал объект-кортеж**
```py
skort = (1,'aaaa',[3,4,5,6],(True,False))
skort
(1, 'aaaa', [3, 4, 5, 6], (True, False))
skort[3]
(True, False)
skort.index(1)
0
```
### 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]
dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
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 Шабатов А.А.'}
```
**Создал свой объект-словарь**
```py
di1 = (1,2,3,4,5,6,7)
di2 = ['11','22','33','44','55']
di12 = dict(zip(di1,di2))
di12
{1: '11', 2: '22', 3: '33', 4: '44', 5: '55'}
```
В получившимся словаре 5 элементов, потому что функция zip() работает до минимальной длины списка или кортежа
### 8.4 Объект-множество
```py
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
mnoz1
{'двигатель', 'линия связи', 'микропроцессор', 'датчик'}
len(mnoz1)
4
'датчик' in mnoz1
True
mnoz1.add('реле')
mnoz1.remove('линия связи')
mnoz1
{'реле', 'двигатель', 'микропроцессор', 'датчик'}
```
**Создал свое множество**
```py
mn = {'123','456','789','101112','123'}
mn
{'789', '456', '123', '101112'}
'789' in mn
True
'1234' in mn
False
len(mn)
4
mn.add('33333')
mn
{'456', '101112', '789', '123', '33333'}
```
## 9. Закончил сеанс работы в IDLE

@ -0,0 +1,48 @@
# Общее контрольное задание по теме 2
Шабатов Андрей А-02-23
## Задание
•Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
•Создать переменную со значением, совпадающим с первой буквой из familia.
•Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
•Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
•Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
•Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
•Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
•Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
## Решение
```py
familia = 'ShabatovAA'
f = familia[0]
f
'S'
import keyword
sp_kw = keyword.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 = ('Andrew','Stas','Nastya','Jenya')
type(kort_nam)
<class 'tuple'>
kort_nam = kort_nam + ('Dima','Artem')
kort_nam
('Andrew', 'Stas', 'Nastya', 'Jenya', 'Dima', 'Artem')
kort_nam.count('Dima')
1
dict_bas = dict(zip(('str','list','tuple'),(familia,sp_kw,kort_nam)))
dict_bas
{'str': 'ShabatovAA', 'list': ['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'], 'tuple': ('Andrew', 'Stas', 'Nastya', 'Jenya', 'Dima', 'Artem')}
```

@ -0,0 +1,52 @@
# 1. При каких условиях можно создавать программы для среды Python с помощью других текстовых редакторов? Назовите примеры таких редакторов.
Для того чтобы создавать программы на Pythone, текстовый редактор должен сохранять файл с расширением .py
Примеры таких текстовых редакторов:
1) Sublime Text
2) Visual Studio Code
3) PyCharm
4) Блокнот
# 2. Создайте объект, содержащий текст задания данного пункта. Создайте новый объект, в который включите из первого объекта только слова, находящиеся на четных позициях. Напишите инструкции определения класса созданного объекта и списка его атрибутов.
```py
text = 'Создайте объект, содержащий текст задания данного пункта. Создайте новый объект, в который включите из первого объекта только слова, находящиеся на четных позициях. Напишите инструкции определения класса созданного объекта и списка его атрибутов'
text1 = text.split()
text1
['Создайте', 'объект,', 'содержащий', 'текст', 'задания', 'данного', 'пункта.', 'Создайте', 'новый', 'объект,', 'в', 'который', 'включите', 'из', 'первого', 'объекта', 'только', 'слова,', 'находящиеся', 'на', 'четных', 'позициях.', 'Напишите', 'инструкции', 'определения', 'класса', 'созданного', 'объекта', 'и', 'списка', 'его', 'атрибутов']
text1 = text1[1::2]
text1
['объект,', 'текст', 'данного', 'Создайте', 'объект,', 'который', 'из', 'объекта', 'слова,', 'на', 'позициях.', 'инструкции', 'класса', 'объекта', 'списка', 'атрибутов']
type(text1)
<class 'list'>
dir(text1)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
```
# 3. Создайте кортеж, содержащий слова из итогового созданного объекта в п.2. Напишите инструкции подсчета числа слов и отобразите с использованием формата результат на экране по шаблону: "в кортеже ХХ элементов".
```py
kort3 = tuple(text1)
kort3
('объект,', 'текст', 'данного', 'Создайте', 'объект,', 'который', 'из', 'объекта', 'слова,', 'на', 'позициях.', 'инструкции', 'класса', 'объекта', 'списка', 'атрибутов')
print("В кортеже ", len(kort3), " элементов")
В кортеже 16 элементов
```
# 4. Напишите инструкции создания словаря, в котором ключами будут порядковые номера, а значениями - слова из кортежа, созданного в п.3.
```py
dict2 = dict(zip(range(16),kort3))
dict2
{0: 'объект,', 1: 'текст', 2: 'данного', 3: 'Создайте', 4: 'объект,', 5: 'который', 6: 'из', 7: 'объекта', 8: 'слова,', 9: 'на', 10: 'позициях.', 11: 'инструкции', 12: 'класса', 13: 'объекта', 14: 'списка', 15: 'атрибутов'}
```
# 5. Преобразуйте значения из словаря во множество. Подсчитайте и выведите на экран число элементов этого множества.
```py
mnoj = set(dict2.values())
n = len(mnoj)
mnoj;n
{'текст', 'атрибутов', 'Создайте', 'который', 'слова,', 'на', 'данного', 'объекта', 'объект,', 'инструкции', 'списка', 'позициях.', 'класса', 'из'}
14
```

@ -0,0 +1,875 @@
# Отчет по теме 3. Шабатов Андрей А-02-23
## 1. Запустил оболочку IDLE и настроил рабочий каталог
```py
import os
os.chdir("C:\\Users\\user\\Desktop\\python-labs\\TEMA3")
```
## 2. Преобразование простых типов объектов
### 2.1. Преобразование в логический тип с помощью bool
```py
logiz1 = bool(56)
logiz2 = bool(0)
logiz3 = bool('Beta')
logiz4 = bool("")
logiz1; logiz2; logiz3; logiz4
True
False
True
False
```
### 2.2. Преобразование объектов в числовой тип данных
```py
tt1=int(198.6) #Отбрасывается дробная часть
tt1
198
tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
tt2
-76
tt3=int("B",16)
tt3
11
tt4=int("71",8)
tt4
57
tt5=int("98.76")
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
tt5=int("98.76")
ValueError: invalid literal for int() with base 10: '98.76'
```
**Число, записанное в строку, является вещественным, поэтому функция int не смогла преобразовать его в десятичную систему счисления.**
```py
flt1=float(789)
flt1
789.0
flt2=float(-6.78e2)
flt2
-678.0
flt3=float("Infinity")
SyntaxError: unexpected indent
flt3=float("Infinity")
flt3
inf
flt4=float("-inf")
flt4
-inf
```
### 2.3. Преобразование десятичных чисел в другие системы счисления
```py
dv1=bin(hh) #Преобразование в строку с двоичным представлением
dv1
'0b1111011'
vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
vos1
'0o173'
shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
shs1
'0x7b'
int(dv1,2);int(vos1,8);int(shs1,16)
123
123
123
```
## 3. Изучил преобразования более сложных типов объектов.
### 3.1. Преобразование в строку символов с помощью str()
```py
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}"
```
### 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']
spis33 = list({"A":1,"B":2,"C":9}.values())
spis33
[1, 2, 9]
```
### 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. Удаление объектов
```py
del strk5,kort8
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'dv1', 'flt1', 'flt2', 'flt3', 'flt4', 'hh', 'kort7', 'kort9', 'logiz1', 'logiz2', 'logiz3', 'logiz4', 'os', 'shs1', 'spis1', 'spis2', 'spis3', 'spis33', 'strk1', 'strk2', 'strk3', 'strk4', 'tt1', 'tt2', 'tt3', 'tt4', 'vos1']
```
**Самостоятельно изучил функции, используемые в этом пункте**
```py
indi34 = 'ShabatovAA'
indi34 = list(indi34)
indi34
['S', 'h', 'a', 'b', 'a', 't', 'o', 'v', 'A', 'A']
indi34 = tuple(indi34)
indi34
('S', 'h', 'a', 'b', 'a', 't', 'o', 'v', 'A', 'A')
indi34 = str(indi34)
indi34
"('S', 'h', 'a', 'b', 'a', 't', 'o', 'v', 'A', 'A')"
```
## 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 #Деление двух целых чисел – проверьте тип объекта a!
type(a)
<class 'float'>
a
3.9555555555555557
```
### 4.4. Деление с округлением вниз
```py
b=178//45 #Деление двух целых чисел
b
3
c=-24.6//12.1 #Деление двух вещественных чисел
c
-3.0
ind44 = -11//3
ind44
-4
100//33.3
3.0
```
### 4.5. Получение остатка от деления
```py
148%33 #Остаток от деления двух целых чисел
16
12.6%3.8 #Остаток от деления двух вещественных чисел
1.2000000000000002
15.6%3.1
0.0999999999999992
16%3.1
0.49999999999999956
```
### 4.6. Возведение в степень
```py
14**3 #Целое число возводится в целую степень
2744
e=2.7**3.6 #Вещественное число возводится в вещественную степень
e
35.719843790663525
3.3**3
35.937
11.1**0
1.0
4**2
16
compl = 3- 4j
compl**2
(-7-24j)
print(compl+1)
(4-4j)
print(compl//2)
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
print(compl//2)
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
print(compl%2)
Traceback (most recent call last):
File "<pyshell#115>", line 1, in <module>
print(compl%2)
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
print(compl-(1-4j))
(2+0j)
print(compl/2)
(1.5-2j)
print(compl*2)
(6-8j)
```
## 5. Изучил операции с двоичными представлениями целых чисел
### 5.1. Двоичная инверсия
```py
dv1 = 9
dv2 = ~dv1
dv1
9
```
### 5.2. Двоичное И
```py
7&9
1
7&8
0
```
### 5.3. Двоичное ИЛИ
```py
7|9 # 111 или 1001 = 1111
15
7|8 # 111 или 1000 = 1111
15
14|5 # 1110 или 0101 = 1111
15
```
### 5.4. Двоичное исключающее ИЛИ
```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
i5 = 77
bin(77)
'0b1001101'
i51 = ~i5
i51
-78
bin(i5)
'0b1001101'
bin(81)
'0b1010001'
i5&81
65
77|81
93
77^81
28
bin(i5)
'0b1001101'
print(bin(i5<<2))
0b100110100
print(bin(i5>>3))
0b1001
```
## 6. Изучил операции при работе с последовательностями(списки, кортежи, строки)
### 6.1. Объединение последовательностей - конкатенация
```py
'Система '+'регулирования' #Соединение двух строк символов
'Система регулирования'
['abc','de','fg']+['hi','jkl'] # Объединение двух списков
['abc', 'de', 'fg', 'hi', 'jkl']
[1,2,3]+[4,5]
[1, 2, 3, 4, 5]
('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
('abc', 'de', 'fg', 'hi', 'jkl')
```
### 6.2. Повторение
```py
'ля-'*5 #Повторение строки 5 раз
'ля-ля-ля-ля-ля-'
['ку','-']*3 #Повторение списка 3 раза
['ку', '-', 'ку', '-', 'ку', '-']
('кис','-')*4 #Повторение кортежа 4 раза
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
signal1=[0]*3+[1]*99
signal1
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
signal2=(0,)*3+(1,)*5+(0,)*7
signal2
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
```
### 6.3. Проверка наличия заданного элемента в последовательности
```py
stroka='Система автоматического управления'
'автомат' in stroka #Наличие подстроки в строке
True
'ку' in ['ку','-']*3 #Наличие контекста в списке
True
'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
False
```
### 6.4. Подстановка значений в строку с помощью оператора %
```py
stroka='Температура = %g %s %g'
stroka
'Температура = %g %s %g'
stroka % (16,' меньше ',25)
'Температура = 16 меньше 25'
stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
'Температура = 16 меньше 25'
```
## 7. Изучил операторы присваивания
### 7.1. Обычное присваивание
```py
zz=-12
zz
-12
```
### 7.2. Увеличивание значения переменной на заданную величину
```py
zz+=5 # Значение zz увеличивается на 5
zz
-7
zz-=3 # Значение уменьшается на 3
zz
-10
stroka='Система'
stroka+=' регулирования'
stroka
'Система регулирования'
```
### 7.3. Умножение текущего значения переменной на заданную величину
```py
zz/=2
zz
-5.0
zz*=5
zz
-25.0
```
### 7.4. Операции с округлением, остатком от деления и степенью.
```py
pim = 11
pim%=2
pim
1
pim = 241
pim//=121
pim
1
pim = 2
pim**=5
pim
32
```
### 7.5. Множественное присваивание
```py
w=v=10 # Переменным присваивается одно и то же значение
w;v
10
10
n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа
n1;n2;n3
11
-3
'all'
x1,x2,x3 = [1,2,3]
x1;x2;x3
1
2
3
x4,x5,x6 = 'фацйпцйдидпцйжд'
Traceback (most recent call last):
File "<pyshell#225>", line 1, in <module>
x4,x5,x6 = 'фацйпцйдидпцйжд'
ValueError: too many values to unpack (expected 3)
x1,x2,x3 = {23,31,41}
x1,x2,x3
(41, 31, 23)
type(x1)
<class 'int'>
x4,x5,x6 = {'1':2,'3':4,'5':6}
x4,x5,x6
('1', '3', '5')
```
## 8. Изучил логические операции
### 8.1. Операции сравнения
```py
w;v
10
10
w == v
True
w != v
False
w > v
False
w < v
False
w >= v
True
w <= v
True
```
### 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. Создание больших логических выражений с помощью И, ИЛИ и НЕ
```py
a=17
b=-6
(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
True
(b < a) and ('UII' in dct1['Depart'])
True
(a <= b) or ( 'Vologda' in dic1)
True
not ( a <= b) or ('Vologda' in dct1)
True
not ( a <= b) and ('Vologda' in dct1)
False
```
### 8.4. Проверка ссылок переменных на один и тот же объект
```py
w1=['A','B']
v1=['A','B']
w1 is v1
False
```
** Это ложно, потому что для списки создаются в разных ячейках памяти**
## 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('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
5
stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
4
stroka.replace(' у',' автоматического у')
'Микропроцессорная система автоматического управления'
spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
spis22
['Микропроцессорная', 'система', 'управления']
stroka.upper() #Возвращает строку со всеми заглавными буквами
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
stroka3
'Микропроцессорная система управления'
stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
('Микропроце', 'с', 'сорная система управления')
stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
('Микропроцессорная си', 'с', 'тема управления')
strk1='Момент времени {}, значение = {}'
strk1.format(1,89.7)
'Момент времени 1, значение = 89.7'
strk2='Момент времени {1}, значение = {0}:{2}'
strk2.format(36.7,2,'норма!')
'Момент времени 2, значение = 36.7:норма!'
strk3='Момент времени {num}, значение = {znch}'
strk3.format(znch=89.7,num=2)
'Момент времени 2, значение = 89.7'
```
### 9.2. Методы для работы со списками
```py
spsk = [1,2,3,4,5,6,7]
dir(spsk)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
spsk.pop(2)
3
spsk
[1, 2, 4, 5, 6, 7]
spsk.append('c')
spsk
[1, 2, 4, 5, 6, 7, 'c']
spsk.insert(2,'a')
spsk
[1, 2, 'a', 4, 5, 6, 7, 'c']
spsk.count('a')
1
```
### 9.3. Самостоятельно изучил методы кортежа
```py
krt = (1,2,3,4,5)
dir(krt)
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
krt.count(5)
1
```
### 9.4. Самостоятельно изучил методы словарей
```py
dirr={"A":3, "B":4}
dir(dirr)
['__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']
dirr.keys()
dict_keys(['A', 'B'])
```
## 10. Завершил работу в IDLE

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

Двоичные данные
TEMA4/Ris1.png

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

После

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

Двоичные данные
TEMA4/Ris2.png

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

После

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

Двоичные данные
TEMA4/Ris3.png

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

После

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

Двоичные данные
TEMA4/Ris4.png

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

После

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

Двоичные данные
TEMA4/Ris5.png

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

После

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

@ -0,0 +1,30 @@
# Идз
# Шабатов Андрей, А-02-23
# Индивидуальное контрольное задание
Напишите инструкцию запоминания в переменной текущего регионального времени.
Напишите инструкцию превращения этого времени в символьную строку.
Отобразите результат на экране. Создайте множество с 5 элементами – случайными целыми числами из диапазона значений от -23 до 57.
Подсчитайте корень квадратный из суммы элементов этого множества и отобразите на экране в виде: «результат = ХХХ» с округлением числа до одного знака после точки.
```py
time1 = time.localtime()
time1
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=13, tm_hour=14, tm_min=18, tm_sec=4, tm_wday=0, tm_yday=286, tm_isdst=0)
time2 = time.strftime("%Y-%m-%d %H-%M-%S", time1)
time2
'2025-10-13 14-18-04'
import random
s = (random.randint(-23,57),random.randint(-23,57),random.randint(-23,57),random.randint(-23,57),random.randint(-23,57))
s1 = set(s)
s1
{8, 11, -15, 51, 22}
import math
print('Результат=' , round(math.sqrt(sum(s1)),1))
Результат= 8.8
```

@ -0,0 +1,420 @@
# Отчет по теме 4
Шабатов Андрей , А-02-23
## 1 Запуск интерактивной оболочки IDLE
Была запущена интерактивная оболочка IDLE.
## 2 Изучение стандартных встроенных функций
## 2.1 Изучение функции округления
Была применена функция round с одним и двумя аргументами и изучены различия между указанием одного и двух аргументов.
```py
>>>round(123.456,1)
123.5
>>>round(123.456,0)
123.0
>>>type(round(123.456,1))
<class 'float'>
>>>type(round(123.456,0)) #В результате получаются числа класса float, так как указано сколько цифр после запятой нужно оставить. Два вышеупомянутых варианта отличаются именно количесивом цифр, оставленных после запятой при округлении.
<class 'float'>
>>>round(123.456)
123
>>>type(round(123.456)) #В данном случае получается число типа int, так как не указано количество цифр после запятой, и по умолчанию число округляется до целого.
<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(23) #При указывание одного аргумента строится последовательность от 0 до указанного числа не включительно, с шагом 1.
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]
```
## 2.3 Изучение функции zip
Была применена функция zip и произведена попытка обращения к элементу созданной последовательности по индексу.
```py
>>>qq=["Shabatov", "Efremov", "Zelenkina", "Pohil"]
>>>ff=zip(gg,qq)
>>>tuple(ff) #В итоге получится последовательность из 4 элементов, так как в qq 4 элемента, а в gg 6. Длина равна длине самого короткого списка.
((76, 'Shabatov'), (85, 'Efremov'), (94, 'Zelenkina'), (103, 'Pohil'))
>>>ff[1] #Исходя из текста ошибки, можно сказать, что zip обьекты не поддерживают доступ по индексу.
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
ff[1]
TypeError: 'zip' object is not subscriptable
```
## 2.4 Изучение функции eval
Была применена функция eval.
```py
>>>fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
коэффициент усиления=6
>>>dan
-126.0
```
## 2.5 Изучение функции exec
Была применена функция exec.
```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)
Был изучен и применен ряд полезных функций:
abs - выдает значение по модулю;
len - выдает длину обьекта;
max - выдает максимальное число из списка введенных в аргумент;
min - выдает минимальное число из списка введенных в аргумент;
pow - при двух аргументах: возводит первый в степень второго, при наличие третьего аргумента делит получившийся результат на третий аргумент и показывает остаток;
sum - суммирует числа;
divmod - возвращает кортеж (a // b, a % b), где а и b соответственно первый и второй аргумент;
map - применяет функцию из первого аргумента к каждому элементу итерируемого обьекта, который указан во втором аргументе.
```py
>>>abs(-5)
5
>>>len("hi")
2
>>>max(3, 4)
4
>>>min(3, 4)
3
>>>pow(3, 2)
9
>>>pow(3, 2, 3)
0
>>>sum([2, 3])
5
>>>divmod(7, 2)
(3, 1)
>>>list(map(lambda x: x*2, [1, 2, 3, 4]))
[2, 4, 6, 8]
```
## 3 Изучение функций из модуля math для работы с математическими выражениями и операциями.
Был импортирован и изучен модуль math. Были изучены и применены некоторые функции из модуля math.
sin - считает и выдает синус аргумента в радианах;
acos - считает и выдает арккосинус аргумента в радианах;
degrees - переводит число в радианах в градусы;
radians - переводит число в градусах в радианы;
exp - выдает значение числа e возведенного в степень, которая указана в аргументе;
log - считает натуральный логарифм числа;
log10 - считает делятичный логарифм числа;
sqrt - считает корень из числа в аргументе;
ceil - округляет число вверх;
floor - округляет число вниз;
pi - данная функция является представлением числа пи в питоне.
```py
>>>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
>>>math.sin(180)
-0.8011526357338304
>>>math.acos(0.5)
1.0471975511965979
>>>help(math.degrees)
Help on built-in function degrees in module math:
degrees(x, /)
Convert angle x from radians to degrees.
>>>math.degrees(0.5)
28.64788975654116
>>>math.radians(28)
0.4886921905584123
>>>math.exp(1)
2.718281828459045
>>>math.log(1)
0.0
>>>math.log10(1)
0.0
>>>math.sqrt(9)
3.0
>>>help(math.ceil)
Help on built-in function ceil in module math:
ceil(x, /)
Return the ceiling of x as an Integral.
This is the smallest integer >= x.
>>>math.ceil(4.7)
5
>>>math.floor(4.7)
4
>>>math.pi
3.141592653589793
>>>math.sin(2*math.pi/7+math.exp(0.23))
0.8334902641414562
```
## 4 Изучение модуля cmath для работы с комплексными числами
Был импортирован и изучен модуль 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 Изучения стандартного модуля randon для работы с псевдослучайными числами
Были самостоятельно изучены и применены методы модуля random:
random - равномерно распределенное случайное число;
uniform- равномерно распределенное случайное число в диапазоне, заданном двумя аргументами;
randint - случайные целые числа в диапазоне от значения первого аргумента до значения второго;
gauss - нормально распределенное случайное число с средним равным певому аргументу и стандартным отклонением равным второму аргументу;
choice - случайный выбор из совокупности указанной в аргументе;
shuffle - случайная перестановка элементов списка в аргументе;
sample - случайный выбор подмножества элементов из списка в первом аргументе (количество элементов равно числу, указанному во втором аргументе);
betavariate - случайное число с бета-распределением, где альфа равна первому аргументу, а бета равна второму аргументу;
gammavariate - случайное число с гамма-распределением, где альфа равна первому аргументу, а бета равна второму аргументу.
Также был самостоятельно создан список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
```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()
>>>r = random.random()
>>>r
0.915829800247012
>>>u = random.uniform(1, 10)
>>>u
6.398971726523061
>>>rnd = random.randint(1, 10)
>>>rnd
3
>>>g = random.gauss(0, 1)
>>>g
1.6312864971445826
>>>l = ["a", "b", "c"]
>>>ch = random.choice(l)
>>>ch
'b'
>>>random.shuffle(l)
>>>l
['b', 'a', 'c']
>>>s = random.sample(l, 2)
>>>s
['c', 'b']
>>>b = random.betavariate(2, 5)
>>>b
0.20276652629326136
>>>g = random.gammavariate(2, 2)
>>>g
4.361266204290336
>>>random_list = [random.uniform(1, 10), random.gauss(5, 2), random.betavariate(2, 5), random.gammavariate(2, 2)]
>>>random_list
[1.8429009082320071, 5.582736307655225, 0.21284691290111155, 2.9271296316078654]
```
## 6 Изучение модуля time для работы со временем и календарями
Были изучены и применены методы из модуля time:
time - возвращает время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г;
gmtime - возвращает объект класса struct_time, содержащий полную информацию о текущем времени (UTC): год (tm_year), месяц (tm_mon), день tm_mday)...;
localtime - для получения «местного» времени (которое стоит на компьютере);
asctime - преобразовывает представление времени из кортежа в строку (просто отображает время в формате строки);
ctime - преобразовывает время в секундах, прошедшего с начала эпохи, в строку;
sleep - прерывает работу программы на заданное время в секундах;
mktime - преобразовает время из типа кортежа или struct_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()
>>>c1
1757585123.0268378
>>>c1=time.time() #Для проверки заново применили функцию спустя 14 секунд.
>>>c1
1757585137.4425445
>>>c2=time.time()-c1
>>>c2
272.143741607666
>>>dat=time.gmtime()
>>>dat
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=11, tm_hour=10, tm_min=13, tm_sec=29, tm_wday=3, tm_yday=254, tm_isdst=0)
>>>dat.tm_mon
9
>>>tim=time.localtime()
>>>tim
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=11, tm_hour=12, tm_min=15, tm_sec=7, tm_wday=3, tm_yday=254, tm_isdst=0)
>>>time.asctime()
'Thu Sep 11 12:16:36 2025'
>>>time.ctime()
'Thu Sep 11 12:16:57 2025'
>>>time.sleep(2) #Две секунды в IDLE не появлялось приглашение для ввода команды.
>>>time.mktime(tim)
1757585707.0
>>>time.localtime(c1)
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=11, tm_hour=12, tm_min=5, tm_sec=37, tm_wday=3, tm_yday=254, tm_isdst=0)
```
## 7 Изучение графических функций
Был создан линейный график, на котором изображена зависимость сигналов от времени.
```py
>>>import pylab
>>>x=list(range(-3,55,4))
>>>x
[-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53]
>>>t=list(range(15))
>>>t
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>pylab.plot(t,x) #Создание графика в оперативной памяти
[<matplotlib.lines.Line2D object at 0x0000022B3EEDAD50>]
>>>pylab.title('Первый график')
Text(0.5, 1.0, 'Первый график')
>>>pylab.xlabel('время')
Text(0.5, 0, 'время')
>>>pylab.ylabel('сигнал')
Text(0, 0.5, 'сигнал')
>>>pylab.show() #Отображение графика на экране
```
![](Ris1.png)
Далее были созданы два линейных графика на одном поле. (По оси y - значения из списка, по оси х - порядковый номер значений).
```py
>>>X1=[12,6,8,10,7]
>>>X2=[5,7,9,11,13]
>>>pylab.plot(X1)
[<matplotlib.lines.Line2D object at 0x0000022B3EFEB890>]
>>>pylab.plot(X2)
[<matplotlib.lines.Line2D object at 0x0000022B3EFEB9D0>]
>>>pylab.show()
```
![](Ris2.png)
Также была создана круговая диаграмма.
```py
>>>region=['Центр','Урал','Сибирь','Юг'] #Метки для диаграммы
>>>naselen=[65,12,23,17] # Значения для диаграммы
>>>pylab.pie(naselen,labels=region) #Создание диаграммы в памяти
([<matplotlib.patches.Wedge object at 0x0000022B3EEAE3C0>, <matplotlib.patches.Wedge object at 0x0000022B42875590>, <matplotlib.patches.Wedge object at 0x0000022B42875950>, <matplotlib.patches.Wedge object at 0x0000022B42875BD0>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
>>>pylab.show() #Отображение диаграммы
```
![](Ris3.png)
Самостоятельно была создана гистограмма (по оси у - частота повторения значений, по оси х сами значения)
```py
>>>data = [1, 2, 3, 3, 2, 3, 3, 3, 2]
>>>pylab.hist(data, bins=3)
(array([1., 3., 5.]), array([1. , 1.66666667, 2.33333333, 3. ]), <BarContainer object of 3 artists>)
>>>pylab.title("Гистограмма")
Text(0.5, 1.0, 'Гистограмма')
>>>pylab.show()
```
![](Ris4.png)
Самостоятельно была создана столбиковая диаграмма, где по оси х - категории, а по оси у - значения, относящиеся к каждой категории.
```py
>>>c = ['A', 'B', 'C', 'D']
>>>v = [25, 40, 30, 50]
>>>pylab.bar(c, v)
<BarContainer object of 4 artists>
>>>pylab.title("Столбиковая диаграмма")
Text(0.5, 1.0, 'Столбиковая диаграмма')
>>>pylab.show()
```
![](Ris5.png)
## 8 Изучение модуля statistics для работы в сфере статистики
Самостоятельно был импортирован и изучен модуль statistics. Из него были использованы функции подсчета среднего значения, медианы и моды для выборки в списке.
```py
>>>import statistics
>>>dir(statistics)
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtuple', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance']
>>>data = [1, 2, 2, 3, 4, 5, 5, 5, 6]
>>>mean = statistics.mean(data)
>>>mean
3.6666666666666665
>>>median = statistics.median(data)
>>>median
4
>>>mode = statistics.mode(data)
>>>mode
5
```
## 9 Завершение работы в IDLE
Был завершен сеанс в среде IDLE.

@ -0,0 +1,48 @@
# Общее контрольное задание по теме 4
Шабатов Андрей, А-02-23
## Задание
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
## Решение
```py
>>>divmod((round(cmath.phase(0.2+0.8j), 2))*20, 3)
(8.0, 2.6000000000000014)
>>>divmod(math.floor((round(cmath.phase(0.2+0.8j), 2))*20), 3) #Для получения остатка в целом виде и делении целых чисел, можно использовать такое выражение.
(8, 2)
>>>v = time.localtime()
>>>v
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=11, tm_hour=14, tm_min=3, tm_sec=26, tm_wday=3, tm_yday=254, tm_isdst=0)
>>>st = v.tm_hour, v.tm_min
>>>st = str(v.tm_hour)+" hour "+str(v.tm_min)+" min "
>>>st
'14 hour 3 min '
>>>ned = ["пн", "вт", "ср", "чт", "пт", "сб", "вскр"]
>>>random.sample(ned, 3)
['пн', 'вскр', 'вт']
>>>random.choice(list(range(14, 33, 3)))
20
>>>N = round(random.gauss(15, 4))
>>>N
15
>>>import string #Импортировали модуль в котором есть латинский алфавит, чтобы из него выбрать буквы. Без использования этого модуля создавать список с алфавитом нужно было бы вручную.
>>>random.sample(string.ascii_letters, N)
['M', 'J', 'X', 'H', 'R', 'D', 'V', 'U', 'c', 'g', 'l', 'k', 'm', 't', 'w']
>>>time.localtime().tm_min - v.tm_min
24
```

@ -0,0 +1,6 @@
fp3=open('zapis4.txt','w')
for i in range(len(sps3)):
stroka4=sps3[i][0]+' '+str(sps3[i][1])
fp3.write(stroka4)
fp3.close()

@ -0,0 +1,22 @@
# Идз
# Шабатов Андрей, А-02-23
# Индивидуальное контрольное задание
Напишите инструкцию создания переменной с текущим моментом времени в секундах от начала эпохи. Определите, сколько раз можно рассчитать синус числа 12.3 в течение 10 се-кунд, начиная от текущего времени.
```py
import time
import math
start_time = time.time()
k = 0
end_time = start_time+10
while time.time() < end_time:
math.sin(12.3)
k +=1
print("Количество вычислений синуса:" , k)
Количество вычислений синуса: 39419534
```

@ -0,0 +1,365 @@
# Отчет по теме 5
Шабатов Андрей, А-02-23
## 1 Запуск интерактивной оболочки IDLE
Была запущена интерактивная оболочка IDLE.
## 2 Изучение блока ЕСЛИ
Общее правило написания:
if <условие>:
<Блок инструкций, выполняемый, если условие истинно>
elif <условие2>:
<Блок инструкций2, выполняемый, если условие2 истинно>
else:
<Блок инструкций3, выполняемый, если условие ложно>
```py
porog=4
rashod1=7
rashod2=11
if rashod1>=porog:
dohod=12
elif rashod2==porog:
dohod=0
else:
dohod=-8
dohod
12
if rashod1>=3 and rashod2==4:
dohod=rashod1
if rashod2==porog or rashod1<rashod2:
dohod=porog
dohod
12
if porog==3:
dohod=1
elif porog==4:
dohod=2
elif porog==5:
dohod=3
else:
dohod=0
dohod
2
dohod=2 if porog>=4 else 0
dohod
2
if porog>=5 : rashod1=6; rashod2=0
rashod1
7
rashod2
11
```
## 3 Изучение блока FOR
for <Объект-переменная цикла> in <объект>:
<Блок инструкций 1 – тело цикла>
else:
<Блок инструкций 2 – если в цикле не сработал break>
### 3.1. Простой цикл.
```py
temperatura=5
for i in range(3,18,3):
temperatura+=i
temperatura
50
```
### 3.2. Первый более сложный цикл.
#### 3.2.1.
```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]
```
#### 3.2.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]
#Отличие: Цикл итерируется по неизменной копии списка. Пройдя все 4 элемента, цикл завершится.
```
### 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)
369
sps5=[]
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
438
sps5=[]
for i in range(10):
sps5.append(rn.randint(1,100))
ss=sum(sps5)
if ss>500: break
else:
print(ss)
495
#Если сумма не превысила 500 за 10 итераций, то выполняется else
#если сумма превысила 500 на какой-то итерации, то сработает break и вывода не прозойдёт
```
### 3.4. Работа с символьной строкой
```py
stroka='Это – автоматизированная система'
stroka1=""
for ss in stroka:
stroka1+=" "+ss #к текущей строке 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)
[<matplotlib.lines.Line2D object at 0x000002A57ED02490>]
pylab.title('Синусоидальный сигнал')
Text(0.5, 1.0, 'Синусоидальный сигнал')
pylab.xlabel('Отсчеты')
Text(0.5, 0, 'Отсчеты')
pylab.ylabel('Амплитуда')
Text(0, 0.5, 'Амплитуда')
pylab.show()
```
![alt text](scr1.png)
## 4. Цикл «пока истинно условие» – управляющая инструкция while. Общее правило написания:
while <Условие>:
<Блок инструкций 1 – тело цикла>
else:
<Блок инструкций 2 – если в цикле не сработал break>
### 4.1. Цикл со счетчиком.
```py
rashod=300
while rashod:
print("Расход=",rashod)
rashod-=50
Расход= 300
Расход= 250
Расход= 200
Расход= 150
Расход= 100
Расход= 50
# Цикл завершился, потому что условие while rashod: стало ложным (False), когда значение переменной rashod достигло 0.
```
### 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
#### Оформим в график, добавив список с моментами времени:
i = 0
sps2 = []
time_points = [] # Создадим список для моментов времени
while i < len(stroka):
r = 1 - 2 / (1 + math.exp(0.1 * i))
sps2.append(r)
time_points.append(i) # Запоминаем момент времени
i += 1
pylab.plot(time_points, sps2)
[<matplotlib.lines.Line2D object at 0x0000023EA70F6850>]
pylab.title('Инерционное звено')
Text(0.5, 1.0, 'Инерционное звено')
pylab.xlabel('Время')
Text(0.5, 0, 'Время')
pylab.ylabel('Выход')
Text(0, 0.5, 'Выход')
pylab.show()
```
![alt text](scr2.png)
### 4.3. Определение, является ли число простым (делится только на самого себя или 1).
```py
chislo=267 #Проверяемое число
kandidat =chislo // 2 # Для значений chislo > 1
while kandidat > 1:
if chislo%kandidat == 0: # Остаток от деления
print(chislo, ' имеет множитель ', kandidat)
break # else выполняться не будет
kandidat -= 1
else: # При завершении цикла без break
print(chislo, ' является простым!')
267 имеет множитель 89
```
```py
#### Проверка простоты чисел в диапазоне от 250 до 300
for chislo in range(250, 301):
kandidat = chislo // 2 # Для значений chislo > 1
while kandidat > 1:
if chislo % kandidat == 0: # Остаток от деления
print(chislo, ' имеет множитель ', kandidat)
break # else выполняться не будет
kandidat -= 1
else: # При завершении цикла без break
print(chislo, ' является простым!')
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
```
### 4.5 Инструкция continue.
```py
for k in sps:
if k!=4:
print(k)
else:
continue #пропускает итерацию, когда break полностью прерывает цикл
2
3
5
6
```

Двоичные данные
TEMA5/scr1.png

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

После

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

Двоичные данные
TEMA5/scr2.png

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

После

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

@ -0,0 +1,83 @@
# Общее контрольное задание по теме 5
Шабатов Андрей, А-02-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
```py
import string
text = "hello world"
for char in text:
if char in string.ascii_lowercase:
order = string.ascii_lowercase.index(char) + 1
print(char, "=", order)
else:
print("\n")
h = 8
e = 5
l = 12
l = 12
o = 15
w = 23
o = 15
r = 18
l = 12
d = 4
```
```py
zadanie = "Создайте список со словами из задания данного пункта"
zadanie_spisok=list(zadanie.split())
zadanie_spisok
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта']
CLOVO = 'список'
if CLOVO in zadanie_spisok:
print("Слово имеется.")
else: print("Слово отсутствует.")
Слово имеется.
CLOVO2 = 'Слово'
if CLOVO2 in zadanie_spisok:
print("Слово имеется.")
else: print("Слово отсутствует.")
Слово отсутствует.
```
```py
studentus1 = ["Хатюхин", "Ефремов", "Шабатов", "Туровец"]
sessija_leto = [5, 2, 2, 2]
studentus2 = ["Шабатов", "Хатюхин", "Туровец", "Ефремов"]
sessija_zima = [5, 5, 5, 2]
name=input("Фамилия: ")
Фамилия: Ефременко
if name in studentus1 and name in studentus2:
leto_ocenka = sessija_leto[studentus1.index(name)]
zima_ocenka =sessija_zima[studentus2.index(name)]
print("Студент:", name, ". Летняя:", leto_ocenka, ", Зимняя:", zima_ocenka)
else:
print("Студент", name, "не найден.")
Фамилия: Шабатов
Студент: Шабатов . Летняя: 2 , Зимняя: 5
Фамилия: ТОРОПОжка
Студент ТОРОПОжка не найден.
```

Двоичные данные
TEMA6/1.png

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

После

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

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

Двоичные данные
TEMA6/2.png

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

После

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

Двоичные данные
TEMA6/pic2.png

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

После

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

Двоичные данные
TEMA6/pic3.png

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

После

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

Двоичные данные
TEMA6/pic4.png

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

После

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

Двоичные данные
TEMA6/pic5.png

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

После

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

@ -0,0 +1,397 @@
# Отчет по теме 6
Шабатов Андрей, А-02-23
## 1 Запуск интерактивной оболочки IDLE
Была запущена интерактивная оболочка IDLE.
## 2 Изучение вывода данных на экран дисплея
Были изучены и применены различные способы вывода данных на экран.
## 2.1 Изучение эхо-вывода
```py
stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'
```
## 2.2 Изучение вывода данных с помощью печати
Была изучена функция print для вывода текста. Текст был выведен в одну строку, далее в две строки с использованием экранированных последовательностей, далее был выведен текст с дописанным в конце текстом, используя аргумент end. И также был выведен текст в три строки, используя троиные кавычки.
```py
fff=234.5;gg='Значение температуры = '
print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции
Значение температуры = 234.5
print(gg, fff, sep="\n")
Значение температуры =
234.5
print(gg, fff,sep='\n',end='***'); print('____')
Значение температуры =
234.5***____
print()
print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""") #В этом варианте текст выводится в три отдельные строки как и при вводе команды, благодаря троиным кавычкам.
Здесь может выводиться
большой текст,
занимающий несколько строк
print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк") #В данном случае текст выводится подрят в одну строку.
Здесь может выводиться большой текст, занимающий несколько строк
```
## 2.3 Изучение вывода данных с помощью функции write
Был испортирован модуль sys, и использована функция write, которая записывает и выводит текст, а так же возвращается количество байтов, записанных в строку.
```
import sys
sys.stdout.write('Функция write')
Функция write13
sys.stdout.write('Функция write\n')
Функция write
14
```
## 3 Изучение ввода данных с клавиатуры
С помощью функции input был произведен вывод текста, введенного с клавиатуры. Так же был создан цикл, который просит пользователя ввести значение до тех пор, пока оно не будет удовлетворять определенному интервалу, а потом выводит это значение на дисплей. Также с помощью функции eval Была создана команда, благодаря которой выражение, введенное пользователен с консоли исполняется, и выдается результат расчета.
```py
psw=input('Введите пароль:')
Введите пароль:56gf
psw
'56gf'
type(psw)
<class 'str'>
while True:
znach=float(input('Задайте коэф.усиления = '))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления = 15.4
Ошибка!
Задайте коэф.усиления = 21.6
import math
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4 Изучение различных способов чтения данных из файла и записи в файл
Были изучены и применены разные способы чтения и записи данных.
## 4.1 Изучение модуля os для работы с путями к файлам
Был просмотрен текущий рабочий каталог, занесен в переменную d. После этого совершен переход в другой рабочий католог. Были самостоятельно изучены и применены методы из модуля os и подмодуля os.path:
mkdir - создает папку в рабочем каталоге (в приложенном фото видно, что в каталоге появилвсь папка);
![](1.png)
rmdir - удаляет из каталога пустую папку;
listdir - возвращает список имен файлов/папок в указанном каталоге (или если аргумент не указан, то в текущем каталоге);
path.isdir - возвращает true, если папка является существующей в каталоге.
Далее была создана переменная, содержащая строку - путь в файлу report и имя данного файла. Используя эту переменную, с помощью функций модуля os была создана строка содержащая только путь, потом только имя, а потом применена функция, которая разделяет в одну переменную - путь, в другую - имя файла. Далее было проверено существование определенного пути, и существование определенного файла с указаном каталоге.
```py
import os
os.getcwd
<built-in function getcwd>
os.getcwd()
'C:\\Users\\user\\Desktop\\python-labs\\TEMA5'
os.chdir('C:\\Users\\user\\Desktop\\python-labs\\TEMA6')
os.mkdir('new')
os.rmdir('new')
os.listdir()
['.gitkeep', '1.png']
os.path.isdir('1.png')
False
os.path.isdir('123.png')
False
fil=os.path.abspath("oplata.dbf")
fil
'C:\\Users\\user\\Desktop\\python-labs\\TEMA6\\oplata.dbf'
drkt=os.path.dirname(fil)
drkt
'C:\\Users\\user\\Desktop\\python-labs\\TEMA6'
os.path.isfile(fil)
False
```
## 4.2 Изучение обобщенного процесса работы с файлами
Было определено, что для обмена данными с файлами необходимо:
• Открыть файла с указанием его имени и цели;
• Выполнить операции обмена данными с файлом;
• Закрыть файл.
## 4.3 Изучение функции open для открытия файлов с разной целью
Была применена команда open с различным написанием аргументов, создан файловый обьект. Выведен тип и список атрибутов этого обьекта.
```py
fp=open(file=drkt+'\\zapis1.txt',mode='w')
fp=open(drkt+'\\zapis1.txt','w')
fp=open('zapis1.txt','w')
type(fp)
<class '_io.TextIOWrapper'>
dir(fp)
['_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']
```
## 4.4 Изучение закрытия файла
Файл был закрыт.
```py
fp.close()
```
## 4.5 Изучение функции write для записи данных в текст
Был создан список из 12 элементов и поочередно в файл записаны числа из списка в три строки.
```py
sps=list(range(1,13))
sps
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
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()
```
![](2.png)
Далее был создан список из трех списков и с помощью цикла for все элементы списка были вписаны в файл в одну строку.
```py
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
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)
11
11
12
fp3.close()
```
![](pic2.png)
Далее с помощью цикла for три списка из общего списка были вписаны в файл поочередно в три строки. Запись цикла была сжата в одну строку, и проверено, что при написании той же инструкции в одну строку, содержимое файла не изменяется, относительно предыдущего метода с этими же инструкциями.
```py
gh=open('zapis5.txt','w')
for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
gh.close()
gh=open('zapis6.txt','w')
for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
```
![](pic3.png)
## 4.6 Изучение одного из способов чтения данных из файла с помощью цикла for
С помощью open был открыт файл для чтения, и из его символов был сконструирован список, состоящий из символов. После символы в списке были преобразованы в числа, и список стал идентичен тому, который создавался ранее и записывался в файл.
```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()
sps1
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
sps2=[]
for i in sps1:
sps2.append(int(i))
sps2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
```
## 4.7 Изучение способа чтения данных из файла с помощью функции read
Был открыт текстовый файл и с помощью функции read из него сначала было прочитано и отображено 12 символов, а потом прочитаны остальные символы с помощью функции read без указания аргумента.
```py
fp=open('zapis3.txt')
stroka1=fp.read(12)
stroka2=fp.read()
fp.close()
stroka1
'[1, 2, 3, 4]'
stroka2
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
```
## 4.8 Изучение чтения данных из файла по строкам
Самостоятельно были изучены и применены функции: readline - которая читает одну строку, начиная с указателя текущей позиции, и функция readlines, которая по такому же принципу читает все строки и возвращает их в виде списка.
```py
fp=open('zapis3.txt')
s1 = fp.readline()
s2=fp.readline()
s1
'[1, 2, 3, 4]\n'
s2
'[5, 6, 7, 8]\n'
fp.close()
fp=open('zapis3.txt')
s3 = fp.readlines()
s3
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
```
## 4.9 Изучение работы с бинарными файлами с помощью модуля pickle
С помощью модуля pickle созданное множество было вписано в бинарный файл, а потом данные прочитаны из этого файла.
```py
import pickle
mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
fp.close()
fp=open('zapis6.mnz','rb')
mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
fp.close()
mnoz2 #Результат не такой как при вводе множества mnoz1, так как множество не имеет повторений и порядка элементов, поэтому автоматически множество обьединило повторяющиеся слова.
{'pen', 'iPhone', 'book', 'table'}
mnoz1 == mnoz2
True
```
![Просмотр бинарного файла](pic4.png)
Также в файл было записано два обьекта и прочитано поочередно с помощью load.
```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) #Первое обращение к load читает первый объект
obj2=pickle.load(fp) #Второе – читает второй
fp.close()
obj1
{'pen', 'iPhone', 'book', 'table'}
obj2
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
```
## 5
Был создан текстовый файл, куда с помощью модуля sys и методы stdout был перенаправлен поток вывода, и в нем был напечатан текст. Далее поток вывода был перенаправлен обратно и проведена проверка с помощью print.
```py
import sys
vr_out=sys.stdout #Запоминаем текущий поток вывода
fc=open('Stroka.txt','w') #Откроем файл вывода
sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
sys.stdout=vr_out #Восстановление текущего потока
print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
запись строки на экран
fc.close()
```
![Просмотр содержимого файла stroka.txt](pic5.png)
Также был перенаправлен ввод на файл, и реализован цикл, в котором считывается текст из файла и печатается на экран.
```py
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 #Не забыть вернуть стандартное назначение для потока ввода
```
## 6 Завершение работы в IDLE
Был завершен сеанс в среде IDLE.

@ -0,0 +1,77 @@
# Общее контрольное задание по теме 6
Шабатов Андрей, А-02-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
• Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
• Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
• Записывается кортеж в бинарный файл.
• Записывается в этот же файл список и закрывается файл.
• Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
• Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
• Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
## Решение
```py
>>>import random
>>>num = list(range(1, 126, 1))
>>>num
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125]
>>>kor = ()
>>>for i in num:
kor = kor + (random.randint(6, 56),)
>>>kor
(27, 38, 7, 18, 35, 11, 41, 35, 20, 24, 43, 7, 48, 17, 26, 39, 35, 17, 54, 22, 31, 11, 8, 38, 7, 34, 22, 14, 36, 7, 15, 23, 48, 34, 31, 18, 39, 55, 18, 11, 32, 18, 51, 34, 41, 31, 8, 11, 28, 25, 42, 56, 10, 52, 6, 9, 15, 53, 36, 27, 48, 6, 53, 50, 51, 49, 11, 11, 16, 36, 39, 39, 18, 52, 14, 44, 13, 27, 26, 27, 23, 13, 36, 24, 34, 27, 21, 6, 37, 29, 53, 13, 54, 22, 26, 46, 36, 22, 48, 11, 24, 28, 9, 23, 36, 45, 6, 55, 9, 31, 22, 42, 50, 55, 46, 7, 55, 17, 54, 32, 39, 41, 14, 49, 22)
>>>len(kor)
125
>>>str_kor = tuple(map(str, kor))
>>>str_kor
('27', '38', '7', '18', '35', '11', '41', '35', '20', '24', '43', '7', '48', '17', '26', '39', '35', '17', '54', '22', '31', '11', '8', '38', '7', '34', '22', '14', '36', '7', '15', '23', '48', '34', '31', '18', '39', '55', '18', '11', '32', '18', '51', '34', '41', '31', '8', '11', '28', '25', '42', '56', '10', '52', '6', '9', '15', '53', '36', '27', '48', '6', '53', '50', '51', '49', '11', '11', '16', '36', '39', '39', '18', '52', '14', '44', '13', '27', '26', '27', '23', '13', '36', '24', '34', '27', '21', '6', '37', '29', '53', '13', '54', '22', '26', '46', '36', '22', '48', '11', '24', '28', '9', '23', '36', '45', '6', '55', '9', '31', '22', '42', '50', '55', '46', '7', '55', '17', '54', '32', '39', '41', '14', '49', '22')
>>>L_fam = ["Dobrovolska", "Efremov", "Zelenkina", "Pohil", "Kuzmenko"]
>>>import os
>>>os.chdir("C:\\Users\\Лиза\\OneDrive\\Desktop\\python-labs\\TEMA6")
>>>f = open('bin.mnz', 'wb')
>>>import pickle
>>>pickle.dump(str_kor, f)
>>>pickle.dump(L_fam, f)
>>>f.close()
>>>f = open('bin.mnz', 'rb')
>>>obj1 = pickle.load(f)
>>>obj2_spis = pickle.load(f)
>>>obj1
('27', '38', '7', '18', '35', '11', '41', '35', '20', '24', '43', '7', '48', '17', '26', '39', '35', '17', '54', '22', '31', '11', '8', '38', '7', '34', '22', '14', '36', '7', '15', '23', '48', '34', '31', '18', '39', '55', '18', '11', '32', '18', '51', '34', '41', '31', '8', '11', '28', '25', '42', '56', '10', '52', '6', '9', '15', '53', '36', '27', '48', '6', '53', '50', '51', '49', '11', '11', '16', '36', '39', '39', '18', '52', '14', '44', '13', '27', '26', '27', '23', '13', '36', '24', '34', '27', '21', '6', '37', '29', '53', '13', '54', '22', '26', '46', '36', '22', '48', '11', '24', '28', '9', '23', '36', '45', '6', '55', '9', '31', '22', '42', '50', '55', '46', '7', '55', '17', '54', '32', '39', '41', '14', '49', '22')
>>>obj2_spis
['Dobrovolska', 'Efremov', 'Zelenkina', 'Pohil', 'Kuzmenko']
>>>if obj1 == str_kor:
print("обьекты кортежа совпадают")
else: print("обьекты кортежа не совпадают")
обьекты кортежа совпадают
>>>if obj2_spis == L_fam:
print("обьекты списка совпадают")
else: print("обьекты списка не совпадают")
обьекты списка совпадают
>>>List = []
>>>for i in range(0, 125, 5):
List.append(list(str_kor[i:i + 5]))
>>>List
[['27', '38', '7', '18', '35'], ['11', '41', '35', '20', '24'], ['43', '7', '48', '17', '26'], ['39', '35', '17', '54', '22'], ['31', '11', '8', '38', '7'], ['34', '22', '14', '36', '7'], ['15', '23', '48', '34', '31'], ['18', '39', '55', '18', '11'], ['32', '18', '51', '34', '41'], ['31', '8', '11', '28', '25'], ['42', '56', '10', '52', '6'], ['9', '15', '53', '36', '27'], ['48', '6', '53', '50', '51'], ['49', '11', '11', '16', '36'], ['39', '39', '18', '52', '14'], ['44', '13', '27', '26', '27'], ['23', '13', '36', '24', '34'], ['27', '21', '6', '37', '29'], ['53', '13', '54', '22', '26'], ['46', '36', '22', '48', '11'], ['24', '28', '9', '23', '36'], ['45', '6', '55', '9', '31'], ['22', '42', '50', '55', '46'], ['7', '55', '17', '54', '32'], ['39', '41', '14', '49', '22']]
>>>for i in range(25):
list_name = f"list{i + 1}" #Создается имя переменной (list1, list2,..)
globals()[list_name] = List[i]
>>>list1
['27', '38', '7', '18', '35']
>>>list2
['11', '41', '35', '20', '24']
```

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

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

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

Двоичные данные
TEMA7/pic0.png

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

После

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

@ -0,0 +1,567 @@
# Отчет по теме 7
Шабатов Андрей, А-02-23
## 1 Запуск интерактивной оболочки IDLE
Была запущена интерактивная оболочка IDLE.
## 2 Изучение создания простых функций
Было изучено создание различных функций.
## 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()
Подтверждение успеха операции
```
## 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
```
## 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
```
## 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) #Сложение списков
>>>kor = ("a", 8)
>>>kor2 = ("b", 9)
>>>kor3 = ("c", 10)
>>>kor4 = ("d", 11)
>>>k=slozh(kor, kor2, kor3, kor4)
>>>k
('a', 8, 'b', 9, 'c', 10, 'd', 11)
>>>sl1 = {"A": 8, "B": 9}
>>>sl2 = {"B": 10, "C": 11}
>>>sl3 = {"D": 12, "E": 13}
>>>sl4 = {"F": 14, "H": 15}
>>>sl=slozh(sl1, sl2, sl3, sl4)
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
sl=slozh(sl1, sl2, sl3, sl4)
File "<pyshell#29>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
>>>mn1 = {"A", "B"}
>>>mn2 = {"C", "D"}
>>>mn3 = {"E", "F"}
>>>mn4 = {"H", "J"}
>>>mn=slozh(mn1, mn2, mn3, mn4)
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
mn=slozh(mn1, mn2, mn3, mn4)
File "<pyshell#29>", line 3, in slozh
return a1+a2+a3+a4
TypeError: unsupported operand type(s) for +: 'set' and 'set'
```
## 2.5 Изучение создания функции, которая создает список со значениями вычисленных сигналов
Была создана функция, которая вычисляет значение по определенной формуле, далее реализован цикл, в котором созданный ранее список пополняется новыми значениями выходного сигнала, которые зависят от предыдущего значения выходного сигнала. По данным выходного сигнала был построен график.
```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 pylab
>>>spsm = list(range(101))
>>>pylab.plot(spsm, spsy)
[<matplotlib.lines.Line2D object at 0x000001E1619A6850>]
>>>pylab.show()
```
![](pic0.png)
## 3 Изучение действий с функциями как с обьектами
## 3.1 Изучение вывода подсказок по функции
Были выведены атрибуты созданной функции и применен один из них, который показал описание функции, которое также было выведено с помощью функции help.
```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__
'Модель устройства с памятью:\n x- текущее значение вх.сигнала,\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 Изучение применения условия if для применения разных функций
Был создан цикл-условия, в котором при однос условии функция определяется одними инструкциями, а при другом условии - другими. И была вызвана эта функция.
```py
>>>typ_fun=8
>>>if typ_fun==1:
def func():
print('Функция 1')
else:
def func():
print('Функция 2')
>>>func()
Функция 2
```
## 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
```
## 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
logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами
```
## 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
qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки
qqq
10
```
## 4.6 Изучение передачи аргументов в виде ссылки на список и словарь
Была вызвана функция, которой в качестве аргументов была передана ссылка на список и словарь.
```py
>>>e1=(-1,6);dd2={'a3':3,'a4':9}
>>>qqqq=slozh(*e1,**dd2)
>>>qqqq
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
```
## 4.8 Изучение функции, с неопределенным количеством аргументов
Была создана функция где изначально есть два аргумента, а далее не определено количество аргументов. Все переданные переменные в функцию, собираются в кортеж, доступный внутри функции. Также была создана функция, где переданные аргументы собираются в словарь.
```py
>>>def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж
"""Кортеж - сборка аргументов - должен быть последним!"""
smm=0
for elt in kort7:
smm+=elt
return a*smm+b
>>>func4(-1,2,0,3,6)
-7
>>>def func5(**slovar):
print(slovar)
>>>func5(a=5, n=8, m=30)
{'a': 5, 'n': 8, 'm': 30}
```
## 4.9 Изучение изменения обьектов внутри функции
Были созданы функции, внутри которых передаваемый аргумент как-либо был изменен, и после применения функции, просмотрено значение переменных. Числовая переменная осталась такой же (а созданная внутри функции переменная "a" не имела связи с созданной "а" вне функции), какой была задана, элемент списка изменился, а при попытке передать в функцию кортеж - выщда ошибка, так как передавалась можно сказать ссылка на кортеж и была попытка его изменить.
```py
>>>def func3(b):
a=5*b+67
>>>a #Переменная не изменилась
90
>>>sps1=[1,2,3,4] #Список – изменяемый тип объекта
>>>def func2(sps):
sps[1]=99
>>>func2(sps1)
>>>print(sps1) #Элемент списка изменился
[1, 99, 3, 4]
>>>kort=(1,2,3,4) #Кортеж – неизменяемый тип объекта
>>>func2(kort)
Traceback (most recent call last):
File "<pyshell#146>", line 1, in <module>
func2(kort)
File "<pyshell#139>", line 2, in func2
sps[1]=99
TypeError: 'tuple' object does not support item assignment
```
## 5 Изучение специальных типов пользовательских функций
Были изучены и созданы анонимные функции и функции-генераторы.
## 5.1 Изучение анонимных функций
Были созданы и применены функции без имени без аргументов, с двумя аргументами и с необязательным аргументом.
```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 Изучение функции-генератора
Была создана функция-генератор, которая производит последовательность чисел. Она была выведена с помощью цикла for, а также генерирующиеся значения были выведены поотдельности, с помощью метода __next__.
```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#165>", line 1, in <module>
print(alp.__next__())
StopIteration
```
## 6 Изучение обьектов в функциях
Были изучены локальные и глобальные обьекты, а также смоделирована система управления.
## 6.1 Изучение работы с глобальными и локальными обьектами
Была создана функция, внутри которой уже существующей в глобальном пространстве переменной было присвоено определенное новое значение. При выполнении функции глобальная переменная не изменялась. Далее внутри созданной функции была попытка напечатать переменную, которой не существует в пространстве имен функции. Также была создана функция, внутри которой была обьявлена переменная как глобальная и после этого она была изменена внутри функции, что изменило ее в глобальном пространстве.
```py
>>>glb=10
>>>def func7(arg):
loc1=15
glb=8
return loc1*arg
>>>res=func7(glb) #Для получения результата здесь использовалось значение переменной glb=10, то есть глобальной переменной, потому что именно она была передана в arg, который использовался в вычислениях.
>>>res
150
>>>glb #Значение переменной не изменилось, так как это глобальная переменная и вне функции она не переопределялась.
10
>>>def func8(arg):
loc1=15
print(glb)
glb=8
return loc1*arg
>>>res=func8(glb) #В данном случае выведется ошибка, так как до функции print внутри пространства имен функции не существует переменной glb
Traceback (most recent call last):
File "<pyshell#178>", line 1, in <module>
res=func8(glb)
File "<pyshell#177>", line 3, in func8
print(glb)
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
>>>glb=11
>>>def func7(arg):
loc1=15
global glb
print(glb)
glb=8
return loc1*arg
>>>res=func7(glb)
11
>>>glb #В этом случае значение переменной меняется, так как внутри функции обьявляется именно глобальная переменная glb.
8
>>>res #Однако в виде arg мы передали именно значение glb равное 11, поэтому как аргумент будет использоваться именно это значение, хоть сама переменная glb и была изменена.
165
```
## 6.2 Изучение нахождения локальных и глобальных обьектов
Были выведены локальные и глобальные обьекты в глобальном пространстве видимости и также внутри функции.
```py
>>>globals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', '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', 'al', 'glb', 'func7', 'res', 'func8'])
>>>locals().keys() #В данном случае отличий не будет, так как локализация обьектов запрашивается в глобальной области видимости.
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', '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', 'al', 'glb', 'func7', 'res', 'func8'])
>>>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__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', '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', 'al', 'glb', 'func7', 'res', 'func8'])
dict_keys(['arg', 'loc1', 'glb'])
'glb' in globals().keys()
True
```
## 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__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', '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', 'al', 'glb', 'func7', 'res', 'func8', 'hh', '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__', 'os', 'uspeh', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'kor', 'kor2', 'kor3', 'kor4', 'k', 'sl1', 'sl2', 'sl3', 'sl4', 'mn1', 'mn2', 'mn3', 'mn4', 'inerz', 'sps', 'spsy', 'TT', 'yy', 'xx', 'pylab', 'spsm', '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', 'al', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
```
## 6.4 Изучение моделирования системы управления
Была смоделирована система управления, состоящую из реального двигателя, тахогенератора и зоны нечувствительности (их модели представляются пользовательскими функциями). На вход системы подается синусоидальный сигнал, который проходит через отрицательную обратную связь. Модель реального двигателя и тахогенератора представлены интеграторами и усилителями, а зона нечувствительности ограничивает значения выходного сигнала. В результате работы программы вычисляется и выводится список значений, представляющих выходной сигнал системы.
```py
>>>znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1,T,k2,Xm,A,F,N=0.5,35,0.6,5,1000,5,15
>>>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))
>>>vhod
[0.0, 951.0565162951535, 587.7852522924733, -587.785252292473, -951.0565162951536, -2.4492935982947065e-13, 951.0565162951535, 587.7852522924734, -587.7852522924728, -951.0565162951538, -4.898587196589413e-13, 951.0565162951528, 587.7852522924736, -587.7852522924726, -951.0565162951538]
>>>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
>>>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, 8.209118281877132, 29.104924685415277, 40.86232427117668, 38.3075414151359, 34.68635884409398, 42.90679739719954, 57.19526562043458, 60.53754513466764, 47.64611630565597, 31.742316122264157, 25.812753880749888, 24.278160244795345, 10.44509996519298, -10.518946273258612]
```
## 7 Завершение работы в IDLE
Был завершен сеанс в среде IDLE.

@ -0,0 +1,82 @@
# Общее контрольное задание по теме 7
Шабатов Андрей, А-02-23
## Задание
Общее контрольное задание.
• Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
• Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
• Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
Y=b1+b2*X
и имеющую аргументы b1, b2 и X.
## Решение
```py
>>>def signal_zaderzka(vhod, zaderzka, vihod):
return vhod-zaderzka if len(vihod)>=zaderzka else 0
>>>t_zaderzka = 3
>>>vihod = []
>>>vhod = [1, 2, 3, 4, 5]
>>>for i in vhod:
vihod = vihod + [signal_zaderzka(i, t_zaderzka, vihod)]
>>>def signal_zaderzka(vhod, zaderzka, vihod):
return vhod-zaderzka if len(vihod)>=zaderzka else 0
>>>zaderzka = 3
>>>vihod = []
>>>vhod = [1, 2, 3, 4, 5]
>>>for i in vhod:
vihod = vihod + [signal_zaderzka(i, zaderzka, vihod)]
>>>print("входной сигнал: ", vhod, "выходной сигнал: ", vihod)
входной сигнал: [1, 2, 3, 4, 5] выходной сигнал: [0, 0, 0, 1, 2]
```
```py
>>>def histogram(data, num_bins):
"""Вычисляет и выводит гистограмму в виде таблицы, возвращает bins и counts."""
min_val, max_val = min(data), max(data)
bin_width = (max_val - min_val) / num_bins
bins = [min_val + i * bin_width for i in range(num_bins + 1)] #список границ интервалов
counts = []
for i in range(num_bins):
count = 0
for x in data:
if bins[i] <= x < bins[i+1] or (x == max_val and i == num_bins - 1):
count += 1
counts.append(count)
print("Гистограмма:")
for i in range(num_bins):
print(f"Интервал: [{bins[i]:.2f}, {bins[i+1]:.2f}], Элементов: {int(counts[i])}")
return bins, counts
>>>import random
>>>data = [random.gauss(0, 1) for _ in range(1000)]
>>>num_bins = 10
>>>bins, counts = histogram(data, num_bins)
Гистограмма:
Интервал: [-2.97, -2.30], Элементов: 7
Интервал: [-2.30, -1.62], Элементов: 43
Интервал: [-1.62, -0.94], Элементов: 118
Интервал: [-0.94, -0.26], Элементов: 231
Интервал: [-0.26, 0.42], Элементов: 266
Интервал: [0.42, 1.10], Элементов: 174
Интервал: [1.10, 1.78], Элементов: 122
Интервал: [1.78, 2.46], Элементов: 30
Интервал: [2.46, 3.13], Элементов: 8
Интервал: [3.13, 3.81], Элементов: 1
```
```py
>>>anon = lambda b1, b2, X: b1+b2*X
>>>Y = anon(1,2,3)
>>>Y
7
```

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

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

@ -0,0 +1,23 @@
znach=input('k1,T,k2,Xm,A,F,N=').split(',')
k1=float(znach[0])
T=float(znach[1])
k2=float(znach[2])
Xm=float(znach[3])
A=float(znach[4])
F=float(znach[5])
N=int(znach[6])
import math
vhod=[]
for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F))
import MM1 as mod
yi1=0;yin1=0;yi2=0
vyhod=[]
for xt in vhod:
xt1=xt-yi2 #отрицательная обратная связь
[yi1,yin1]=mod.realdvig(xt1,k1,T,yi1,yin1)
yi2=mod.tahogen(yin1,k2,yi2)
yt=mod.nechus(yin1,Xm)
vyhod.append(yt)

@ -0,0 +1,16 @@
def calculate_correlation(list1, list2):
n = min(len(list1), len(list2)) # Используем меньшую длину
sum_x = sum(list1[:n])
sum_y = sum(list2[:n])
sum_x_squared = sum(x**2 for x in list1[:n])
sum_y_squared = sum(y**2 for y in list2[:n])
sum_xy = sum(list1[i] * list2[i] for i in range(n))
numerator = n * sum_xy - sum_x * sum_y
denominator = math.sqrt((n * sum_x_squared - sum_x**2) * (n * sum_y_squared - sum_y**2))
if denominator == 0:
print("Предупреждение: Деление на ноль при вычислении корреляции.")
return None
return numerator / denominator

@ -0,0 +1,8 @@
def read_number_list(filename):
number_list = []
with open(filename, 'r') as file:
for line in file:
numbers = line.strip().split()
for num in numbers:
number_list.append(float(num))
return number_list

@ -0,0 +1,22 @@
import math
def calculate_correlation(list1, list2):
if not list1 or not list2:
print("Ошибка: Один или оба списка пусты.")
return None
n = min(len(list1), len(list2)) # Используем меньшую длину
sum_x = sum(list1[:n])
sum_y = sum(list2[:n])
sum_x_squared = sum(x**2 for x in list1[:n])
sum_y_squared = sum(y**2 for y in list2[:n])
sum_xy = sum(list1[i] * list2[i] for i in range(n))
numerator = n * sum_xy - sum_x * sum_y
denominator = math.sqrt((n * sum_x_squared - sum_x**2) * (n * sum_y_squared - sum_y**2))
if denominator == 0:
print("Предупреждение: Деление на ноль при вычислении корреляции.")
return None
return numerator / denominator

@ -0,0 +1,14 @@
import Module1
import Module2
if __name__ == "__main__":
file1_name = input("Введите имя первого файла: ")
file2_name = input("Введите имя второго файла: ")
list1 = Module1.read_number_list(file1_name)
list2 = Module1.read_number_list(file2_name)
if list1 is not None and list2 is not None:
correlation = Module2.calculate_correlation(list1, list2)
if correlation is not None:
print(f"Коэффициент корреляции: {correlation:.3f}")

@ -0,0 +1,299 @@
# Отчет по лабораторной работе 8
Шабатов Андрей, А-02-23
## 1 Открытие и настройка интерактивной оболочки IDLE
Была запущена интерактивная оболочка IDLE, указан рабочий каталог и импортированы необходимые модули.
```py
>>>import os
>>>os.chdir('C:\\Users\\u522-16\\Desktop\\tema8')
>>>os.getcwd() #Контролируем корректность установки текущего каталога
'C:\\Users\\u522-16\\Desktop\\tema8'
>>>import importlib
>>>import sys
```
## 2
## 2.1 Запуск модуля на выполнение
Был запущен созданный модуль на выполнение, введенное на запрос число было сохранено в переменную perm1, созданную в модуле. Были просмотрены атрибуты и тип модуля. Была неудачно произведена попытка заново запустить модуль на выполнение. После этого модуль был запущен еще раз с помощью метода reload. Была просмотрена переменная perm1 и установлено, что данная переменная была переопределена.
```py
>>>import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>>type(Mod1)
<class 'module'>
>>>dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
>>>Mod1.perm1
'5'
>>>import Mod1
>>>imp.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\u522-16\\Desktop\\tema8\\Mod1.py'>
>>>Mod1.perm1
'3'
```
## 2.2 Изучение удаления модуля из словаря
Был выведен словарь - значение атрибута sys.modules, среди которых был модуль Mod1. Далее этот модуль был удален, и снова изображен словарь, в котором Mod1 отсутствовал. Потом модуль был снова запущен и снова удален из словаря.
```py
>>>print(sorted(sys.modules.keys()))
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_distutils_hack', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha512', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_thread', '_tkinter', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'imp', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'pywin32_bootstrap', 'pywin32_system32', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>>sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\u522-16\\Desktop\\tema8\\Mod1.py'>
>>>print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_distutils_hack', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha512', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_thread', '_tkinter', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'imp', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'pywin32_bootstrap', 'pywin32_system32', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>>import Mod1
Mod1:Введите значение = 9
Mod1:Значение perm1= 9
>>>sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\u522-16\\Desktop\\tema8\\Mod1.py'>
```
## 2.3 Изучение запуска модуля с помощью exec
Модуль был запущен на выполнение с помощью функции exec, которая читает код. Далее трижды было введено значение perm1, и выведено на экран.
```py
>>>exec(open('Mod1.py').read())
Mod1:Введите значение = 8
Mod1:Значение perm1= 8
>>>exec(open('Mod1.py', encoding='utf-8').read()) #Здесь указана кодировка, чтобы в консоли выводился текст на кириллице.
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
>>>perm1
'4'
>>>exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 8
Mod1:Значение perm1= 8
>>>perm1
'8'
>>>exec(open('Mod1.py', encoding='utf-8').read())
Mod1:Введите значение = 9
Mod1:Значение perm1= 9
>>>perm1
'9'
```
## 2.4 Изучение запуска модуля с помощью from … import …
Была импортирована лишь часть модуля, просмотрены обьекты, а так же выведено значение переменной perm1.
```py
>>>from Mod1 import perm1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>>dir()
['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'fg', 'imp', 'importlib', 'os', 'perm1', 'summa', 'sys']
>>>perm1
'5'
```
Создан модуль с двумя функциями и изначально импортирована одна функция из этого модуля. Просмотрено значение переменной g. Просмотрены обьекты. Была произведена попытка вызова неимпортированной функции из модуля 2. Под псевдонимом была импортирована вторая функция из модуля и вызвана эта функция. Далее функции были удалены, потом обе снова импортированы одной инструкцией. Далее был испортирован весь модуль и применена его функция.
```py
>>>from Mod2 import beta
>>>g=beta(2)
>>>g
535.4916555247646
>>>dir()
['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'beta', 'fg', 'g', 'imp', 'importlib', 'os', 'perm1', 'summa', 'sys']
>>>alpha()
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
alpha()
NameError: name 'alpha' is not defined
>>>from Mod2 import alpha as al
>>>al()
****ALPHA****
Значение t=4
'4'
>>>del al,beta
>>>from Mod2 import alpha as al, beta as bt
>>>del al
>>>del bt
>>>from Mod2 import * #Звездочка означает, что импортируется весь модуль, а не конкретные функции.
tt=alpha() #На запрос введите значение 0.12
****ALPHA****
Значение t=0.12
>>>uu=beta(float(tt))
>>>uu
1.4578913609506803
```
## 3
## 3.1
Был создан еще один модуль Mod0, в котором вызываются модуль 1 и функции из модуля 2. Также выведены значения обьектов, созданных во время выполнения программы.
```py
>>>sys.modules.pop('Mod1')
>>>sys.modules.pop('Mod2')
>>>import Mod0
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=8
tt= 8
qq= 82226315585.59491
>>>Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
'8'
82226315585.59491
'5'
```
## 3.2 Создание модулей для реализации программы моделирования системы управления
Были созданы модули MM1 - с функциями реализующими реальный двигатель, тахогенератор и нелинейное звено; MM2 - с инструкциями, обеспечивающими ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала; MM0 - содержащую импорт модуля MM2 и печатающую получившийся выходной сигнал. Был вызван модуль MM0.
```py
================= RESTART: C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\MM0.py =================
k1,T,k2,Xm,A,F,N=0.5,35,0.6,5,1000,5,15
y= [0, 8.209118281877132, 29.104924685415277, 40.86232427117668, 38.3075414151359, 34.68635884409398, 42.90679739719954, 57.19526562043458, 60.53754513466764, 47.64611630565597, 31.742316122264157, 25.812753880749888, 24.278160244795345, 10.44509996519298, -10.518946273258612]
```py
## 3.3 Изучение области действия обьектов в модулях
Была изучена область действия обьектов в модулях. Исходя из примеров, приведенных ниже, можно сказать, что обьекты входящие в один модуль будут локализованы в этом модуле и доступны в нем. К переменным из другого модуля, даже импортированного в главный (выполняемый) модуль, прямого доступа не будет.
## 3.3.1 Изучение области действия обьектов в модулях (пример 1)
Внутрь модуля Mod2 в функцию alpha был добавлен вызов функции beta.
```
def alpha():
print('****ALPHA****')
t=input('Значение t=')
n = beta(6)
print(n)
return t
```
Далее запущен модуль и вызвана функция alpha. Можно заметить, что инструкции успешно выполнились.
```py
>>>alpha()
****ALPHA****
Значение t=9
153552935.39544657
'9'
```
Далее в модуле в функции beta был добавлен вызов функции alpha.
```py
def beta(q):
import math
expi=q*math.pi
alpha()
return math.exp(expi)
```
Функция beta была успешно вызвана
```
beta(6)
****ALPHA****
Значение t=9
153552935.39544657
```
## 3.3.2 Изучение области действия обьектов в модулях (пример 2)
В модуль Mod0 была добавлена функция печати переменных t и expi, которые есть в Mod2.
```py
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
print(t, expi)
```
При запуске модуля на моменте печати этих переменных была выдана ошибка.
```py
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=7
tt= 7
qq= 3553321280.847041
Traceback (most recent call last):
File "C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\Mod0.py", line 10, in <module>
print(t, expi)
NameError: name 't' is not defined. Did you mean: 'tt'?
```
## 3.3.3 Изучение области действия обьектов в модулях (пример 3)
В модуле Mod0 были добавлены инструкции, где переменная perm1 была увеличена в 3 раза и напечатана
```py
#Модуль Mod0
import Mod1
print('perm1=',Mod1.perm1)
from Mod2 import alpha as al
tt=al()
print('tt=',tt)
from Mod2 import beta
qq=beta(float(tt))
print('qq=',qq)
perm1 = Mod1.perm1*3
print("perm1*3= ", perm1)
```
При запуске модуля напечаталась переменная perm1 умноженная на 3. Так как эта переменная класса строка, то строка была повторена трижды и сформирована новая строка.
```py
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
perm1= 4
****ALPHA****
Значение t=3
tt= 3
qq= 12391.647807916694
perm1*3= 444
```
## 3.3.4 Изучение области действия обьектов в модулях (пример 4)
В командной строке после выполнения главного модуля была произведена попытка изменить переменные perm1, tt, qq. В итоге tt и qq изменились, а при обращении к perm1 была выведена ошибка.
```py
================= RESTART: C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\Mod0.py ================
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=7
tt= 7
qq= 3553321280.847041
>>>perm1 = perm1*2
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
perm1 = perm1*2
NameError: name 'perm1' is not defined
>>>tt = tt*2
>>>tt
'77'
>>>qq = qq*2
>>>qq
7106642561.694082
```
## 4 Завершение работы в IDLE
Был завершен сеанс в среде IDLE.

@ -0,0 +1,22 @@
# Общее контрольное задание по теме 8
Шабатов Андрей, А-02-23
## Задание
Разработайте программу, состоящую из трех модулей:
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
## Решение
Были созданы три модуля, реализующие инструкции задания. Запущен модуль 3 на выполнение.
```py
=============== RESTART: C:\Users\Лиза\OneDrive\Desktop\python-labs\TEMA8\Module3.py ===============
Введите имя первого файла: text1.txt
Введите имя второго файла: text2.txt
Коэффициент корреляции: 0.962
```

Двоичные данные
TEMA9/Figure_1.png

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

После

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

@ -0,0 +1,13 @@
class Class1:
def zad_zn(self,znach):
self.data=znach
def otobrazh(self):
print(self.data)
class Class2(Class1):
def otobrazh(self):
print('значение=',self.data)
def otobrazh(objekt):
print('значение объекта=',objekt)

@ -0,0 +1,21 @@
class SAU:
def __init__(self,zn_param):
self.param=zn_param
self.ypr=[0,0]
def zdn_zn(self,upr):
self.x=upr
def model(self):
def inerz(x,T,yy):
return (x+T*yy)/(T+1)
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
y1=self.param[0]*y0 #Усилитель1
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
self.ypr[0]=y2
self.ypr[1]=y3
def otobraz(self):
print('y=',self.ypr[1])

@ -0,0 +1,209 @@
# Общее контрольное задание
## Создайте и запишите в модуль класс, содержащий следующие компоненты: конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения; метод для обеспечения операции повышения оклада сотрудника на заданное значение; метод для обеспечения перевода сотрудника из одного отдела в другой; метод для изменения должности сотрудника; свойство, содержащее перечень (список) поощрений сотрудника. Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
```py
class Employee:
"""
Класс для представления сотрудника организации
"""
def __init__(self, fio="Неизвестно", otdel="Не назначен",
dolzhnost="Не определена", oklad=0):
"""
Конструктор класса Employee
"""
self.fio = fio
self.otdel = otdel
self.dolzhnost = dolzhnost
self.oklad = oklad
self.__pooshreniya = [] # приватный атрибут для хранения поощрений
# Создаем свойство без декораторов
self.pooshreniya = property(self._get_pooshreniya,
self._set_pooshreniya,
self._del_pooshreniya)
def povysit_oklad(self, summa):
"""
Метод для повышения оклада сотрудника на заданную сумму
"""
if summa > 0:
self.oklad += summa
print(f"Оклад сотрудника {self.fio} повышен на {summa}. Новый оклад: {self.oklad}")
else:
print("Сумма повышения должна быть положительной")
def perevesti_otdel(self, noviy_otdel):
"""
Метод для перевода сотрудника в другой отдел
"""
stariy_otdel = self.otdel
self.otdel = noviy_otdel
print(f"Сотрудник {self.fio} переведен из отдела '{stariy_otdel}' в отдел '{noviy_otdel}'")
def izmenit_dolzhnost(self, novaya_dolzhnost):
"""
Метод для изменения должности сотрудника
"""
staraya_dolzhnost = self.dolzhnost
self.dolzhnost = novaya_dolzhnost
print(f"Сотрудник {self.fio} переведен с должности '{staraya_dolzhnost}' на должность '{novaya_dolzhnost}'")
# Методы для свойства pooshreniya (вместо декораторов)
def _get_pooshreniya(self):
"""Геттер для получения списка поощрений"""
return self.__pooshreniya
def _set_pooshreniya(self, value):
"""Сеттер для добавления нового поощрения"""
if isinstance(value, str):
self.__pooshreniya.append(value)
print(f"Добавлено поощрение для {self.fio}: '{value}'")
elif isinstance(value, list):
self.__pooshreniya.extend(value)
print(f"Добавлены поощрения для {self.fio}: {value}")
else:
print("Поощрение должно быть строкой или списком строк")
def _del_pooshreniya(self):
"""Делитер для очистки списка поощрений"""
self.__pooshreniya.clear()
print(f"Список поощрений сотрудника {self.fio} очищен")
def dobavit_pooshrenie(self, pooshrenie):
"""
Альтернативный метод для добавления поощрения
"""
self.__pooshreniya.append(pooshrenie)
print(f"Добавлено поощрение для {self.fio}: '{pooshrenie}'")
def otobrazit_informaciyu(self):
"""
Метод для отображения полной информации о сотруднике
"""
print("\n")
print(f"ФИО: {self.fio}")
print(f"Отдел: {self.otdel}")
print(f"Должность: {self.dolzhnost}")
print(f"Оклад: {self.oklad} руб.")
print(f"Поощрения: {self.__pooshreniya if self.__pooshreniya else 'нет'}")
# Демонстрационная программа
if __name__ == "__main__":
print("Демонстрация работы класса EMPLOYEE\n")
# Создание первого экземпляра класса
print("1. Создание первого сотрудника:")
sotrudnik1 = Employee("Петров Алексей Сергеевич", "IT-отдел", "Программист", 50000)
sotrudnik1.otobrazit_informaciyu()
# Создание второго экземпляра класса
print("\n2. Создание второго сотрудника:")
sotrudnik2 = Employee("Сидорова Мария Петровна", "Бухгалтерия", "Главный бухгалтер", 75000)
sotrudnik2.otobrazit_informaciyu()
# Операции с первым сотрудником
print("\n3. Операции с первым сотрудником:")
sotrudnik1.povysit_oklad(10000)
sotrudnik1.perevesti_otdel("Отдел разработки")
sotrudnik1.izmenit_dolzhnost("Старший программист")
sotrudnik1.pooshreniya = "Благодарность за успешный проект"
sotrudnik1.pooshreniya = "Премия за квартал"
sotrudnik1.otobrazit_informaciyu()
# Операции со вторым сотрудником
print("\n4. Операции со вторым сотрудником:")
sotrudnik2.povysit_oklad(5000)
sotrudnik2.perevesti_otdel("Финансовый отдел")
sotrudnik2.dobavit_pooshrenie("Благодарность за годовой отчет")
sotrudnik2.otobrazit_informaciyu()
# Работа со свойствами
print("\n5. Работа со свойствами:")
print(f"Поощрения {sotrudnik1.fio}: {sotrudnik1.pooshreniya}")
print(f"Поощрения {sotrudnik2.fio}: {sotrudnik2.pooshreniya}")
# Добавление нескольких поощрений сразу
print("\n6. Добавление нескольких поощрений:")
sotrudnik1.pooshreniya = ["Почетная грамота", "Ценный подарок"]
sotrudnik1.otobrazit_informaciyu()
# Очистка поощрений (демонстрация делитера)
print("\n7. Очистка поощрений:")
del sotrudnik2.pooshreniya
sotrudnik2.otobrazit_informaciyu()
print("\nДемонстрация завершена")
```
## Получу следующее:
```py
Демонстрация работы класса EMPLOYEE
1. Создание первого сотрудника:
ФИО: Петров Алексей Сергеевич
Отдел: IT-отдел
Должность: Программист
Оклад: 50000 руб.
Поощрения: нет
2. Создание второго сотрудника:
ФИО: Сидорова Мария Петровна
Отдел: Бухгалтерия
Должность: Главный бухгалтер
Оклад: 75000 руб.
Поощрения: нет
3. Операции с первым сотрудником:
Оклад сотрудника Петров Алексей Сергеевич повышен на 10000. Новый оклад: 60000
Сотрудник Петров Алексей Сергеевич переведен из отдела 'IT-отдел' в отдел 'Отдел разработки'
Сотрудник Петров Алексей Сергеевич переведен с должности 'Программист' на должность 'Старший программист'
ФИО: Петров Алексей Сергеевич
Отдел: Отдел разработки
Должность: Старший программист
Оклад: 60000 руб.
Поощрения: нет
4. Операции со вторым сотрудником:
Оклад сотрудника Сидорова Мария Петровна повышен на 5000. Новый оклад: 80000
Сотрудник Сидорова Мария Петровна переведен из отдела 'Бухгалтерия' в отдел 'Финансовый отдел'
Добавлено поощрение для Сидорова Мария Петровна: 'Благодарность за годовой отчет'
ФИО: Сидорова Мария Петровна
Отдел: Финансовый отдел
Должность: Главный бухгалтер
Оклад: 80000 руб.
Поощрения: ['Благодарность за годовой отчет']
5. Работа со свойствами:
Поощрения Петров Алексей Сергеевич: Премия за квартал
Поощрения Сидорова Мария Петровна: <property object at 0x0000026057B9E5C0>
6. Добавление нескольких поощрений:
ФИО: Петров Алексей Сергеевич
Отдел: Отдел разработки
Должность: Старший программист
Оклад: 60000 руб.
Поощрения: нет
7. Очистка поощрений:
ФИО: Сидорова Мария Петровна
Отдел: Финансовый отдел
Должность: Главный бухгалтер
Оклад: 80000 руб.
Поощрения: ['Благодарность за годовой отчет']
Демонстрация завершена
```

@ -0,0 +1,263 @@
# Отчёт по теме 9
Шабатов Андрей, А-02-23
## Пункт 2
### Пункт 2.1. Создание автономного класса
```py
>>> class Class1:
... def zad_zn(self,znach):
... self.data=znach
... def otobrazh(self):
... print(self.data)
...
...
>>> z1=Class1()
>>> z2=Class1()
>>> z1.zad_zn('экз.класса 1')
>>> z2.zad_zn(-632.453)
>>> z1.otobrazh()
экз.класса 1
>>> z2.otobrazh()
-632.453
>>> z1.data='Новое значение атрибута у экз.1'
>>> z1.otobrazh()
Новое значение атрибута у экз.1
```
### Пункт 2.2. Создание класса-наследника
```py
>>> class Class2(Class1):
... def otobrazh(self):
... print('значение=',self.data)
...
...
>>> z3=Class2()
>>> dir(z3)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
>>> z3.zad_zn('Совсем новое')
>>> z3.otobrazh()
значение= Совсем новое
>>> z1.otobrazh()
Новое значение атрибута у экз.1
>>> del z1,z2,z3
```
## Пункт 3
Использование классов, содержащихся в модулях
Содержимое файла Mod3.py
```py
class Class1:
def zad_zn(self,znach):
self.data=znach
def otobrazh(self):
print(self.data)
class Class2(Class1):
def otobrazh(self):
print('значение=',self.data)
def otobrazh(objekt):
print('значение объекта=',objekt)
```
Вывод
```py
>>> from Mod3 import Class1
>>> z4 = Class1()
>>> z4.otobrazh()
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
z4.otobrazh()
File "C:\Users\u202-14\Desktop\poas\TEMA9\Mod3.py", line 5, in otobrazh
print(self.data)
AttributeError: 'Class1' object has no attribute 'data'
>>> from Mod3 import Class1
>>> z4=Class1()
>>> z4.data='значение данного data у экз.4'
>>> z4.otobrazh()
значение данного data у экз.4
>>> del z4
>>> import Mod3
>>> z4=Mod3.Class2()
>>> z4.zad_zn('Класс из модуля')
>>> z4.otobrazh()
значение= Класс из модуля
>>> Mod3.otobrazh('Объект')
значение объекта= Объект
```
## Пункт 4. Использование специальных методов
```py
>>> class Class3(Class2):
... def __init__(self,znach):
... self.data=znach
... def __add__(self,drug_zn):
... return Class3(self.data+drug_zn)
... def zad_dr_zn(self,povtor):
... self.data*=povtor
...
...
>>> z5=Class3('abc')
>>> z5.otobrazh()
значение= abc
>>> z6=z5+'def'
>>> z6.otobrazh()
значение= abcdef
>>> z6.zad_dr_zn(3)
>>> z6.otobrazh()
значение= abcdefabcdefabcdef
```
## Пункт 5. Присоединение атрибутов к классу
```py
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> Class3.fio='Иванов И.И.'
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> z7=Class3(123)
>>> dir(z7)==dir(Class3)
False
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
>>> z7.rozden='1987'
>>> dir(z7)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
>>> dir(Class3)
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
```
## Пункт 6. Выявление родительских классов
```py
Class3.__bases__
(<class '__main__.Class2'>,)
Class2.__bases__
(<class '__main__.Class1'>,)
Class1.__bases__
(<class 'object'>,)
object.__bases__
()
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. Создание свойства класса
```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)
exempl=Class4(12)
exempl.svojstvo
12
exempl.svojstvo=45
print(exempl.svojstvo)
45
del exempl.svojstvo
exempl.svojstvo
Traceback (most recent call last):
File "<pyshell#123>", line 1, in <module>
exempl.svojstvo
File "<pyshell#117>", 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])
```
Содержимое файла starter.py
```py
prm=[2.5,4,1.3,0.8]
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)

@ -0,0 +1,13 @@
prm=[2.5,4,1.3,0.8]
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()
Загрузка…
Отмена
Сохранить