Сравнить коммиты
21 Коммитов
| Автор | SHA1 | Дата |
|---|---|---|
|
|
ad7c31afbf | 2 месяцев назад |
|
|
0dec7f90aa | 2 месяцев назад |
|
|
378525e808 | 2 месяцев назад |
|
|
af70130e47 | 2 месяцев назад |
|
|
f91acc56b1 | 2 месяцев назад |
|
|
04b23627ee | 2 месяцев назад |
|
|
3798e702d7 | 2 месяцев назад |
|
|
df857e3665 | 2 месяцев назад |
|
|
b002f1a69f | 3 месяцев назад |
|
|
fd575b9283 | 3 месяцев назад |
|
|
a4b5016d5f | 3 месяцев назад |
|
|
e74b731f64 | 3 месяцев назад |
|
|
039e74c207 | 3 месяцев назад |
|
|
13ca6d37d0 | 3 месяцев назад |
|
|
aa1136f111 | 4 месяцев назад |
|
|
26d1583e1b | 4 месяцев назад |
|
|
5533367117 | 4 месяцев назад |
|
|
7c69ea6f76 | 4 месяцев назад |
|
|
669cf0a11c | 4 месяцев назад |
|
|
619fdaa6fb | 5 месяцев назад |
|
|
0d14f1d582 | 5 месяцев назад |
@ -0,0 +1,2 @@
|
|||||||
|
print('This line was executed from .txt file!')
|
||||||
|
print('And this is two lines programm')
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
#Программа по Теме 1 Коваленко Дмитрий Максимович
|
||||||
|
print('Hello')
|
||||||
|
h=input('Your name=')
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
# Отчет по теме 1
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 1 Изучение среды IDLE
|
||||||
|
|
||||||
|
### 1.1 Работа с интерпретатором Python
|
||||||
|
|
||||||
|
Открыл интерпретатор python в терминале
|
||||||
|
|
||||||
|
```
|
||||||
|
vatarishin@MacBook-Air python-labs % python3
|
||||||
|
```
|
||||||
|
|
||||||
|
Попробовал пару простых комманд
|
||||||
|
```
|
||||||
|
>>> print('Hello')
|
||||||
|
Hello
|
||||||
|
>>> h=input('Your name=')
|
||||||
|
Your name=Dmitriy
|
||||||
|
```
|
||||||
|
Завершил раборту с интерпретатором в терминале
|
||||||
|
```
|
||||||
|
>>> exit()
|
||||||
|
vatarishin@MacBook-Air python-labs %
|
||||||
|
```
|
||||||
|
### 1.2 Работа с python в IDE
|
||||||
|
|
||||||
|
Создал файл [Pr0.py](Pr0.py) и непенес в него команды из предыдущего пункта.
|
||||||
|
|
||||||
|
Запустил файл на выполнение посредством GUI IDE VS CODE
|
||||||
|
```
|
||||||
|
vatarishin@MacBook-Air python-labs % /usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/TEMA1/Pr0.py
|
||||||
|
Hello
|
||||||
|
Your name=Dmitriy
|
||||||
|
```
|
||||||
|
|
||||||
|
Попробовал альтернативный варинат запуска программы
|
||||||
|
```
|
||||||
|
vatarishin@MacBook-Air TEMA1 % python3 Pr0.py
|
||||||
|
Hello
|
||||||
|
Your name=Shin
|
||||||
|
```
|
||||||
|
|
||||||
|
Запустил на выполнение файл [prb1.py](prb1.py)
|
||||||
|
```
|
||||||
|
vatarishin@MacBook-Air python-labs % /usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/TEMA1/prb1.py
|
||||||
|
Как Вас зовут? Дмитрий
|
||||||
|
Привет, Дмитрий
|
||||||
|
```
|
||||||
|
### 1.3 Изучение справки
|
||||||
|
```
|
||||||
|
help(print)
|
||||||
|
Help on built-in function print in module builtins:
|
||||||
|
|
||||||
|
print(...)
|
||||||
|
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
|
||||||
|
|
||||||
|
Prints the values to a stream, or to sys.stdout by default.
|
||||||
|
Optional keyword arguments:
|
||||||
|
file: a file-like object (stream); defaults to the current sys.stdout.
|
||||||
|
sep: string inserted between values, default a space.
|
||||||
|
end: string appended after the last value, default a newline.
|
||||||
|
flush: whether to forcibly flush the stream.
|
||||||
|
|
||||||
|
Help on built-in function input in module builtins:
|
||||||
|
```
|
||||||
|
Попробовал вызвать две команды справки на одной строке
|
||||||
|
```
|
||||||
|
help(print); help(input)
|
||||||
|
Help on built-in function print in module builtins:
|
||||||
|
|
||||||
|
print(...)
|
||||||
|
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
|
||||||
|
|
||||||
|
Prints the values to a stream, or to sys.stdout by default.
|
||||||
|
Optional keyword arguments:
|
||||||
|
file: a file-like object (stream); defaults to the current sys.stdout.
|
||||||
|
sep: string inserted between values, default a space.
|
||||||
|
end: string appended after the last value, default a newline.
|
||||||
|
flush: whether to forcibly flush the stream.
|
||||||
|
|
||||||
|
Help on built-in function input in module builtins:
|
||||||
|
|
||||||
|
input(prompt=None, /)
|
||||||
|
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.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.4 Изучение примеров
|
||||||
|
Запустил файл [tdemo_chaos.py](tdemo_chaos.py)
|
||||||
|
|
||||||
|
Открылось окно GUI, где в случайном порядке рисуются точки, соедененные линиями
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 1
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Вопрос 8
|
||||||
|
|
||||||
|
Как можно запустить на выполнение программу, исходный код которой находится в тексто-вом файле ABC.txt?
|
||||||
|
|
||||||
|
## Ответ
|
||||||
|
|
||||||
|
Запустить код написанный в .txt файле можно при помощи функции ```exec()```
|
||||||
|
|
||||||
|
Пример файла [ABC.txt](ABC.txt)
|
||||||
|
Способ запуска кода из txt файла приведен в [test.py](test.py)
|
||||||
|
|
||||||
|
Результат выполнения
|
||||||
|
```
|
||||||
|
vatarishin@MacBook-Air python-labs % /Library/Developer/CommandLineTools/usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/
|
||||||
|
TEMA1/test.py
|
||||||
|
This line was executed from .txt file!
|
||||||
|
And this is two lines programm
|
||||||
|
```
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
with open('/Users/vatarishin/lab_sem_5/python-labs/TEMA1/ABC.txt', 'r') as textScript:
|
||||||
|
exec(textScript.read())
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
gg1=1.6 #значение в виде вещественного числа
|
||||||
|
hh1='Строка' #значение в виде символьной строки
|
||||||
|
73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
|
||||||
|
and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика!
|
||||||
@ -0,0 +1,255 @@
|
|||||||
|
# Отчет по теме 2
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 2 Базовые типы объектов
|
||||||
|
|
||||||
|
### 2.1 Изучение простых объектов
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> f1=16; f2=3
|
||||||
|
>>> f1,f2
|
||||||
|
(16, 3)
|
||||||
|
>>> f1;f2
|
||||||
|
16
|
||||||
|
3
|
||||||
|
>>> dir()
|
||||||
|
['__annotations__', '__builtins__', '__doc__', '__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__', '__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_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
|
||||||
|
TypeError: type() takes 1 or 3 arguments
|
||||||
|
>>> type(f2)
|
||||||
|
<class 'int'>
|
||||||
|
>>> del f1,f2
|
||||||
|
>>> dir()
|
||||||
|
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
|
||||||
|
```
|
||||||
|
Видим, что переменные имеют тип `int`. При помощи `dir(var)` можно узнать методы объекта, а при вызове `dir()` можно посмотреть, какие переменные есть в памяти. Как можно видеть из последнего запуска `dir()`, переменные `f1`, `f2` были удалены из памяти программы.
|
||||||
|
### 2.2 Изучение правил именования
|
||||||
|
|
||||||
|
Создал программу [prog1.py](prog1.py) и записал в неё несколько комманд для проверки правил именования. Ожидаемо, получил ошибку на неправильном имени файла
|
||||||
|
```
|
||||||
|
vatarishin@MacBook-Air python-labs % /Library/Developer/CommandLineTools/usr/bin/python3 /Users/vatarishin/lab_sem_5/python-labs/
|
||||||
|
TEMA2/prog1.py
|
||||||
|
File "/Users/vatarishin/lab_sem_5/python-labs/TEMA2/prog1.py", line 3
|
||||||
|
73sr=3 #неправильное имя – начинается с цифры - будет диагностика!
|
||||||
|
^
|
||||||
|
SyntaxError: invalid syntax
|
||||||
|
```
|
||||||
|
### 2.3 Изучение списка ключевых слов
|
||||||
|
```
|
||||||
|
>>> import keyword
|
||||||
|
>>> kw = keyword.kwlist
|
||||||
|
>>> print(kw)
|
||||||
|
['False', 'None', 'True', '__peg_parser__', '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']
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.4 Выведение списка встроенных идентификаторов
|
||||||
|
```
|
||||||
|
>>> import builtins
|
||||||
|
>>> dir(builtins)
|
||||||
|
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
|
||||||
|
```
|
||||||
|
Изучим функцию `zip()`
|
||||||
|
|
||||||
|
```
|
||||||
|
Help on class zip in module builtins:
|
||||||
|
|
||||||
|
class zip(object)
|
||||||
|
| zip(*iterables) --> A zip object yielding tuples until an input is exhausted.
|
||||||
|
|
|
||||||
|
| >>> list(zip('abcdefg', range(3), range(4)))
|
||||||
|
| [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
|
||||||
|
|
|
||||||
|
| The zip object yields n-length tuples, where n is the number of iterables
|
||||||
|
| passed as positional arguments to zip(). The i-th element in every tuple
|
||||||
|
| comes from the i-th iterable argument to zip(). This continues until the
|
||||||
|
| shortest argument is exhausted.
|
||||||
|
```
|
||||||
|
### 2.5 Рассмотрим значимость регистров
|
||||||
|
```
|
||||||
|
>>> Gg1=45
|
||||||
|
>>> gg1
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
NameError: name 'gg1' is not defined
|
||||||
|
>>> Gg1
|
||||||
|
45
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.6 Изучим простые типы объектов
|
||||||
|
|
||||||
|
Логический тип
|
||||||
|
```
|
||||||
|
>>> bb1=True; bb2=False
|
||||||
|
>>> bb1;bb2
|
||||||
|
True
|
||||||
|
False
|
||||||
|
>>> type(bb1)
|
||||||
|
<class 'bool'>
|
||||||
|
```
|
||||||
|
|
||||||
|
Прочие типы
|
||||||
|
```
|
||||||
|
>>> ii1=-1234567890
|
||||||
|
>>> ff1=-8.9876e-12 #экспоненциальная форма записи вещественного числа
|
||||||
|
>>> dv1=0b1101010 #Это – двоичное число. В объекте какого класса оно сохранено?
|
||||||
|
>>> vsm1=0o52765 #Это – восьмеричное число
|
||||||
|
>>> shest1=0x7109af6 #Это – шестнадцатеричное число
|
||||||
|
>>> cc1=2-3j
|
||||||
|
>>> a=3.67; b=-0.45
|
||||||
|
>>> cc2=complex(a,b) #Создается комплексное число
|
||||||
|
>>> cc2
|
||||||
|
(3.67-0.45j)
|
||||||
|
```
|
||||||
|
Символьные строки
|
||||||
|
```
|
||||||
|
>> ss1='Это - строка символов'
|
||||||
|
>>> ss1="Это - строка символов"
|
||||||
|
>>> ss1a="Это - \" строка символов \", \n \t выводимая на двух строках";print(ss1a)
|
||||||
|
Это - " строка символов ",
|
||||||
|
выводимая на двух строках
|
||||||
|
>>> ss1b= 'Меня зовут: \n Коваленко Д.М.'
|
||||||
|
>>> print(ss1b)
|
||||||
|
Меня зовут:
|
||||||
|
Коваленко Д.М.
|
||||||
|
>>> mnogo="""Нетрудно заметить , что в результате операции
|
||||||
|
... над числами разных типов получается число,
|
||||||
|
... имеющее более сложный тип из тех, которые участвуют в операции."""
|
||||||
|
>>> print(mnogo)
|
||||||
|
Нетрудно заметить , что в результате операции
|
||||||
|
над числами разных типов получается число,
|
||||||
|
имеющее более сложный тип из тех, которые участвуют в операции.
|
||||||
|
>>> ss1="Это - строка символов"
|
||||||
|
>>> ss1[0] #Это – символ «Э»
|
||||||
|
'Э'
|
||||||
|
>>> ss1[8] #А это – символ «р»
|
||||||
|
'р'
|
||||||
|
>>> ss1[-2] #А это – символ «о» (при знаке «-»(минус) отсчет от конца строки)
|
||||||
|
'о'
|
||||||
|
ss1[6:9] #Это часть строки – символы с 6-го индекса по 8-й (9-й не включается!)
|
||||||
|
ss1[13:] #Это часть строки – с 13-го индекса и до конца
|
||||||
|
ss1[:13] #Это часть строки – с начала и до 12-го индекса включительно
|
||||||
|
ss1[5:-8] #Это часть строки – с 5-го индекса и до 8-го от конца
|
||||||
|
ss1[3:17:2] #Часть строки – с 3-го по 16-й индексы с шагом 2
|
||||||
|
>>> ss1[17:3:-2]
|
||||||
|
'омсаот '
|
||||||
|
>>> ss1[4]='='
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
TypeError: 'str' object does not support item assignment
|
||||||
|
>>> ss1=ss1[:4]+'='+ss1[5:]
|
||||||
|
>>> ss1
|
||||||
|
'Это = строка символов'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.7 Изучим более сложные типы объектов
|
||||||
|
```
|
||||||
|
>>> spis1=[111,'Spisok',5-9j]
|
||||||
|
>>> 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]
|
||||||
|
>>> stup[-8::2]
|
||||||
|
[0, 1, 1, 1]
|
||||||
|
>>> spis1[1]='Список'
|
||||||
|
>>> spis1
|
||||||
|
[111, 'Список', (5-9j)]
|
||||||
|
|
||||||
|
help(spis1.append)
|
||||||
|
Help on built-in function append:
|
||||||
|
|
||||||
|
append(object, /) method of builtins.list instance
|
||||||
|
Append object to the end of the list.
|
||||||
|
>>> spis1.append('New item')
|
||||||
|
>>> spis1+['New item']
|
||||||
|
[111, 'Список', (5-9j), 'New item', 'New item']
|
||||||
|
>>> spis1.pop(1)
|
||||||
|
'Список'
|
||||||
|
>>> spis2=[spis1,[4,5,6,7]]
|
||||||
|
>>> spis2
|
||||||
|
[[111, (5-9j), 'New item'], [4, 5, 6, 7]]
|
||||||
|
>>> spis2[0][1]
|
||||||
|
(5-9j)
|
||||||
|
>>> spis2[0][1]=78
|
||||||
|
>>> spis1
|
||||||
|
[111, 78, 'New item']
|
||||||
|
```
|
||||||
|
Видим, что при изменении вложенного списка, изменяется и сам исходный список. Это происходит потому что при создании `spis2` была использована ссылка на `spis1`. Чтобы списки были независимы, в `spis2` надо передовать копию списка.
|
||||||
|
Создадим свой объект-список
|
||||||
|
```myList1 = [1, '1', True, [1, '1', True]]```
|
||||||
|
|
||||||
|
### 2.8 Изучим кортежи
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> kort1=(222,'Kortezh',77+8j)
|
||||||
|
>>> kort1
|
||||||
|
(222, 'Kortezh', (77+8j))
|
||||||
|
>>> kort1= kort1+(1,2)
|
||||||
|
>>> kort1
|
||||||
|
(222, 'Kortezh', (77+8j), 1, 2)
|
||||||
|
>>> kort1= kort1+(ss1b,)
|
||||||
|
>>> kort2=kort1[:2]+kort1[3:]
|
||||||
|
>>> kort2
|
||||||
|
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Коваленко Д.М.')
|
||||||
|
>>> kort1.index(2)
|
||||||
|
4
|
||||||
|
>>> kort1.count(222)
|
||||||
|
1
|
||||||
|
>>> kort1[2]=90
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
TypeError: 'tuple' object does not support item assignment
|
||||||
|
|
||||||
|
kort0 = (0, '0', [False, False], (0, '0', False))
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.9 Изучим словари
|
||||||
|
|
||||||
|
```
|
||||||
|
>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||||
|
>>> dic1['Orel']
|
||||||
|
56
|
||||||
|
>>> dic1['Pskov']=78
|
||||||
|
>>> dic1
|
||||||
|
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
|
||||||
|
>>> sorted(dic1.keys())
|
||||||
|
['Orel', 'Pskov', 'Saratov', 'Vologda']
|
||||||
|
>>> sorted(dic1.values())
|
||||||
|
[45, 56, 78, 145]
|
||||||
|
>>> dic2={1:'mean',2:'standart deviation',3:'correlation'}
|
||||||
|
>>> dic3={'statistics':dic2,'POAS':['base','elementary','programming']}
|
||||||
|
>>> dic3['statistics'][2]
|
||||||
|
'standart deviation'
|
||||||
|
>>> dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
|
||||||
|
>>> dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
|
||||||
|
>>> AVTI={'Курс I':[22,23,17,24,30,29,28,25,23,0,4,31,30,33,18,12,27],'Курс II':[18,16,12,15,29,18,21,23,13,0,4,20,31,26,16,], 'Курс III':[17,12,0,6,17,15,19,19,0,0,5,17,22,18,12], 'Курс IV':[27,16,0,13,17,15,19,20,0,0,2,15,18,16,17]}
|
||||||
|
|
||||||
|
>>> AVTI['Курс III'][5]
|
||||||
|
15
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.10 Изучим множества
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
|
||||||
|
>>> mnoz1
|
||||||
|
{'двигатель', 'датчик', 'линия связи', 'микропроцессор'}
|
||||||
|
>>> len(mnoz1)
|
||||||
|
4
|
||||||
|
>>> 'датчик' in mnoz1
|
||||||
|
True
|
||||||
|
>>> mnoz1.add('реле')
|
||||||
|
>>> mnoz1.remove('линия связи')
|
||||||
|
>>> mnoz1
|
||||||
|
{'микропроцессор', 'реле', 'двигатель', 'датчик'}
|
||||||
|
|
||||||
|
>>> set1 = {1, 1, '1', "1", True, True, (1, '1')}
|
||||||
|
>>> set1
|
||||||
|
{1, '1', (1, '1')}
|
||||||
|
>>> len(set1)
|
||||||
|
3
|
||||||
|
```
|
||||||
|
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
# Общее контрольное задание по теме 2
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
• Создать переменную с именем `familia` и со значением - символьной строкой – своей фамилией в латинской транскрипции.
|
||||||
|
• Создать переменную со значением, совпадающим с первой буквой из `familia`.
|
||||||
|
• Создать переменную с именем `sp_kw` со значением – списком всей ключевых слов языка Python.
|
||||||
|
• Удалите из списка `sp_kw` значение `'nonlocal'`. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
|
||||||
|
• Создайте кортеж `kort_nam` с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это `tuple`.
|
||||||
|
• Напишите инструкцию, добавляющую в `kort_nam` имена еще двух студентов.
|
||||||
|
• Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
|
||||||
|
• Создайте словарь `dict_bas`, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
import keyword
|
||||||
|
|
||||||
|
|
||||||
|
familia = 'Kovalenko'
|
||||||
|
withLetK = familia[0]
|
||||||
|
sp_kw = keyword.kwlist
|
||||||
|
sp_kw.remove('nonlocal')
|
||||||
|
sp_kw
|
||||||
|
|
||||||
|
kort_nam = ('Дмитрий', 'Максим', 'Даниил', 'Дима')
|
||||||
|
type(kort_nam)
|
||||||
|
kort_nam = kort_nam+('Александр', 'Елизавета')
|
||||||
|
kort_nam.count('Дима')
|
||||||
|
dict_bas = {'строка': familia, 'Список': sp_kw, 'Кортеж': kort_nam}
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
['False', 'None', 'True', '__peg_parser__', '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']
|
||||||
|
>>> type(kort_nam)
|
||||||
|
<class 'tuple'>
|
||||||
|
>>> kort_nam.count('Дима')
|
||||||
|
1
|
||||||
|
```
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 2
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание 9
|
||||||
|
|
||||||
|
Создайте два объекта
|
||||||
|
`u=[1,2,3,4,5]`
|
||||||
|
`v=[11,22,33,44,55]`
|
||||||
|
К какому классу относятся эти объекты? Напишите инструкцию создания нового объекта-множества `z` с элементами из `u` и `v`.
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
u = [1,2,3,4,5]
|
||||||
|
v = [11,22,33,44,55]
|
||||||
|
type(u)
|
||||||
|
type(v)
|
||||||
|
z = {*u, *v}
|
||||||
|
```
|
||||||
|
|
||||||
|
Вывод:
|
||||||
|
```py
|
||||||
|
>>> type(u)
|
||||||
|
<class 'list'>
|
||||||
|
>>> type(v)
|
||||||
|
<class 'list'>
|
||||||
|
>>> z = {*u, *v}
|
||||||
|
>>> z
|
||||||
|
{1, 2, 3, 4, 5, 33, 11, 44, 22, 55}
|
||||||
|
```
|
||||||
@ -0,0 +1,452 @@
|
|||||||
|
# Отчет по теме 3
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 3 Операции с объектами
|
||||||
|
|
||||||
|
### 3.1 Преобразование в логический тип с помощью функции bool(<Объект>).
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> logiz1=bool(56)
|
||||||
|
>>> logiz2=bool(0)
|
||||||
|
>>> logiz3=bool("Beta")
|
||||||
|
>>> logiz4=bool("")
|
||||||
|
>>> logiz1
|
||||||
|
True
|
||||||
|
>>> logiz2
|
||||||
|
False
|
||||||
|
>>> logiz3
|
||||||
|
True
|
||||||
|
>>> logiz4
|
||||||
|
False
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 Преобразование в целочисленный тип int и вещественный float
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> tt1=int(198.6)
|
||||||
|
>>> tt2=int("-76")
|
||||||
|
>>> tt3=int("B",16)
|
||||||
|
>>> tt4=int("71",8)
|
||||||
|
>>> tt5=int("98.76")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
ValueError: invalid literal for int() with base 10: '98.76'
|
||||||
|
```
|
||||||
|
В последней иструкции видим ошибку. Это происходит из-за того, что `int()` не может перевести строку в целочисленный тип, если указана дробная часть.
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> flt1=float(789)
|
||||||
|
flt2=float(-6.78e2)
|
||||||
|
flt3=float("Infinity")
|
||||||
|
flt4=float("-inf")>>> flt2=float(-6.78e2)
|
||||||
|
>>> flt3=float("Infinity")
|
||||||
|
>>> flt4=float("-inf")
|
||||||
|
>>> flt1
|
||||||
|
789.0
|
||||||
|
>>> flt2
|
||||||
|
-678.0
|
||||||
|
>>> flt3
|
||||||
|
inf
|
||||||
|
>>> flt4
|
||||||
|
-inf
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 Преобразование десятичных чисел в другие системы счисления
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> hh=123
|
||||||
|
>>> dv1=bin(hh)
|
||||||
|
>>> vos1=oct(hh)
|
||||||
|
>>> shs1=hex(hh)
|
||||||
|
>>> dv1
|
||||||
|
'0b1111011'
|
||||||
|
>>> vos1
|
||||||
|
'0o173'
|
||||||
|
>>> shs1
|
||||||
|
'0x7b'
|
||||||
|
>>> nDv1 = int(dv1, 2)
|
||||||
|
>>> nDv1
|
||||||
|
123
|
||||||
|
>>> nVos1 = int(vos1, 8)
|
||||||
|
>>> nVos1
|
||||||
|
123
|
||||||
|
>>> nShs1 = int(shs1, 16)
|
||||||
|
>>> nShs1
|
||||||
|
123
|
||||||
|
```
|
||||||
|
### 3.4 Преобразование в строку символов с помощью функции str(<Объект>)
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> strk1=str(23.6)
|
||||||
|
>>> strk2=str(logiz3)
|
||||||
|
>>> strk3=str(["A","B","C"])
|
||||||
|
>>> strk4=str(("A","B","C"))
|
||||||
|
>>> strk5=str({"A":1,"B":2,"C":9})
|
||||||
|
>>> strk3
|
||||||
|
"['A', 'B', 'C']"
|
||||||
|
```
|
||||||
|
### 3.5 Преобразование элементов объекта в список с помощью функции list(<Объект>)
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> spis1=list("Строка символов")
|
||||||
|
>>> spis2=list((124,236,-15,908))
|
||||||
|
>>> spis3=list({"A":1,"B":2,"C":9})
|
||||||
|
>>> spis3
|
||||||
|
['A', 'B', 'C']
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.6 Преобразование элементов объектов в кортеж с помощью функции tuple(<Объект>).
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> kort7=tuple('Строка символов')
|
||||||
|
>>> kort8=tuple(spis2)
|
||||||
|
>>> kort9=tuple({"A":1,"B":2,"C":9})
|
||||||
|
>>> kort9
|
||||||
|
('A', 'B', 'C')
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.7 Удаление объектов
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> del strk5, kort8
|
||||||
|
>>> strk5
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
NameError: name 'strk5' is not defined
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.8 Арифметические операции
|
||||||
|
|
||||||
|
Сложение и вычитание (+ и -)
|
||||||
|
```
|
||||||
|
>>> 12+7+90
|
||||||
|
109
|
||||||
|
>>> 5.689e-1 - 0.456
|
||||||
|
0.11289999999999994
|
||||||
|
>>> 23.6+54
|
||||||
|
77.6
|
||||||
|
>>> 14-56.7+89
|
||||||
|
46.3
|
||||||
|
```
|
||||||
|
|
||||||
|
Умножение (*)
|
||||||
|
```
|
||||||
|
>>> -6.7*12
|
||||||
|
-80.4
|
||||||
|
```
|
||||||
|
|
||||||
|
Деление (/)
|
||||||
|
```
|
||||||
|
>>> -234.5/6
|
||||||
|
-39.083333333333336
|
||||||
|
>>> a=178/45
|
||||||
|
>>> a
|
||||||
|
3.9555555555555557
|
||||||
|
```
|
||||||
|
|
||||||
|
Деление с округлением вниз (//)
|
||||||
|
```
|
||||||
|
>>> b=178//45
|
||||||
|
>>> c=-24.6//12.1
|
||||||
|
>>> b
|
||||||
|
3
|
||||||
|
>>> c
|
||||||
|
-3.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Получение остатка от деления (%)
|
||||||
|
```
|
||||||
|
>>> 148%33
|
||||||
|
16
|
||||||
|
>>> 12.6%3.8
|
||||||
|
1.2000000000000002
|
||||||
|
```
|
||||||
|
|
||||||
|
Возведение в степень (**).
|
||||||
|
```
|
||||||
|
>>> 14**3
|
||||||
|
2744
|
||||||
|
>>> e=2.7**3.6
|
||||||
|
>>> e
|
||||||
|
35.719843790663525
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.9 Операции с двоичными представлениями целых чисел
|
||||||
|
|
||||||
|
Двоичная инверсия
|
||||||
|
```
|
||||||
|
>>> dv1=9
|
||||||
|
>>> dv2=~dv1
|
||||||
|
>>> dv2
|
||||||
|
-10
|
||||||
|
```
|
||||||
|
|
||||||
|
Двоичное «И» (&) – побитовое совпадение двоичных представлений чисел
|
||||||
|
```
|
||||||
|
>>> 7&9
|
||||||
|
1
|
||||||
|
>>> 7&8
|
||||||
|
0
|
||||||
|
```
|
||||||
|
|
||||||
|
Двоичное «ИЛИ» (|)
|
||||||
|
```
|
||||||
|
>>> 7|9
|
||||||
|
15
|
||||||
|
>>> 7|8
|
||||||
|
15
|
||||||
|
>>> 14|5
|
||||||
|
15
|
||||||
|
```
|
||||||
|
|
||||||
|
Двоичное «исключающее ИЛИ»(^)
|
||||||
|
```
|
||||||
|
>>> 14^5
|
||||||
|
11
|
||||||
|
```
|
||||||
|
|
||||||
|
Сдвиг двоичного представления на заданное число разрядов влево (<<) или вправо (>>)
|
||||||
|
```
|
||||||
|
>>> h=14
|
||||||
|
>>> g=h<<2
|
||||||
|
>>> g1=h>>1
|
||||||
|
>>> g2=h>>2
|
||||||
|
>>> g
|
||||||
|
56
|
||||||
|
>>> g1
|
||||||
|
7
|
||||||
|
>>> g2
|
||||||
|
3
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.10 Операции при работе с последовательностями (строками, списками, кортежами).
|
||||||
|
|
||||||
|
Объединение последовательностей (конкатенация)(+)
|
||||||
|
```
|
||||||
|
>>> 'Система '+'регулирования'
|
||||||
|
'Система регулирования'
|
||||||
|
>>> ['abc','de','fg']+['hi','jkl']
|
||||||
|
['abc', 'de', 'fg', 'hi', 'jkl']
|
||||||
|
>>> ('abc','de','fg')+('hi','jkl')
|
||||||
|
('abc', 'de', 'fg', 'hi', 'jkl')
|
||||||
|
```
|
||||||
|
|
||||||
|
Повторение (*)
|
||||||
|
```
|
||||||
|
>>> 'ля-'*5
|
||||||
|
'ля-ля-ля-ля-ля-'
|
||||||
|
>>> ['ку','-']*3
|
||||||
|
['ку', '-', 'ку', '-', 'ку', '-']
|
||||||
|
>>> ('кис','-')*4
|
||||||
|
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
|
||||||
|
>>> signal1=[0]*3+[1]*99
|
||||||
|
>>> signal1
|
||||||
|
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
|
||||||
|
>>> signal2=(0,)*3+(1,)*5+(0,)*7
|
||||||
|
>>> signal2
|
||||||
|
(0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка наличия заданного элемента в последовательности (in)
|
||||||
|
```
|
||||||
|
>>> stroka='Система автоматического управления'
|
||||||
|
>>> 'автомат' in stroka
|
||||||
|
True
|
||||||
|
>>> 'ку' in ['ку','-']*3
|
||||||
|
True
|
||||||
|
>>> 'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl')
|
||||||
|
False
|
||||||
|
```
|
||||||
|
|
||||||
|
Подстановка значений в строку с помощью оператора «%»
|
||||||
|
```
|
||||||
|
>>> stroka='Температура = %g %s %g'
|
||||||
|
>>> stroka % (16,' меньше ',25)
|
||||||
|
'Температура = 16 меньше 25'
|
||||||
|
>>> stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
|
||||||
|
>>> stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
|
||||||
|
'Температура = 16 меньше 25'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.11 Оператор присваивания
|
||||||
|
Обычное присваивание значения переменной (=)
|
||||||
|
```
|
||||||
|
zz=-12
|
||||||
|
```
|
||||||
|
|
||||||
|
Увеличение значения переменной на заданную величину (+=) или уменьшение (-=)
|
||||||
|
```
|
||||||
|
>>> zz +=5
|
||||||
|
>>> zz
|
||||||
|
-7
|
||||||
|
>>> zz -=3
|
||||||
|
>>> zz
|
||||||
|
-10
|
||||||
|
|
||||||
|
>>> stroka='Система'
|
||||||
|
>>> stroka+=' регулирования'
|
||||||
|
>>> stroka
|
||||||
|
'Система регулирования'
|
||||||
|
```
|
||||||
|
|
||||||
|
Умножение текущего значения переменной на заданную величину (*=) или деление (/=)
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> zz /= 2
|
||||||
|
>>> zz
|
||||||
|
-5.0
|
||||||
|
>>> zz *= 5
|
||||||
|
>>> zz
|
||||||
|
-25.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Изучим оперции `//=`, `%=`, `**=`
|
||||||
|
```
|
||||||
|
>>> zz //= 2
|
||||||
|
>>> zz
|
||||||
|
-13.0
|
||||||
|
>>> zz %= 2
|
||||||
|
>>> zz
|
||||||
|
1.0
|
||||||
|
>>> zz **= 3
|
||||||
|
>>> zz
|
||||||
|
1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Множественное присваивание
|
||||||
|
```
|
||||||
|
>>> w=v=10
|
||||||
|
>>> n1,n2,n3=(11,-3,'all')
|
||||||
|
>>> n2
|
||||||
|
-3
|
||||||
|
>>> m1 = m2 = {1: '1', 2: '2'}
|
||||||
|
>>> m1
|
||||||
|
{1: '1', 2: '2'}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.12 Логические операции
|
||||||
|
Операции сравнение
|
||||||
|
```
|
||||||
|
>>> w != v
|
||||||
|
False
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка наличия заданного элемента в последовательности или во множестве
|
||||||
|
```
|
||||||
|
>>> mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||||
|
>>> 'book' in mnoz1
|
||||||
|
True
|
||||||
|
>>> 'cap' in mnoz1
|
||||||
|
False
|
||||||
|
|
||||||
|
>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||||
|
>>> 'Vologda' in dic1
|
||||||
|
True
|
||||||
|
>>> 'Pskov' in dic1
|
||||||
|
False
|
||||||
|
>>> 56 in dic1.values()
|
||||||
|
True
|
||||||
|
|
||||||
|
>>> dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
|
||||||
|
>>> 'UII' in dct1['Depart']
|
||||||
|
True
|
||||||
|
>>> dct1['Depart'][1] == 'MM'
|
||||||
|
False
|
||||||
|
```
|
||||||
|
|
||||||
|
Создание больших логических выражений с использованием соединительных слов: логическое «И» (and), логическое «ИЛИ» (or), логическое «НЕ» (not).
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> a=17
|
||||||
|
>>> b=-6
|
||||||
|
>>> (a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
|
||||||
|
True
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка ссылок переменных на один и тот же объект (is)
|
||||||
|
```
|
||||||
|
>>> w=v=10
|
||||||
|
w is v
|
||||||
|
w1=['A','B']
|
||||||
|
v1=['A','B']
|
||||||
|
w1 is v1>>> w is v
|
||||||
|
True
|
||||||
|
>>> w1=['A','B']
|
||||||
|
>>> v1=['A','B']
|
||||||
|
>>> w1 is v1
|
||||||
|
False
|
||||||
|
```
|
||||||
|
результат последней проверки выдал Flase потому что мы создали два фактически разных списка, так как они находятся в разных ячейках памяти
|
||||||
|
|
||||||
|
### 3.13 Операции с объектами, выполняемые с помощью методов.
|
||||||
|
|
||||||
|
Методы для работы со строками
|
||||||
|
```
|
||||||
|
>>> stroka='Микропроцессорная система управления'
|
||||||
|
>>> stroka.find('пр')
|
||||||
|
5
|
||||||
|
>>> stroka.count("с")
|
||||||
|
4
|
||||||
|
>>> stroka.replace(' у',' автоматического у')
|
||||||
|
'Микропроцессорная система автоматического управления'
|
||||||
|
>>> spis22=stroka.split(' ')
|
||||||
|
>>> stroka.upper()
|
||||||
|
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
|
||||||
|
>>> stroka3=" ".join(spis22)
|
||||||
|
>>> stroka3.partition("с")
|
||||||
|
('Микропроце', 'с', 'сорная система управления')
|
||||||
|
>>> stroka3.rpartition("с")
|
||||||
|
('Микропроцессорная си', 'с', 'тема управления')
|
||||||
|
```
|
||||||
|
|
||||||
|
Изучим `format`
|
||||||
|
|
||||||
|
```
|
||||||
|
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'
|
||||||
|
```
|
||||||
|
|
||||||
|
Методы для работы со списками
|
||||||
|
```
|
||||||
|
>>> spsk = [1, 2, 3, 4, 5, 6]
|
||||||
|
>>> spsk.pop(2)
|
||||||
|
3
|
||||||
|
>>> spsk.append('c')
|
||||||
|
>>> spsk.insert(2,'a')
|
||||||
|
>>> spsk.count('a')
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.14 Изучим методы кортежей, множеств, словарей
|
||||||
|
|
||||||
|
```
|
||||||
|
tup = (1, 2, 3, 4)
|
||||||
|
>>> tup=tup+(5,7)
|
||||||
|
>>> tup
|
||||||
|
(1, 2, 3, 4, 5, 7)
|
||||||
|
>>> tup.count(2)
|
||||||
|
>>> len(tup)
|
||||||
|
6
|
||||||
|
|
||||||
|
set1 = {1, 1, '1', True}
|
||||||
|
>>> set1
|
||||||
|
{1, '1'}
|
||||||
|
>>> set1.pop()
|
||||||
|
1
|
||||||
|
>>> dir(set1)
|
||||||
|
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
|
||||||
|
|
||||||
|
>>> map1 = {1: '1', 2: '2'}
|
||||||
|
>>> map1.keys()
|
||||||
|
dict_keys([1, 2])
|
||||||
|
>>> dir(map1)
|
||||||
|
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__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']
|
||||||
|
```
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
# Общее контрольное задание по теме 3
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
• Преобразовать восьмеричное значение 45 в целое число.\
|
||||||
|
• Создать объект-словарь `D` со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а затем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?\
|
||||||
|
• Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.\
|
||||||
|
• Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключающее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.\
|
||||||
|
• Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.\
|
||||||
|
• Определить список методов, доступных у ранее созданного словаря `D`. Поочередно использовать его методы `keys` и `values`, определить, что можно получить с применением этих методов.\
|
||||||
|
• Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
int('45', 8)
|
||||||
|
37
|
||||||
|
|
||||||
|
D = {"усиление":23, "запаздывание":12, "постоянная времени":78}
|
||||||
|
dKeys = list(D.keys())
|
||||||
|
dVals = list(D.values())
|
||||||
|
dTup = (*dKeys, *dVals)
|
||||||
|
|
||||||
|
((1788 // 24.8) % 3) ** 2.4
|
||||||
|
0.0
|
||||||
|
|
||||||
|
((~(13 & 27)) ^ 14) << 2
|
||||||
|
-32
|
||||||
|
|
||||||
|
listt = ['колебат'] * 4
|
||||||
|
'аткол' in (listt[1] + listt[2])
|
||||||
|
True
|
||||||
|
|
||||||
|
dir(D)
|
||||||
|
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__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])
|
||||||
|
|
||||||
|
longS = 'Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.'
|
||||||
|
longS = longS.split(' ')
|
||||||
|
longS[longS.index('-')] = ','
|
||||||
|
longS.remove('данного')
|
||||||
|
longS
|
||||||
|
|
||||||
|
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения.', 'Из', 'символьной', 'строки', 'создать', 'список,', 'элементами', 'которого', 'будут', 'отдельные', 'слова', 'из', 'созданной', 'строки.', '', 'Заменить', 'в', 'списке', 'элемент', '«-»', 'на', '«,».', '', 'Удалить', 'из', 'списка', 'элемент', 'со', 'значением', '«данного».', 'Отобразить', 'получившийся', 'список.']
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
# Тест 1 вариант 5
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
1) Для чего предназначено предложение "Окно (Window)" главного меню?
|
||||||
|
|
||||||
|
2) Создайте объект-словарь с 8 элементами: ключи - фамилии студентов группы, значения - средние баллы по итогам сессии. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
|
||||||
|
|
||||||
|
3) Пополните словарь еще двумя элементами. Отобразите получившийся объект. Напишите инструкцию, позволяющую для указанного студента из словаря получить значение его среднего балла. Напишите инструкцию для получения списка всех студентов, представленных в словаре.
|
||||||
|
|
||||||
|
4) У одного из студентов средний балл оказался на 0.2 меньше указанного в словаре. Напишите инструкцию, исправляющую это значение в словаре. Отобразите полученный объект. Напишите инструкцию, вычисляющую общий средний балл для всех студентов, представленных в словаре.
|
||||||
|
|
||||||
|
5) Создайте список из названий 4-х учебных дисциплин и список с числом часов в неделю на изучение каждой из 4-х дисциплин. Напишите инструкцию, позволяющую создать словарь, объединяющий эти два списка.
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
1) Предложение "Окно (Window)" в IDLE предназначено для переключения между открытыми вкладками (окнами)
|
||||||
|
|
||||||
|
2)
|
||||||
|
```py
|
||||||
|
marks = {'Иванов' : 4.3, 'Сидоров': 5, 'Смитт': 4, 'Гордеев': 4.5, 'Лыкова': 3.9, 'Кравченко': 4.1, 'Смирнов': 3, 'Ходюк': 4.8}
|
||||||
|
print(type(marks))
|
||||||
|
print(dir(marks))
|
||||||
|
```
|
||||||
|
3)
|
||||||
|
```py
|
||||||
|
marks['Ивачев'] = 4.3
|
||||||
|
marks['Мамакин'] = 3.8
|
||||||
|
print(marks)
|
||||||
|
print(f'Средний балл студента Смитта: {marks["Смитт"]}')
|
||||||
|
print(*marks.keys())
|
||||||
|
```
|
||||||
|
4)
|
||||||
|
```py
|
||||||
|
marks['Лыкова'] -= 0.2
|
||||||
|
print(marks)
|
||||||
|
print(f'Общий средний балл свех студентов в словаре: {sum(marks.values()) / len(marks)}')
|
||||||
|
```
|
||||||
|
5)
|
||||||
|
```py
|
||||||
|
subjects = ['Интеллектуальный анализ данных', 'Спортивные секции', 'Элементы систем управления', 'ПОАС']
|
||||||
|
hours = [2, 4, 3, 2]
|
||||||
|
subHour = dict(zip(subjects, hours))
|
||||||
|
print(subHour)
|
||||||
|
```
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
### Предложение "Окно (Window)" в IDLE предназначено для переключения между открытыми вкладками (окнами)
|
||||||
|
|
||||||
|
marks = {'Иванов' : 4.3, 'Сидоров': 5, 'Смитт': 4, 'Гордеев': 4.5, 'Лыкова': 3.9, 'Кравченко': 4.1, 'Смирнов': 3, 'Ходюк': 4.8}
|
||||||
|
print(type(marks))
|
||||||
|
print(dir(marks))
|
||||||
|
marks['Ивачев'] = 4.3
|
||||||
|
marks['Мамакин'] = 3.8
|
||||||
|
print(marks)
|
||||||
|
print(f'Средний балл студента Смитта: {marks["Смитт"]}')
|
||||||
|
print(*marks.keys())
|
||||||
|
marks['Лыкова'] -= 0.2
|
||||||
|
print(marks)
|
||||||
|
print(f'Общий средний балл свех студентов в словаре: {sum(marks.values()) / len(marks)}')
|
||||||
|
subjects = ['Интеллектуальный анализ данных', 'Спортивные секции', 'Элементы систем управления', 'ПОАС']
|
||||||
|
hours = [64, 64, 60, 48]
|
||||||
|
subHour = dict(zip(subjects, hours))
|
||||||
|
print(subHour)
|
||||||
|
После Ширина: | Высота: | Размер: 20 KiB |
|
После Ширина: | Высота: | Размер: 15 KiB |
@ -0,0 +1,206 @@
|
|||||||
|
# Отчет по теме 4
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 4 Встроенные функции
|
||||||
|
|
||||||
|
### 4.1 Изучим стандартные функции
|
||||||
|
|
||||||
|
функция `round`
|
||||||
|
```py
|
||||||
|
>>> round(123.456,1)
|
||||||
|
123.5
|
||||||
|
>>> round(123.456,0)
|
||||||
|
123.0
|
||||||
|
>>> round(123.456)
|
||||||
|
123
|
||||||
|
```
|
||||||
|
|
||||||
|
функция `range`
|
||||||
|
```py
|
||||||
|
>>> gg=range(76,123,9)
|
||||||
|
>>> list(gg)
|
||||||
|
[76, 85, 94, 103, 112, 121]
|
||||||
|
>>> range(23)
|
||||||
|
range(0, 23)
|
||||||
|
```
|
||||||
|
Получили последовательность от 0 до 22 с шагом 1
|
||||||
|
|
||||||
|
функция `zip`
|
||||||
|
```py
|
||||||
|
>>> qq = ['Kovalenko', 'Ivanov', 'Mahnov', 'Hodyuk']
|
||||||
|
>>> ff=zip(gg,qq)
|
||||||
|
>>> tuple(ff)
|
||||||
|
((76, 'Kovalenko'), (85, 'Ivanov'), (94, 'Mahnov'), (103, 'Hodyuk'))
|
||||||
|
```
|
||||||
|
|
||||||
|
функция `eval`
|
||||||
|
```py
|
||||||
|
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
|
||||||
|
коэффициент усиления=2
|
||||||
|
>>> dan
|
||||||
|
-146.0
|
||||||
|
```
|
||||||
|
|
||||||
|
функция `exec`
|
||||||
|
```py
|
||||||
|
>>> exec(input('введите инструкции:'))
|
||||||
|
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
|
||||||
|
>>> gg
|
||||||
|
221.456
|
||||||
|
```
|
||||||
|
|
||||||
|
самостоятельно изучим функции `divmod` и `map`
|
||||||
|
```py
|
||||||
|
a = map(lambda val: len(val), qq)
|
||||||
|
>>> print(list(a))
|
||||||
|
[9, 6, 6, 6]
|
||||||
|
|
||||||
|
>>> divmod(10, 3)
|
||||||
|
(3, 1)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 Изучим функции модуля math
|
||||||
|
|
||||||
|
```py
|
||||||
|
>> import math
|
||||||
|
>>> dir(math)
|
||||||
|
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', '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', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
|
||||||
|
>>> help(math.factorial)
|
||||||
|
factorial(x, /)
|
||||||
|
Find x!.
|
||||||
|
|
||||||
|
Raise a ValueError if x is negative or non-integral.
|
||||||
|
>>> math.factorial(5)
|
||||||
|
120
|
||||||
|
>>> math.sin(2 * math.pi / (7 + math.exp(0.23)))
|
||||||
|
0.6895048136223224
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 Изучим функции модуля cmath
|
||||||
|
|
||||||
|
```py
|
||||||
|
import cmath
|
||||||
|
>>> dir(cmath)
|
||||||
|
['__doc__', '__file__', '__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
|
||||||
|
```
|
||||||
|
### 4.4 Изучим функции модуля random
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> import random
|
||||||
|
dir(random)
|
||||||
|
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
|
||||||
|
help(random.seed)
|
||||||
|
seed(a=None, version=2) method of random.Random instance
|
||||||
|
Initialize internal state from a seed.
|
||||||
|
|
||||||
|
The only supported seed types are None, int, float,
|
||||||
|
str, bytes, and bytearray.
|
||||||
|
|
||||||
|
None or no argument seeds from current time or from an operating
|
||||||
|
system specific randomness source if available.
|
||||||
|
|
||||||
|
If *a* is an int, all bits are used.
|
||||||
|
|
||||||
|
For version 2 (the default), all of the bits are used if *a* is a str,
|
||||||
|
bytes, or bytearray. For version 1 (provided for reproducing random
|
||||||
|
sequences from older versions of Python), the algorithm for str and
|
||||||
|
bytes generates a narrower range of seeds.
|
||||||
|
|
||||||
|
>>> random.seed()
|
||||||
|
|
||||||
|
random.seed()
|
||||||
|
>>> randoms = [random.gauss(0, 1), random.random(), random.betavariate(1, 2), random.gammavariate(2, 3)]
|
||||||
|
randoms
|
||||||
|
[0.6215069973322431, 0.08807819378198645, 0.5664749235248212, 4.506587762379303]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.5 Изучим функции модуля time
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> import time
|
||||||
|
>>> dir(time)
|
||||||
|
['CLOCK_MONOTONIC', 'CLOCK_MONOTONIC_RAW', 'CLOCK_PROCESS_CPUTIME_ID', 'CLOCK_REALTIME', 'CLOCK_THREAD_CPUTIME_ID', 'CLOCK_UPTIME_RAW', '_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock_getres', 'clock_gettime', 'clock_gettime_ns', 'clock_settime', 'clock_settime_ns', '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', 'tzset']
|
||||||
|
|
||||||
|
>>> c1=time.time()
|
||||||
|
>>> c1
|
||||||
|
1760084296.501437
|
||||||
|
|
||||||
|
>>> c2=time.time()-c1
|
||||||
|
>>> c2
|
||||||
|
19.090100049972534
|
||||||
|
|
||||||
|
>>> dat=time.gmtime()
|
||||||
|
>>> dat
|
||||||
|
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=8, tm_min=19, tm_sec=3, tm_wday=4, tm_yday=283, tm_isdst=0)
|
||||||
|
>>> dat.tm_mon
|
||||||
|
10
|
||||||
|
>>> dat.tm_min
|
||||||
|
19
|
||||||
|
|
||||||
|
>>> time.localtime()
|
||||||
|
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=11, tm_min=22, tm_sec=32, tm_wday=4, tm_yday=283, tm_isdst=0)
|
||||||
|
|
||||||
|
>>> time.localtime(c1)
|
||||||
|
time.struct_time(tm_year=2025, tm_mon=10, tm_mday=10, tm_hour=11, tm_min=18, tm_sec=16, tm_wday=4, tm_yday=283, tm_isdst=0)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.6 Изучим графические функции
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> import pylab
|
||||||
|
>>> x=list(range(-3,55,4))
|
||||||
|
>>> t=list(range(15))
|
||||||
|
pylab.plot(t,x)
|
||||||
|
pylab.title('Первый график')
|
||||||
|
pylab.xlabel('время')
|
||||||
|
pylab.ylabel('сигнал')
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
```
|
||||||
|
Полученный график сохранил как [Ris1.png](Ris1.png)
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> X1=[12,6,8,10,7]
|
||||||
|
>>> X2=[5,7,9,11,13]
|
||||||
|
pylab.plot(X1)
|
||||||
|
pylab.plot(X2)
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
region=['Центр','Урал','Сибирь','Юг']
|
||||||
|
naselen=[65,12,23,17]
|
||||||
|
pylab.pie(naselen,labels=region)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
Полученный график сохранил как [Ris2.png](Ris2.png)
|
||||||
|
|
||||||
|
```py
|
||||||
|
X1=[12,6,8,10,7, 7, 7, 6, 12, 12, 12]
|
||||||
|
pylab.hist(X1)
|
||||||
|
pylab.show()
|
||||||
|
|
||||||
|
region=['Центр','Урал','Сибирь','Юг']
|
||||||
|
naselen=[65,12,23,17]
|
||||||
|
pylab.bar(region, naselen)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.7 Изучим функции модуля statistics
|
||||||
|
|
||||||
|
```py
|
||||||
|
import statistics
|
||||||
|
>>> dir(statistics)
|
||||||
|
|
||||||
|
>>> a = [1, 2, 3, 4, 5]
|
||||||
|
>>> statistics.mean(a)
|
||||||
|
3
|
||||||
|
>>> statistics.sqrt(9)
|
||||||
|
3.0
|
||||||
|
>>> statistics.exp(3)
|
||||||
|
20.085536923187668
|
||||||
|
```
|
||||||
|
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
# Общее контрольное задание по теме 4
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа `0.2+0.8j`, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.\
|
||||||
|
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.\
|
||||||
|
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели. \
|
||||||
|
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.\
|
||||||
|
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.\
|
||||||
|
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.\
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
from cmath import *
|
||||||
|
from time import localtime, mktime
|
||||||
|
from random import sample, choice, gauss
|
||||||
|
from string import ascii_letters
|
||||||
|
|
||||||
|
tuple(divmod(round(phase(0.2+0.8j), 2) * 20, 3))
|
||||||
|
now = localtime()
|
||||||
|
nowStr = f'{now.tm_hour}:{now.tm_min}'
|
||||||
|
|
||||||
|
days = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']
|
||||||
|
rDays = sample(days, 3)
|
||||||
|
rNum = choice(range(14, 32, 3))
|
||||||
|
nNum = round(gauss(15, 4))
|
||||||
|
rLets = sample(list(ascii_letters), nNum)
|
||||||
|
|
||||||
|
updNow = localtime()
|
||||||
|
diff = (mktime(updNow) - mktime(now)) // 60
|
||||||
|
```
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 4
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание 4
|
||||||
|
|
||||||
|
Напишите инструкцию определения текущего Московского времени. С задержкой на 5 секунд выведите его на экран по шаблону: «В Москве <> часов и <> минут».
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
from time import localtime, sleep
|
||||||
|
|
||||||
|
|
||||||
|
print('Смотрю время и вывожу на экран через 5 секунд')
|
||||||
|
time = localtime()
|
||||||
|
sleep(5)
|
||||||
|
print(f'В Москве {time.tm_hour} часов и {time.tm_min} минут')
|
||||||
|
```
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
from time import localtime, sleep
|
||||||
|
|
||||||
|
print('Смотрю время и вывожу на экран через 5 секунд')
|
||||||
|
time = localtime()
|
||||||
|
sleep(5)
|
||||||
|
print(f'В Москве {time.tm_hour} часов и {time.tm_min} минут')
|
||||||
@ -0,0 +1,138 @@
|
|||||||
|
# Отчет по теме 5
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 5 Блоки инструкций, управляющие инструкции
|
||||||
|
|
||||||
|
### 5.1 Изучим ветвления if
|
||||||
|
```py
|
||||||
|
porog = 12
|
||||||
|
rashod1 = 5
|
||||||
|
rashod2 = 7
|
||||||
|
dohod = 0
|
||||||
|
if rashod1 >= porog:
|
||||||
|
dohod = 12
|
||||||
|
elif rashod2 == porog:
|
||||||
|
dohod = 0
|
||||||
|
else:
|
||||||
|
dohod =- 8
|
||||||
|
>>> dohod
|
||||||
|
-8
|
||||||
|
|
||||||
|
if rashod1 >= 3 and rashod2 == 4:
|
||||||
|
dohod = rashod1
|
||||||
|
if rashod2 == porog or rashod1 < rashod2:
|
||||||
|
dohod = porog
|
||||||
|
|
||||||
|
if porog == 3:
|
||||||
|
dohod = 1
|
||||||
|
elif porog == 4:
|
||||||
|
dohod = 2
|
||||||
|
elif porog == 5:
|
||||||
|
dohod = 3
|
||||||
|
else:
|
||||||
|
dohod = 0
|
||||||
|
|
||||||
|
>>> dohod=2 if porog>=4 else 0
|
||||||
|
>>> if porog>=5 : rashod1=6; rashod2=0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 Изучим цикл for
|
||||||
|
|
||||||
|
```py
|
||||||
|
temperatura = 5
|
||||||
|
for i in range(3, 18, 3):
|
||||||
|
temperatura += i
|
||||||
|
|
||||||
|
|
||||||
|
sps = [2, 15, 14, 8]
|
||||||
|
for k in sps:
|
||||||
|
if len(sps) <= 10: sps.append(sps[0])
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
>>> sps
|
||||||
|
[2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
|
||||||
|
|
||||||
|
|
||||||
|
sps = [2, 15, 14, 8]
|
||||||
|
for k in sps[:]:
|
||||||
|
if len(sps) <= 10: sps.append(sps[0])
|
||||||
|
else: break
|
||||||
|
|
||||||
|
>>> sps
|
||||||
|
[2, 15, 14, 8, 2, 2, 2, 2]
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
301
|
||||||
|
...
|
||||||
|
...
|
||||||
|
436
|
||||||
|
```
|
||||||
|
Как можно видеть, программа не всегда выводит значения на экран. Это происходит из-за оперратора `break`, который завершает цикл, если сумма ss первысила 500. В этом случае `else` не выполняется.
|
||||||
|
|
||||||
|
```py
|
||||||
|
stroka='Это – автоматизированная система'
|
||||||
|
stroka1=""
|
||||||
|
for ss in stroka:
|
||||||
|
stroka1+=" "+ss
|
||||||
|
|
||||||
|
import math, pylab
|
||||||
|
sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
|
||||||
|
|
||||||
|
pylab.plot(sps2)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
Полученный график: 
|
||||||
|
|
||||||
|
### 5.3 Изучим цикл while
|
||||||
|
|
||||||
|
```py
|
||||||
|
rashod = 300
|
||||||
|
while rashod:
|
||||||
|
print("Расход=",rashod)
|
||||||
|
rashod-=50
|
||||||
|
|
||||||
|
Расход= 300
|
||||||
|
Расход= 250
|
||||||
|
Расход= 200
|
||||||
|
Расход= 150
|
||||||
|
Расход= 100
|
||||||
|
Расход= 50
|
||||||
|
|
||||||
|
import math, pylab
|
||||||
|
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
|
||||||
|
else:
|
||||||
|
pylab.plot(sps2)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
Полученный график: 
|
||||||
|
|
||||||
|
```py
|
||||||
|
for chislo in range(250, 501):
|
||||||
|
kandidat =chislo // 2
|
||||||
|
while kandidat > 1:
|
||||||
|
if chislo%kandidat == 0:
|
||||||
|
print(chislo, ' имеет множитель ', kandidat)
|
||||||
|
break
|
||||||
|
kandidat -= 1
|
||||||
|
else:
|
||||||
|
print(chislo, ' является простым!')
|
||||||
|
|
||||||
|
267 имеет множитель 89
|
||||||
|
```
|
||||||
|
После Ширина: | Высота: | Размер: 37 KiB |
|
После Ширина: | Высота: | Размер: 16 KiB |
@ -0,0 +1,42 @@
|
|||||||
|
# Общее контрольное задание по теме 5
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:\
|
||||||
|
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.\
|
||||||
|
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).\
|
||||||
|
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
from string import ascii_lowercase
|
||||||
|
text = '''Bury the light deep within
|
||||||
|
Cast aside, there's no coming home'''
|
||||||
|
|
||||||
|
for el in text:
|
||||||
|
index = ascii_lowercase.find(el.lower())
|
||||||
|
print(index + 1 if index != -1 else el, end='')
|
||||||
|
print()
|
||||||
|
|
||||||
|
words = ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
|
||||||
|
keyWord = input('Введите слово, искомое в списке: ')
|
||||||
|
|
||||||
|
result = f'есть в списке' if keyWord in words else 'отсутствует в списке'
|
||||||
|
print(f'Введенное Вами слово {keyWord} {result}')
|
||||||
|
|
||||||
|
surnames1 = ['Коваленко', 'Лыкова', 'Ходюк']
|
||||||
|
marks1 = [4.75, 3.75, 4.75]
|
||||||
|
surnames2 = ['Лыкова', 'Коваленко', 'Ходюк']
|
||||||
|
marks2 = [3.25, 4.5, 4.75]
|
||||||
|
|
||||||
|
student = input('Введите фамилию студента: ')
|
||||||
|
if student in surnames1:
|
||||||
|
print(f'Средний балл студента {student} за летнюю сессию {marks1[surnames1.index(student)]} и {marks2[surnames2.index(student)]} за зимнюю')
|
||||||
|
else:
|
||||||
|
print('Студент отсутствует в списке')
|
||||||
|
```
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
from string import ascii_lowercase
|
||||||
|
text = '''Bury the light deep within
|
||||||
|
Cast aside, there's no coming home'''
|
||||||
|
|
||||||
|
for el in text:
|
||||||
|
index = ascii_lowercase.find(el.lower())
|
||||||
|
print(index + 1 if index != -1 else el, end='')
|
||||||
|
print()
|
||||||
|
|
||||||
|
words = ['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
|
||||||
|
keyWord = input('Введите слово, искомое в списке: ')
|
||||||
|
|
||||||
|
result = f'есть в списке' if keyWord in words else 'отсутствует в списке'
|
||||||
|
print(f'Введенное Вами слово {keyWord} {result}')
|
||||||
|
|
||||||
|
surnames1 = ['Коваленко', 'Лыкова', 'Ходюк']
|
||||||
|
marks1 = [4.75, 3.75, 4.75]
|
||||||
|
surnames2 = ['Лыкова', 'Коваленко', 'Ходюк']
|
||||||
|
marks2 = [3.25, 4.5, 4.75]
|
||||||
|
|
||||||
|
student = input('Введите фамилию студента: ')
|
||||||
|
if student in surnames1:
|
||||||
|
print(f'Средний балл студента {student} за летнюю сессию {marks1[surnames1.index(student)]} и {marks2[surnames2.index(student)]} за зимнюю')
|
||||||
|
else:
|
||||||
|
print('Студент отсутствует в списке')
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 5
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание 1
|
||||||
|
|
||||||
|
Запишите свой e-mail – адрес в виде символьной строки. Напишите инструкции, разделяющие эту строку на две: строка1, содержащая все буквы из состава адреса, и строка 2, содержащая все остальные символы.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
from string import ascii_lowercase as letters
|
||||||
|
|
||||||
|
|
||||||
|
email = 'KovalenkoDM@mpei.ru'
|
||||||
|
emailLetters = ''
|
||||||
|
emailSimbols = ''
|
||||||
|
for el in email:
|
||||||
|
if letters.find(el.lower()) != -1:
|
||||||
|
emailLetters += el
|
||||||
|
else:
|
||||||
|
emailSimbols += el
|
||||||
|
print(f'Letters in email are {emailLetters}\nSimbols in email are {emailSimbols}')
|
||||||
|
```
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
from string import ascii_lowercase as letters
|
||||||
|
|
||||||
|
|
||||||
|
email = 'KovalenkoDM@mpei.ru'
|
||||||
|
emailLetters = ''
|
||||||
|
emailSimbols = ''
|
||||||
|
for el in email:
|
||||||
|
if letters.find(el.lower()) != -1:
|
||||||
|
emailLetters += el
|
||||||
|
else:
|
||||||
|
emailSimbols += el
|
||||||
|
print(f'Letters in email are {emailLetters}\nSimbols in email are {emailSimbols}')
|
||||||
@ -0,0 +1 @@
|
|||||||
|
запись строки в файл
|
||||||
Двоичный файл не отображается.
@ -0,0 +1,239 @@
|
|||||||
|
# Отчет по теме 6
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 6 Ввод-вывод данных и операции с файлами
|
||||||
|
|
||||||
|
### 6.1. Вывод данных на экран дисплея.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> stroka='Автоматизированная система управления'
|
||||||
|
>>> stroka
|
||||||
|
'Автоматизированная система управления'
|
||||||
|
>>> fff=234.5;gg='Значение температуры = '
|
||||||
|
```
|
||||||
|
#### 6.1.1 функция `print`
|
||||||
|
```py
|
||||||
|
>>> print(gg, fff)
|
||||||
|
Значение температуры = 234.5
|
||||||
|
>>> print(gg, fff, sep='/')
|
||||||
|
Значение температуры = /234.5
|
||||||
|
>>> print(gg, fff,sep='/',end='***'); print('____')
|
||||||
|
Значение температуры = /234.5***____
|
||||||
|
>>> print()
|
||||||
|
|
||||||
|
>>> print(""" Здесь может выводиться
|
||||||
|
... большой текст,
|
||||||
|
... занимающий несколько строк""")
|
||||||
|
Здесь может выводиться
|
||||||
|
большой текст,
|
||||||
|
занимающий несколько строк
|
||||||
|
>>> print("Здесь может выводиться",
|
||||||
|
... "большой текст,",
|
||||||
|
... "занимающий несколько строк")
|
||||||
|
Здесь может выводиться большой текст, занимающий несколько строк
|
||||||
|
```
|
||||||
|
#### 6.1.2 метод `write`
|
||||||
|
|
||||||
|
```py
|
||||||
|
import sys
|
||||||
|
>>> sys.stdout.write('Функция write')
|
||||||
|
Функция write13
|
||||||
|
>>> sys.stdout.write('Функция write\n')
|
||||||
|
Функция write
|
||||||
|
14
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 Ввод данных с клавиатуры
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> psw=input('Введите пароль:')
|
||||||
|
Введите пароль:qwerty
|
||||||
|
>>> psw
|
||||||
|
'qwerty'
|
||||||
|
>>> type(psw)
|
||||||
|
<class 'str'>
|
||||||
|
|
||||||
|
>>> while True:
|
||||||
|
znach=float(input('Задайте коэф.усиления = '))
|
||||||
|
if znach<17.5 or znach>23.8:
|
||||||
|
... znach=float(input('Задайте коэф.усиления = '))
|
||||||
|
... if znach<17.5 or znach>23.8:
|
||||||
|
... print('Ошибка!')
|
||||||
|
... else:
|
||||||
|
... break
|
||||||
|
...
|
||||||
|
Задайте коэф.усиления = 1
|
||||||
|
Ошибка!
|
||||||
|
Задайте коэф.усиления = 19
|
||||||
|
|
||||||
|
>>> import math
|
||||||
|
>>> print(eval(input('введите выражение для расчета = ')))
|
||||||
|
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
|
||||||
|
1.34504378689765
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3 Ввод-вывод при работе с файлами
|
||||||
|
|
||||||
|
#### 6.3.1 Функции для работы с путем к файлу
|
||||||
|
```py
|
||||||
|
>>>
|
||||||
|
>>> import os
|
||||||
|
>>> workPath = os.getcwd()
|
||||||
|
>>> print(workPath)
|
||||||
|
'/Users/vatarishin/lab_sem_5/python-labs'
|
||||||
|
>>> os.chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
|
||||||
|
>>>
|
||||||
|
>>> os.getcwd()
|
||||||
|
'/Users/vatarishin/lab_sem_5/python-labs/TEMA6'
|
||||||
|
|
||||||
|
>>> fil = os.path.abspath("report.md")
|
||||||
|
>>> drkt=os.path.dirname()
|
||||||
|
>>> os.path.basename(fil)
|
||||||
|
'report.md'
|
||||||
|
>>> os.path.split(fil)
|
||||||
|
('/Users/vatarishin/lab_sem_5/python-labs/TEMA6', 'report.md')
|
||||||
|
>>> os.path.exists('path.md')
|
||||||
|
False
|
||||||
|
>>> os.path.isfile('task.md')
|
||||||
|
False
|
||||||
|
>>> os.path.isfile('report.md')
|
||||||
|
True
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.3.2 Открытие файла для записи или чтения данных – функция `open`
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> 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__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__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']
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.3.3. Закрытие файла
|
||||||
|
```py
|
||||||
|
>>> fp.close()
|
||||||
|
>>>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.3.4. Запись информации в файл с помощью метода `write`
|
||||||
|
|
||||||
|
```py
|
||||||
|
sps=list(range(1,13))
|
||||||
|
fp2=open('zapis3.txt','w')
|
||||||
|
fp2.write(str(sps[:4])+'\n')
|
||||||
|
fp2.write(str(sps[4:8])+'\n')
|
||||||
|
fp2.write(str(sps[8:])+'\n')
|
||||||
|
fp2.close()
|
||||||
|
```
|
||||||
|
|
||||||
|
[Созданный файл](zapis3.txt)
|
||||||
|
|
||||||
|
```py
|
||||||
|
sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||||
|
fp3=open('zapis4.txt','w')
|
||||||
|
for i in range(len(sps3)):
|
||||||
|
stroka4=sps3[i][0]+' '+str(sps3[i][1])
|
||||||
|
fp3.write(stroka4)
|
||||||
|
fp3.close()
|
||||||
|
```
|
||||||
|
[Созданный файл](zapis4.txt)
|
||||||
|
```py
|
||||||
|
gh=open('zapis5.txt','w')
|
||||||
|
for r in sps3:
|
||||||
|
gh.write(f'{r[0]} {str(r[1])}\n')
|
||||||
|
|
||||||
|
gh.close()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.3.5. Первый способ чтения информации из текстового файла.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> sps1=[]
|
||||||
|
fp=open('zapis3.txt')
|
||||||
|
sps1=[]
|
||||||
|
>>> 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']
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.3.6. Чтение информации с помощью методов readline и readlines
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> with open('zapis3.txt') as fl:
|
||||||
|
... print(fl.readline())
|
||||||
|
... print(fl.readlines())
|
||||||
|
...
|
||||||
|
[1, 2, 3, 4]
|
||||||
|
|
||||||
|
['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.3.7 Ввод-вывод объектов с использованием функций из модуля `pickle`
|
||||||
|
|
||||||
|
```py
|
||||||
|
import pickle
|
||||||
|
mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||||
|
fp=open('zapis6.mnz','wb')
|
||||||
|
pickle.dump(mnoz1,fp)
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
fp=open('zapis6.mnz','rb')
|
||||||
|
mnoz2=pickle.load(fp)
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
>>> mnoz2
|
||||||
|
{'pen', 'table', 'iPhone', 'book'}
|
||||||
|
>>> mnoz1
|
||||||
|
{'pen', 'table', 'iPhone', 'book'}
|
||||||
|
>>> mnoz1 == mnoz2
|
||||||
|
True
|
||||||
|
|
||||||
|
fp=open('zapis7.2ob','wb')
|
||||||
|
pickle.dump(mnoz1,fp)
|
||||||
|
pickle.dump(sps3,fp)
|
||||||
|
fp.close()
|
||||||
|
fp=open('zapis7.2ob','rb')
|
||||||
|
obj1=pickle.load(fp)
|
||||||
|
obj2=pickle.load(fp)
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
>>> obj1
|
||||||
|
{'pen', 'table', 'iPhone', 'book'}
|
||||||
|
>>> obj2
|
||||||
|
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.4. Перенаправление потоков ввода и вывода данных
|
||||||
|
|
||||||
|
```py
|
||||||
|
import sys
|
||||||
|
vr_out=sys.stdout
|
||||||
|
fc=open('Stroka.txt','w')
|
||||||
|
sys.stdout=fc
|
||||||
|
print('запись строки в файл')
|
||||||
|
sys.stdout=vr_out
|
||||||
|
print('запись строки на экран')
|
||||||
|
fc.close()
|
||||||
|
|
||||||
|
tmp_in = sys.stdin
|
||||||
|
fd = open("Stroka.txt", "r")
|
||||||
|
sys.stdin = fd
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
line = input()
|
||||||
|
print(line)
|
||||||
|
except EOFError:
|
||||||
|
break
|
||||||
|
|
||||||
|
fd.close()
|
||||||
|
sys.stdin=tmp_in
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
# Общее контрольное задание по теме 6
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:\
|
||||||
|
• Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.\
|
||||||
|
• Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.\
|
||||||
|
• Записывается кортеж в бинарный файл.\
|
||||||
|
• Записывается в этот же файл список и закрывается файл.\
|
||||||
|
• Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.\
|
||||||
|
• Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.\
|
||||||
|
• Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Решение представлено в файле [task.py](task.py)
|
||||||
|
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
from random import randint
|
||||||
|
from pickle import dump, load
|
||||||
|
from os import chdir
|
||||||
|
|
||||||
|
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
|
||||||
|
intTuple = ()
|
||||||
|
|
||||||
|
for _ in range(125): intTuple += (str(randint(6, 56)), )
|
||||||
|
|
||||||
|
surnames = ['Kovalenko', 'Hoduyk', 'Ivanov', 'Mahnov']
|
||||||
|
|
||||||
|
with open('bin_task.bin', mode='wb') as file:
|
||||||
|
dump(intTuple, file)
|
||||||
|
dump(surnames, file)
|
||||||
|
|
||||||
|
with open('bin_task.bin', mode='rb') as file:
|
||||||
|
binObj1 = load(file)
|
||||||
|
binObj2 = load(file)
|
||||||
|
|
||||||
|
print(f'tuples are indentical: {binObj1 == intTuple}\nlists are indentical: {surnames == binObj2}')
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
# Тест 2 вариант 1
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
1) Запросите у пользователя и введите имя и число элементов кортежа (от 10 до 100). Проверьте введенное число элементов на соответствие заданному диапазону значений и, при необходимости, повторите ввод.
|
||||||
|
|
||||||
|
2) Создайте кортеж с заданными при вводе именем и числом элементов. Элементами должны быть случайные целые числа в диапазоне от 101 до 201.
|
||||||
|
|
||||||
|
3) Запишите кортеж в текстовый файл с некоторым именем по одному элементу на строке.
|
||||||
|
|
||||||
|
4) Удалите из памяти все созданные объекты-переменные.
|
||||||
|
|
||||||
|
5) Прочитайте из файла элементы, подсчитайте их сумму и отобразите на экране по шаблону: "Сумма элементов кортежа = <рассчитанное значение>".
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
1)
|
||||||
|
```py
|
||||||
|
from random import randint
|
||||||
|
from os import chdir
|
||||||
|
|
||||||
|
def getTupleNumbers():
|
||||||
|
try:
|
||||||
|
numbers = int(input('Enter tuple elements numbers from 10 to 100: '))
|
||||||
|
if numbers >= 10 and numbers <= 100:
|
||||||
|
return numbers
|
||||||
|
except Exception:
|
||||||
|
print('Please enter number')
|
||||||
|
print('Enter number from required range')
|
||||||
|
return getTupleNumbers()
|
||||||
|
|
||||||
|
|
||||||
|
name = input('Enter your name: ')
|
||||||
|
numbers = getTupleNumbers()
|
||||||
|
```
|
||||||
|
|
||||||
|
2)
|
||||||
|
```py
|
||||||
|
intTuple = ()
|
||||||
|
for _ in range(numbers): intTuple += (str(randint(101, 201)), )
|
||||||
|
```
|
||||||
|
3)
|
||||||
|
```py
|
||||||
|
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
|
||||||
|
with open('test.txt', mode='w') as fl:
|
||||||
|
for el in intTuple:
|
||||||
|
fl.write(f'{el}\n')
|
||||||
|
```
|
||||||
|
4)
|
||||||
|
```py
|
||||||
|
del name, numbers, intTuple
|
||||||
|
```
|
||||||
|
5)
|
||||||
|
```py
|
||||||
|
with open('test.txt') as fl:
|
||||||
|
nums = fl.readlines()
|
||||||
|
|
||||||
|
nums = map(int, nums)
|
||||||
|
print(f'Сумма элементов кортежа = {sum(nums)}')
|
||||||
|
```
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
from random import randint
|
||||||
|
from os import chdir
|
||||||
|
|
||||||
|
def getTupleNumbers():
|
||||||
|
try:
|
||||||
|
numbers = int(input('Enter tuple elements numbers from 10 to 100: '))
|
||||||
|
if numbers >= 10 and numbers <= 100:
|
||||||
|
return numbers
|
||||||
|
except Exception:
|
||||||
|
print('Please enter number')
|
||||||
|
print('Enter number from required range')
|
||||||
|
return getTupleNumbers()
|
||||||
|
|
||||||
|
|
||||||
|
name = input('Enter your name: ')
|
||||||
|
numbers = getTupleNumbers()
|
||||||
|
|
||||||
|
intTuple = ()
|
||||||
|
for _ in range(numbers): intTuple += (str(randint(101, 201)), )
|
||||||
|
|
||||||
|
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA6')
|
||||||
|
with open('test.txt', mode='w') as fl:
|
||||||
|
for el in intTuple:
|
||||||
|
fl.write(f'{el}\n')
|
||||||
|
|
||||||
|
del name, numbers, intTuple
|
||||||
|
|
||||||
|
with open('test.txt') as fl:
|
||||||
|
nums = fl.readlines()
|
||||||
|
|
||||||
|
nums = map(int, nums)
|
||||||
|
print(f'Сумма элементов кортежа = {sum(nums)}')
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
134
|
||||||
|
191
|
||||||
|
113
|
||||||
|
196
|
||||||
|
155
|
||||||
|
165
|
||||||
|
157
|
||||||
|
127
|
||||||
|
122
|
||||||
|
127
|
||||||
|
133
|
||||||
@ -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
|
||||||
Двоичный файл не отображается.
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 14 KiB |
@ -0,0 +1,346 @@
|
|||||||
|
# Отчет по теме 7
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 7 Создание пользовательских функций
|
||||||
|
|
||||||
|
## 7.1 Создание пользовательской функции.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> def uspeh():
|
||||||
|
... """Подтверждение успеха операции"""
|
||||||
|
... print('Выполнено успешно!')
|
||||||
|
...
|
||||||
|
>>> uspeh()
|
||||||
|
Выполнено успешно!
|
||||||
|
>>> dir()
|
||||||
|
['PS1', 'REPLHooks', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'get_last_command', 'is_wsl', 'original_ps1', 'platform', 'readline', 'sys', 'uspeh']
|
||||||
|
|
||||||
|
Help on function uspeh in module __main__:
|
||||||
|
|
||||||
|
uspeh()
|
||||||
|
Подтверждение успеха операции
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
>>> sravnenie('a', ',')
|
||||||
|
a больше ,
|
||||||
|
|
||||||
|
def logistfun(b,a):
|
||||||
|
"""Вычисление логистической функции"""
|
||||||
|
import math
|
||||||
|
return a/(1+math.exp(-b))
|
||||||
|
|
||||||
|
>>> v,w=1,0.7;z=logistfun(w,v)
|
||||||
|
>>> z
|
||||||
|
0.6681877721681662
|
||||||
|
|
||||||
|
|
||||||
|
def slozh(a1,a2,a3,a4):
|
||||||
|
""" Сложение значений четырех аргументов"""
|
||||||
|
return a1+a2+a3+a4
|
||||||
|
slozh(1,2,3,4)
|
||||||
|
slozh('1','2','3','4')
|
||||||
|
b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1]
|
||||||
|
q=slozh(b1,b2,b3,b4)
|
||||||
|
>>> q
|
||||||
|
[1, 2, -1, -2, 0, 2, -1, -1]
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7.2 Функции как объекты.
|
||||||
|
|
||||||
|
```py
|
||||||
|
>> dir(inerz)
|
||||||
|
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
|
||||||
|
>>> inerz.__doc__
|
||||||
|
' Модель устройства с памятью:\n x- текущее значение вх.сигнала,\n T -постоянная времени,\n ypred - предыдущее значение выхода устройства'
|
||||||
|
|
||||||
|
>>> fnkt=sravnenie
|
||||||
|
>>> v=16
|
||||||
|
>>> fnkt(v,23)
|
||||||
|
16 меньше 23
|
||||||
|
|
||||||
|
typ_fun=8
|
||||||
|
if typ_fun==1:
|
||||||
|
def func():
|
||||||
|
print('Функция 1')
|
||||||
|
else:
|
||||||
|
def func():
|
||||||
|
print('Функция 2')
|
||||||
|
|
||||||
|
func()
|
||||||
|
Функция 2
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7.3 Аргументы функции
|
||||||
|
|
||||||
|
```py
|
||||||
|
def fun_arg(fff,a,b,c):
|
||||||
|
"""fff-имя функции, используемой
|
||||||
|
в качестве аргумента функции fun_arg"""
|
||||||
|
return a+fff(c,b)
|
||||||
|
|
||||||
|
zz=fun_arg(logistfun,-3,1,0.7)
|
||||||
|
|
||||||
|
def logistfun(a,b=1):
|
||||||
|
"""Вычисление логистической функции"""
|
||||||
|
import math
|
||||||
|
return b/(1+math.exp(-a))
|
||||||
|
|
||||||
|
logistfun(0.7)
|
||||||
|
logistfun(0.7,2)
|
||||||
|
>>> logistfun(b=0.5,a=0.8)
|
||||||
|
0.34498724056380625
|
||||||
|
|
||||||
|
|
||||||
|
>>> b1234=[b1,b2,b3,b4]
|
||||||
|
>>> qq=slozh(*b1234)
|
||||||
|
>>> qq
|
||||||
|
[1, 2, -1, -2, 0, 2, -1, -1]
|
||||||
|
|
||||||
|
dic4={"a1":1,"a2":2,"a3":3,"a4":4}
|
||||||
|
qqq=slozh(**dic4)
|
||||||
|
>>> qqq
|
||||||
|
10
|
||||||
|
|
||||||
|
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
|
||||||
|
>>> qqqq=slozh(*e1,**dd2)
|
||||||
|
>>> qqqq
|
||||||
|
17
|
||||||
|
|
||||||
|
def func4(*kort7):
|
||||||
|
"""Произвольное число аргументов в составе кортежа"""
|
||||||
|
smm=0
|
||||||
|
for elt in kort7:
|
||||||
|
smm+=elt
|
||||||
|
return smm
|
||||||
|
|
||||||
|
>>> func4(-1,2)
|
||||||
|
1
|
||||||
|
>>> func4(-1,2,0,3,6)
|
||||||
|
10
|
||||||
|
|
||||||
|
|
||||||
|
def func4(a,b=7,*kort7):
|
||||||
|
"""Кортеж - сборка аргументов - должен быть последним!"""
|
||||||
|
smm=0
|
||||||
|
for elt in kort7:
|
||||||
|
smm+=elt
|
||||||
|
return a*smm+b
|
||||||
|
|
||||||
|
>>> func4(-1,2,0,3,6)
|
||||||
|
-7
|
||||||
|
|
||||||
|
a=90
|
||||||
|
def func3(b):
|
||||||
|
b=5*b+67
|
||||||
|
|
||||||
|
>>> func3(a)
|
||||||
|
>>> 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 "<stdin>", line 1, in <module>
|
||||||
|
File "<stdin>", line 2, in func2
|
||||||
|
TypeError: 'tuple' object does not support item assignment
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7.4 Анонимные функции
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> anfun1=lambda: 1.5+math.log10(17.23)
|
||||||
|
>>> anfun1()
|
||||||
|
2.7362852774480286
|
||||||
|
>>> anfun2=lambda a,b : a+math.log10(b)
|
||||||
|
>>> anfun2(17,234)
|
||||||
|
19.369215857410143
|
||||||
|
>>> anfun3=lambda a,b=234: a+math.log10(b)
|
||||||
|
>>> anfun3(100)
|
||||||
|
102.36921585741014
|
||||||
|
|
||||||
|
>>> 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 "<stdin>", line 1, in <module>
|
||||||
|
StopIteration
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7.5 Локализация объектов в функциях
|
||||||
|
|
||||||
|
```py
|
||||||
|
glb=10
|
||||||
|
def func7(arg):
|
||||||
|
loc1=15
|
||||||
|
glb=8
|
||||||
|
return loc1*arg
|
||||||
|
|
||||||
|
>>> res=func7(glb)
|
||||||
|
>>> res
|
||||||
|
150
|
||||||
|
>>> glb
|
||||||
|
10
|
||||||
|
|
||||||
|
def func8(arg):
|
||||||
|
loc1=15
|
||||||
|
print(glb)
|
||||||
|
glb=8
|
||||||
|
return loc1*arg
|
||||||
|
|
||||||
|
res=func8(glb)
|
||||||
|
# получаем ошибку, потому что функция не видит глобальную переменную, а локальная ещё не была объявлена
|
||||||
|
|
||||||
|
glb=11
|
||||||
|
def func7(arg):
|
||||||
|
loc1=15
|
||||||
|
global glb
|
||||||
|
print(glb)
|
||||||
|
glb=8
|
||||||
|
return loc1*arg
|
||||||
|
|
||||||
|
>>> res=func7(glb)
|
||||||
|
11
|
||||||
|
>>> glb
|
||||||
|
8
|
||||||
|
|
||||||
|
>>> globals().keys()
|
||||||
|
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
|
||||||
|
>>> locals().keys()
|
||||||
|
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8'])
|
||||||
|
|
||||||
|
def func8(arg):
|
||||||
|
loc1=15
|
||||||
|
glb=8
|
||||||
|
print(globals().keys())
|
||||||
|
print(locals().keys())
|
||||||
|
return loc1*arg
|
||||||
|
|
||||||
|
hh=func8(glb)
|
||||||
|
>>> 'glb' in globals().keys()
|
||||||
|
True
|
||||||
|
|
||||||
|
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__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', '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__', 'platform', 'sys', 'readline', 'original_ps1', 'is_wsl', 'REPLHooks', 'get_last_command', 'PS1', 'sravnenie', 'n', 'm', 'logistfun', 'v', 'w', 'z', 'slozh', 'b1', 'b2', 'b3', 'b4', 'q', 'inerz', 'fnkt', 'typ_fun', 'func', 'fun_arg', 'zz', 'b1234', 'qq', 'dic4', 'qqq', 'e1', 'dd2', 'qqqq', 'func4', 'a', 'func3', 'sps1', 'func2', 'kort', 'anfun1', 'anfun2', 'anfun3', 'math', 'func5', 'mm', 'alp', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
|
||||||
|
|
||||||
|
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=float(znach[6])
|
||||||
|
|
||||||
|
|
||||||
|
import math
|
||||||
|
vhod=[]
|
||||||
|
for i in range(N):
|
||||||
|
vhod.append(A*math.sin((2*i*math.pi)/F))
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
0.0
|
||||||
|
0.929446344087537
|
||||||
|
1.6459677317873127
|
||||||
|
1.985417748196108
|
||||||
|
1.8700324853708297
|
||||||
|
1.3262453164815904
|
||||||
|
0.47863132857511537
|
||||||
|
-0.47863132857511487
|
||||||
|
-1.32624531648159
|
||||||
|
-1.8700324853708294
|
||||||
|
-1.985417748196108
|
||||||
|
-1.645967731787314
|
||||||
|
-0.9294463440875368
|
||||||
|
1.2864981197413093e-15
|
||||||
|
0.9294463440875359
|
||||||
|
1.6459677317873116
|
||||||
|
1.9854177481961077
|
||||||
|
1.8700324853708299
|
||||||
|
1.3262453164815913
|
||||||
|
0.47863132857511753
|
||||||
|
-0.47863132857511614
|
||||||
|
-1.3262453164815902
|
||||||
|
-1.870032485370828
|
||||||
|
-1.9854177481961082
|
||||||
|
-1.6459677317873123
|
||||||
|
-0.9294463440875372
|
||||||
|
2.5729962394826186e-15
|
||||||
|
0.9294463440875355
|
||||||
|
1.6459677317873114
|
||||||
|
1.985417748196108
|
||||||
@ -0,0 +1,85 @@
|
|||||||
|
# Общее контрольное задание по теме 7
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
• Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.\
|
||||||
|
• Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: вы-борка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.\
|
||||||
|
• Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х
|
||||||
|
Y=b1+b2*X
|
||||||
|
и имеющую аргументы b1, b2 и X.
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
import random
|
||||||
|
|
||||||
|
|
||||||
|
def delay_signal(signal, T):
|
||||||
|
delayed_signal = signal.copy()
|
||||||
|
if T < len(signal):
|
||||||
|
delayed_signal = [0] * T + signal[:-T]
|
||||||
|
else:
|
||||||
|
delayed_signal = [0] * len(signal)
|
||||||
|
return delayed_signal
|
||||||
|
|
||||||
|
y = [random.gauss(3, 1.5) for _ in range(10)]
|
||||||
|
>>> y
|
||||||
|
[3.855862654001017, 0.5055896775676754, 0.4154450162502199, 6.550103308532915, 2.5329276972223584, 5.199934653811578, 2.7808708229733328, 3.009437226477874, 2.6526954887061165, 2.2993461230571697]
|
||||||
|
|
||||||
|
yd = delay_signal(y, 3)
|
||||||
|
>>> yd
|
||||||
|
[0, 0, 0, 3.855862654001017, 0.5055896775676754, 0.4154450162502199, 6.550103308532915, 2.5329276972223584, 5.199934653811578, 2.7808708229733328]
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def calculate_histogram(data, num_bins):
|
||||||
|
min_val, max_val = min(data), max(data)
|
||||||
|
bins = np.linspace(min_val, max_val, num_bins + 1)
|
||||||
|
counts = [0] * num_bins
|
||||||
|
|
||||||
|
for value in data:
|
||||||
|
for i in range(num_bins):
|
||||||
|
if bins[i] <= value < bins[i + 1]:
|
||||||
|
counts[i] += 1
|
||||||
|
break
|
||||||
|
if value == max_val:
|
||||||
|
counts[-1] += 1
|
||||||
|
|
||||||
|
return counts, bins
|
||||||
|
|
||||||
|
def plot_histogram(data, bins, counts):
|
||||||
|
plt.hist(data, bins=bins, alpha=0.7, edgecolor='black')
|
||||||
|
plt.xlabel('Значения выборки')
|
||||||
|
plt.ylabel('Число элементов')
|
||||||
|
plt.title('Гистограмма выборки')
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
def histo(data, num_bins):
|
||||||
|
counts, bins = calculate_histogram(data, num_bins)
|
||||||
|
plot_histogram(data, bins, counts)
|
||||||
|
return counts
|
||||||
|
|
||||||
|
sample = [random.gauss(random.random(), random.random()) for _ in range(random.randint(1,100))]
|
||||||
|
intervals = int(input("Введите количество интервалов разбиения: "))
|
||||||
|
output = histo(sample, intervals)
|
||||||
|
|
||||||
|
Введите количество интервалов разбиения: 5
|
||||||
|
Список с числами элементов в интервалах: [3, 10, 12, 6, 1]
|
||||||
|
|
||||||
|
|
||||||
|
linreg = lambda b1, b2, x: b1 + b2 * x
|
||||||
|
>>> b1 = float(input("Введите коэффициент b1 линейной регрессии: "))
|
||||||
|
Введите коэффициент b1 линейной регрессии: 4
|
||||||
|
>>> b2 = float(input("Введите коэффициент b2 линейной регрессии: "))
|
||||||
|
Введите коэффициент b2 линейной регрессии: 6
|
||||||
|
>>> x_val = float(input("Введите значение x: "))
|
||||||
|
Введите значение x: 56
|
||||||
|
>>> print(linreg(b1, b2, x_val))
|
||||||
|
340.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Созданная гистограмма: 
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 7
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание 1
|
||||||
|
|
||||||
|
Разработайте функцию с 5 аргументами, создающую последовательность отсчетов синусоидального сигнала с заданными параметрами: амплитуда, период, фаза, число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
```py
|
||||||
|
import math
|
||||||
|
from os import chdir
|
||||||
|
|
||||||
|
|
||||||
|
chdir('/Users/vatarishin/lab_sem_5/python-labs/TEMA7')
|
||||||
|
|
||||||
|
def sinusoid(amplitude, period, phase, num_samples, filename="sinusoid_signal.txt"):
|
||||||
|
signal_list = []
|
||||||
|
|
||||||
|
for i in range(num_samples):
|
||||||
|
value = amplitude * math.sin(2 * math.pi * i / period + phase)
|
||||||
|
signal_list.append(value)
|
||||||
|
with open(filename, 'w') as file:
|
||||||
|
for value in signal_list:
|
||||||
|
file.write(f"{value}\n")
|
||||||
|
|
||||||
|
return signal_list
|
||||||
|
|
||||||
|
A = 2
|
||||||
|
T = 13
|
||||||
|
phi = 0
|
||||||
|
N = 30
|
||||||
|
|
||||||
|
signal = sinusoid(A, T, phi, N)
|
||||||
|
|
||||||
|
print(f"Значения сигнала: {signal}")
|
||||||
|
|
||||||
|
```
|
||||||
|
## Вывод программы:
|
||||||
|
|
||||||
|
```py
|
||||||
|
Значения сигнала: [0.0, 0.929446344087537, 1.6459677317873127, 1.985417748196108, 1.8700324853708297, 1.3262453164815904, 0.47863132857511537, -0.47863132857511487, -1.32624531648159, -1.8700324853708294, -1.985417748196108, -1.645967731787314, -0.9294463440875368, 1.2864981197413093e-15, 0.9294463440875359, 1.6459677317873116, 1.9854177481961077, 1.8700324853708299, 1.3262453164815913, 0.47863132857511753, -0.47863132857511614, -1.3262453164815902, -1.870032485370828, -1.9854177481961082, -1.6459677317873123, -0.9294463440875372, 2.5729962394826186e-15, 0.9294463440875355, 1.6459677317873114, 1.985417748196108]
|
||||||
|
```
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
from math import pi, exp
|
||||||
|
|
||||||
|
calc = lambda x, a, b: exp(-(x - a)**2 / b) / (2 * pi * b)**0.5
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
3.48132629866869e-05,0.00011105198605141639
|
||||||
|
0.0003270125124308196,0.0008889121702194339
|
||||||
|
0.0022305387662290435,0.005166746338522999
|
||||||
|
0.011047930833002735,0.021807264658486272
|
||||||
|
0.039735426919319354,0.06683608675088461
|
||||||
|
0.10377687435514844,0.14874644656436697
|
||||||
|
0.1968108579285715,0.24038532470982668
|
||||||
|
0.27103369677621564,0.28209479177387814
|
||||||
|
0.27103369677621597,0.24038532470982732
|
||||||
|
0.19681085792857225,0.1487464465643677
|
||||||
|
0.1037768743551491,0.06683608675088512
|
||||||
|
0.03973542691931971,0.021807264658486494
|
||||||
|
0.011047930833002859,0.005166746338523063
|
||||||
|
0.0022305387662290756,0.0008889121702194466
|
||||||
|
0.00032701251243082483,0.00011105198605141855
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
from IKZ import calc
|
||||||
|
from numpy import arange
|
||||||
|
|
||||||
|
a = int(input('Enter a value: '))
|
||||||
|
b = int(input('Enter b value: '))
|
||||||
|
res = []
|
||||||
|
xRange = arange(a - 3 * b**0.5, a + 3 * b ** 0.5, 0.2 * b ** 0.5)
|
||||||
|
for i in range(len(xRange)):
|
||||||
|
res.append(calc(xRange[i], a, b))
|
||||||
|
|
||||||
|
with open('IKZ_res.txt', 'w') as file:
|
||||||
|
resString = ''
|
||||||
|
for i in range(len(res)):
|
||||||
|
divider = ',' if i % 2 == 0 else '\n'
|
||||||
|
resString += f'{res[i]}{divider}'
|
||||||
|
file.write(resString)
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
import MM2
|
||||||
|
print('y =', MM2.vyhod)
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
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,6 @@
|
|||||||
|
def reading (file):
|
||||||
|
nums = []
|
||||||
|
with open(file) as file:
|
||||||
|
for line in file:
|
||||||
|
nums.extend(map(float, line.split()))
|
||||||
|
return nums
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
import math
|
||||||
|
def correlation(l1, l2):
|
||||||
|
n = min(len(l1), len(l2))
|
||||||
|
sum1 = sum(l1[:n])
|
||||||
|
sum2 = sum(l2[:n])
|
||||||
|
sum1sq = sum(now ** 2 for now in l1)
|
||||||
|
sum2sq = sum(now ** 2 for now in l2)
|
||||||
|
sum12 = sum(x * y for x, y in zip(l1, l2))
|
||||||
|
|
||||||
|
part1 = n * sum12 - sum1 * sum2
|
||||||
|
part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))
|
||||||
|
|
||||||
|
try:
|
||||||
|
corr = part1 / part2
|
||||||
|
return corr
|
||||||
|
except ZeroDivisionError:
|
||||||
|
print("Ошибка деления на ноль!")
|
||||||
|
return
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
from OKZ1 import reading
|
||||||
|
from OKZ2 import correlation
|
||||||
|
|
||||||
|
file1 = input("Введите имя первого файла: ")
|
||||||
|
file2 = input("Введите имя второго файла: ")
|
||||||
|
|
||||||
|
arr1 = reading(file1)
|
||||||
|
arr2 = reading(file2)
|
||||||
|
|
||||||
|
if arr1 is None or arr2 is None:
|
||||||
|
print("Не удалось считать данные из файлов.")
|
||||||
|
else:
|
||||||
|
corr = correlation(arr1, arr2)
|
||||||
|
if corr is not None:
|
||||||
|
print(f"Коэффициент корреляции: {corr:.2f}")
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
4.0 3.0 2.0 1.0 6.0
|
||||||
|
5.0 6.0 7.0 8.0 9.0
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
11.0 10.5 10.0 9.5 9.0
|
||||||
|
8.5 8.0 7.5 7.0 10.0
|
||||||
@ -0,0 +1,136 @@
|
|||||||
|
# Отчет по теме 8
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## 8 Модули и структурирование программы
|
||||||
|
|
||||||
|
### 8.1 Настройка текущего каталога
|
||||||
|
|
||||||
|
```py
|
||||||
|
import os,sys,imp
|
||||||
|
os.chdir("/Users/vatarishin/lab_sem_5/python-labs/TEMA8")
|
||||||
|
os.getcwd()
|
||||||
|
'/Users/vatarishin/lab_sem_5/python-labs/TEMA8'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.2 Создание и использование модулей в среде Python
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> import Mod1
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
>>> Mod1.perm1
|
||||||
|
'5'
|
||||||
|
>>> import Mod1
|
||||||
|
>>> imp.reload(Mod1)
|
||||||
|
Mod1:Введите значение = 3
|
||||||
|
Mod1:Значение perm1= 3
|
||||||
|
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
|
||||||
|
>>> Mod1.perm1
|
||||||
|
'3'
|
||||||
|
>>> print(sorted(sys.modules.keys()))
|
||||||
|
['Mod1', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport']
|
||||||
|
>>> sys.modules.pop('Mod1')
|
||||||
|
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
|
||||||
|
>>> print(sorted(sys.modules.keys()))
|
||||||
|
['__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport']
|
||||||
|
>>> import Mod1
|
||||||
|
Mod1:Введите значение = 6
|
||||||
|
Mod1:Значение perm1= 6
|
||||||
|
>>> sys.modules.pop('Mod1')
|
||||||
|
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
|
||||||
|
|
||||||
|
>>> exec(open('Mod1.py').read())
|
||||||
|
Mod1:Введите значение = 1
|
||||||
|
Mod1:Значение perm1= 1
|
||||||
|
>>> exec(open('Mod1.py').read())
|
||||||
|
Mod1:Введите значение = 2
|
||||||
|
Mod1:Значение perm1= 2
|
||||||
|
>>> exec(open('Mod1.py').read())
|
||||||
|
Mod1:Введите значение = 3
|
||||||
|
Mod1:Значение perm1= 3
|
||||||
|
|
||||||
|
>>> perm1
|
||||||
|
'3'
|
||||||
|
|
||||||
|
>>> from Mod1 import perm1
|
||||||
|
Mod1:Введите значение = 7
|
||||||
|
Mod1:Значение perm1= 7
|
||||||
|
>>> Mod1
|
||||||
|
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
|
||||||
|
>>> perm1
|
||||||
|
'7'
|
||||||
|
|
||||||
|
>>> from Mod2 import beta
|
||||||
|
>>> g=beta(2)
|
||||||
|
****BETA****
|
||||||
|
>>> g
|
||||||
|
535.4916555247646
|
||||||
|
>>> print(sorted(sys.modules.keys()))
|
||||||
|
['Mod1', 'Mod2', '__main__', '_abc', '_bootlocale', '_codecs', '_collections', '_collections_abc', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_operator', '_posixsubprocess', '_signal', '_sitebuiltins', '_sre', '_stat', '_thread', '_warnings', '_weakref', '_weakrefset', 'abc', 'atexit', 'builtins', 'codecs', 'collections', 'collections.abc', 'contextlib', 'copyreg', 'encodings', 'encodings.aliases', 'encodings.cp437', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'functools', 'genericpath', 'grp', 'heapq', 'imp', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'io', 'itertools', 'keyword', 'linecache', 'marshal', 'math', 'operator', 'os', 'os.path', 'platform', 'posix', 'posixpath', 'pwd', 're', 'readline', 'reprlib', 'rlcompleter', 'select', 'selectors', 'signal', 'site', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'subprocess', 'sys', 'threading', 'time', 'token', 'tokenize', 'types', 'typing', 'typing.io', 'typing.re', 'warnings', 'zipimport']
|
||||||
|
|
||||||
|
>>> alpha()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
NameError: name 'alpha' is not defined
|
||||||
|
>>> from Mod2 import alpha as al
|
||||||
|
>>> al()
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=3
|
||||||
|
'3'
|
||||||
|
>>> del al,beta
|
||||||
|
>>> from Mod2 import alpha as al, beta as bt
|
||||||
|
>>> del al, bt
|
||||||
|
>>> from Mod2 import *
|
||||||
|
>>> tt=alpha()
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=0.12
|
||||||
|
>>> uu=beta(float(tt))
|
||||||
|
****BETA****
|
||||||
|
>>> uu
|
||||||
|
1.4578913609506803
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8.3 Создание многомодульных программ
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> sys.modules.pop('Mod1')
|
||||||
|
<module 'Mod1' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod1.py'>
|
||||||
|
>>> sys.modules.pop('Mod2')
|
||||||
|
<module 'Mod2' from '/Users/vatarishin/lab_sem_5/python-labs/TEMA8/Mod2.py'>
|
||||||
|
>>> import Mod0
|
||||||
|
Mod1:Введите значение = 5
|
||||||
|
Mod1:Значение perm1= 5
|
||||||
|
perm1= 5
|
||||||
|
****ALPHA****
|
||||||
|
Значение t=2
|
||||||
|
tt= 2
|
||||||
|
****BETA****
|
||||||
|
qq= 535.4916555247646
|
||||||
|
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
|
||||||
|
'2'
|
||||||
|
535.4916555247646
|
||||||
|
'5'
|
||||||
|
|
||||||
|
>>> import MM0
|
||||||
|
k1,T,k2,Xm,A,F,N=1,2,3,4,5,6,7
|
||||||
|
y = [0, 0, 0, 0, -3.430711797903516, -4.909726376383112, 0]
|
||||||
|
|
||||||
|
```
|
||||||
|
Проведите следующие эксперименты:
|
||||||
|
- Попробуйте вставить в функции alpha обращение к функции beta и, наоборот, из beta – к alpha.
|
||||||
|
- Попробуйте отобразить на экране в модуле Mod0 значения объектов t и expi.
|
||||||
|
> Будет выведена ошибка так как `t`, `expi` – локальные переменные, который существуют только внутри функций
|
||||||
|
- Попробуйте в модуле Mod0 увеличить в 3 раза значение объекта perm1 и отобразить его после этого на экране.
|
||||||
|
```py
|
||||||
|
imp.reload(Mod0)
|
||||||
|
perm1= 5
|
||||||
|
new perm1= 555
|
||||||
|
```
|
||||||
|
- Попробуйте в командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq
|
||||||
|
```py
|
||||||
|
>>> Mod0.tt *= 2
|
||||||
|
>>> Mod0.tt
|
||||||
|
'22'
|
||||||
|
```
|
||||||
|
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8
|
||||||
|
Выполнил: Коваленко Д.М. Проверил: Козлюк Д.А.
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
Разработайте программу, состоящую из трех модулей:
|
||||||
|
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколь-ко на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полу-ченный список должен возвращаться в вызывающую программу.
|
||||||
|
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
||||||
|
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
|
||||||
|
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
Первый модуль
|
||||||
|
```
|
||||||
|
def reading (file):
|
||||||
|
nums = []
|
||||||
|
with open(file) as file:
|
||||||
|
for line in file:
|
||||||
|
nums.extend(map(float, line.split()))
|
||||||
|
return nums
|
||||||
|
```
|
||||||
|
Второй модуль
|
||||||
|
```
|
||||||
|
import math
|
||||||
|
def correlation(l1, l2):
|
||||||
|
n = min(len(l1), len(l2))
|
||||||
|
sum1 = sum(l1[:n])
|
||||||
|
sum2 = sum(l2[:n])
|
||||||
|
sum1sq = sum(now ** 2 for now in l1)
|
||||||
|
sum2sq = sum(now ** 2 for now in l2)
|
||||||
|
sum12 = sum(x * y for x, y in zip(l1, l2))
|
||||||
|
|
||||||
|
part1 = n * sum12 - sum1 * sum2
|
||||||
|
part2 = math.sqrt((n * sum1sq - sum1 ** 2) * (n * sum2sq - sum2 ** 2))
|
||||||
|
|
||||||
|
try:
|
||||||
|
corr = part1 / part2
|
||||||
|
return corr
|
||||||
|
except ZeroDivisionError:
|
||||||
|
print("Ошибка деления на ноль!")
|
||||||
|
return
|
||||||
|
```
|
||||||
|
Третий модуль
|
||||||
|
```
|
||||||
|
from OKZ1 import reading
|
||||||
|
from OKZ2 import correlation
|
||||||
|
|
||||||
|
file1 = input("Введите имя первого файла: ")
|
||||||
|
file2 = input("Введите имя второго файла: ")
|
||||||
|
|
||||||
|
arr1 = reading(file1)
|
||||||
|
arr2 = reading(file2)
|
||||||
|
|
||||||
|
if arr1 is None or arr2 is None:
|
||||||
|
print("Не удалось считать данные из файлов.")
|
||||||
|
else:
|
||||||
|
corr = correlation(arr1, arr2)
|
||||||
|
if corr is not None:
|
||||||
|
print(f"Коэффициент корреляции: {corr:.2f}")
|
||||||
|
```
|
||||||
|
Содержимое файлов:
|
||||||
|
```
|
||||||
|
data1.txt
|
||||||
|
4.0 3.0 2.0 1.0 6.0
|
||||||
|
5.0 6.0 7.0 8.0 9.0
|
||||||
|
|
||||||
|
data2.txt
|
||||||
|
11.0 10.5 10.0 9.5 9.0
|
||||||
|
8.5 8.0 7.5 7.0 10.0
|
||||||
|
```
|
||||||
|
```
|
||||||
|
>>> import OKZ3
|
||||||
|
Введите имя первого файла: data1.txt
|
||||||
|
Введите имя второго файла: data2.txt
|
||||||
|
Коэффициент корреляции: -0.52
|
||||||
|
```
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 8
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание 12
|
||||||
|
|
||||||
|
Разработайте анонимную функцию с 3 аргументами: х, a, b, вычисляющую значение exp(-(x-a)2/b)/(2*π*b)1/2. Рассчитайте значения функции в диапазоне значений х от a-3*b1/2 до a+3*b1/2 с шагом 0.2*b1/2 и запишите эти значения в текстовый файл по два значения на строке, разделенных запятыми.
|
||||||
|
|
||||||
|
на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Модуль-реализация
|
||||||
|
```py
|
||||||
|
from math import pi, exp
|
||||||
|
|
||||||
|
calc = lambda x, a, b: exp(-(x - a)**2 / b) / (2 * pi * b)**0.5
|
||||||
|
```
|
||||||
|
|
||||||
|
Модуль-проверка
|
||||||
|
```py
|
||||||
|
from IKZ import calc
|
||||||
|
from numpy import arange
|
||||||
|
|
||||||
|
a = int(input('Enter a value: '))
|
||||||
|
b = int(input('Enter b value: '))
|
||||||
|
res = []
|
||||||
|
xRange = arange(a - 3 * b**0.5, a + 3 * b ** 0.5, 0.2 * b ** 0.5)
|
||||||
|
for i in range(len(xRange)):
|
||||||
|
res.append(calc(xRange[i], a, b))
|
||||||
|
|
||||||
|
with open('IKZ_res.txt', 'w') as file:
|
||||||
|
resString = ''
|
||||||
|
for i in range(len(res)):
|
||||||
|
divider = ',' if i % 2 == 0 else '\n'
|
||||||
|
resString += f'{res[i]}{divider}'
|
||||||
|
file.write(resString)
|
||||||
|
```
|
||||||
|
После Ширина: | Высота: | Размер: 14 KiB |
@ -0,0 +1,7 @@
|
|||||||
|
import M2
|
||||||
|
from numpy import frombuffer, float64
|
||||||
|
|
||||||
|
with open('Res456.bin', 'rb') as file:
|
||||||
|
data = file.read()
|
||||||
|
decoded = frombuffer(data, dtype=float64)
|
||||||
|
print(f'Оценка мат. ожидания {decoded[-2]}\nОценка медианы {decoded[-1]}')
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
from numpy import median, mean
|
||||||
|
|
||||||
|
def func1(SPS, KL):
|
||||||
|
return sorted(SPS, reverse=KL)
|
||||||
|
|
||||||
|
def func2(data):
|
||||||
|
return median(data), mean(data)
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
from numpy.random import normal
|
||||||
|
from math import sqrt
|
||||||
|
from pylab import plot, show
|
||||||
|
import M1
|
||||||
|
|
||||||
|
print('Введите параметры выборки случайной велечины')
|
||||||
|
n = int(input('Введите число элементов: '))
|
||||||
|
m = int(input('Введите мат ожидание: '))
|
||||||
|
d2 = int(input('Введите дисперсию: '))
|
||||||
|
data = normal(m, sqrt(d2), n)
|
||||||
|
KL = int(input('Введите значение бинарного ключа: '))
|
||||||
|
orderedData = M1.func1(data, KL)
|
||||||
|
me, mede = M1.func2(orderedData)
|
||||||
|
with open('Res456.bin', 'wb') as file:
|
||||||
|
data.tofile(file)
|
||||||
|
me.tofile(file)
|
||||||
|
mede.tofile(file)
|
||||||
|
plot(data)
|
||||||
|
show()
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
class Class1: #Объявление класса Class1 в модуле
|
||||||
|
def zad_zn(self,znach): # 1 Метод класса
|
||||||
|
self.data=znach # self - ссылка на экземпляр класса Class1
|
||||||
|
def otobrazh(self): # 2 Метод класса
|
||||||
|
print(self.data)#Отображение данных экземпляра
|
||||||
|
class Class2(Class1): #Class2 - наследник класса Class1
|
||||||
|
def otobrazh(self): # Метод класса Class2
|
||||||
|
print('значение=',self.data)#Отображение данных экземпляра
|
||||||
|
def otobrazh(objekt): #Объявление самостоятельной функции
|
||||||
|
print('значение объекта=',objekt)
|
||||||
Двоичный файл не отображается.
@ -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,30 @@
|
|||||||
|
class Employee:
|
||||||
|
def __init__(self, fio, otdel, dolzhnost, oklad):
|
||||||
|
self.fio = fio
|
||||||
|
self.otdel = otdel
|
||||||
|
self.dolzhnost = dolzhnost
|
||||||
|
self.oklad = oklad
|
||||||
|
self._pooshrenia = []
|
||||||
|
|
||||||
|
def salary_raise(self, summa):
|
||||||
|
if summa > 0:
|
||||||
|
self.oklad += summa
|
||||||
|
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
|
||||||
|
else:
|
||||||
|
print("Сумма для повышения оклада должна быть больше нуля.")
|
||||||
|
|
||||||
|
def change_department(self, new_department):
|
||||||
|
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
|
||||||
|
self.otdel = new_department
|
||||||
|
|
||||||
|
def change_position(self, new_position):
|
||||||
|
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
|
||||||
|
self.dolzhnost = new_position
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pooshrenia(self):
|
||||||
|
return self._pooshrenia
|
||||||
|
|
||||||
|
def add_encouragement(self, tekst):
|
||||||
|
self._pooshrenia.append(tekst)
|
||||||
|
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
from employee_module import Employee
|
||||||
|
|
||||||
|
emp1 = Employee("Сидорова Е.Ю.", "Кафедра Управления и информационных технологий", "Старший преподаватель", 75000)
|
||||||
|
emp2 = Employee("Бауэр В.Ю.", "Дир. ИВТИ", "Заместитель директора института", 150000)
|
||||||
|
|
||||||
|
print("=== НАЧАЛЬНЫЕ ДАННЫЕ ===")
|
||||||
|
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
|
||||||
|
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
|
||||||
|
|
||||||
|
print("\n=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===")
|
||||||
|
# Операции с сотрудниками
|
||||||
|
emp1.salary_raise(15000)
|
||||||
|
emp2.change_department("Дир. ЭНМИ")
|
||||||
|
emp1.change_position("Заместитель заведующего кафедрой")
|
||||||
|
emp2.add_encouragement("За преданность делу")
|
||||||
|
emp1.add_encouragement("За смелость")
|
||||||
|
|
||||||
|
print("\n=== ИТОГОВЫЕ ДАННЫЕ ===")
|
||||||
|
# Вывод итоговых данных
|
||||||
|
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
|
||||||
|
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
|
||||||
|
|
||||||
|
print("\n=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===")
|
||||||
|
print(f"Поощрения {emp1.fio}: {emp1.pooshrenia}")
|
||||||
|
print(f"Поощрения {emp2.fio}: {emp2.pooshrenia}")
|
||||||
@ -0,0 +1,230 @@
|
|||||||
|
# Отчет по теме 9
|
||||||
|
|
||||||
|
Коваленко Дмитрий А-01-23
|
||||||
|
|
||||||
|
|
||||||
|
## 9. Создание пользовательских классов и объектов
|
||||||
|
|
||||||
|
|
||||||
|
### 9.1 Импорт библиотек и настройка текущего каталога
|
||||||
|
```py
|
||||||
|
import os
|
||||||
|
os.chdir("/Users/vatarishin/lab_sem_5/python-labs/TEMA9")
|
||||||
|
os.getcwd()
|
||||||
|
'/Users/vatarishin/lab_sem_5/python-labs/TEMA9'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.2 Создание автономного класса
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.3. Создание класса-наследника
|
||||||
|
```py
|
||||||
|
class Class2(Class1):
|
||||||
|
def otobrazh(self):
|
||||||
|
print('значение =', self.data)
|
||||||
|
>>> z3 = Class2()
|
||||||
|
>>> dir(z3)
|
||||||
|
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
|
||||||
|
>>> z3.zad_zn('Совсем новое')
|
||||||
|
>>> z3.otobrazh()
|
||||||
|
значение = Совсем новое
|
||||||
|
>>> z1.otobrazh()
|
||||||
|
Новое значение атрибута у экз. 1
|
||||||
|
>>> del z1, z2, z3
|
||||||
|
```
|
||||||
|
### 9.4 Использование классов, содержащихся в модулях
|
||||||
|
```py
|
||||||
|
>>> from Mod3 import Class1
|
||||||
|
>>> z4 = Class1()
|
||||||
|
>>> z4.otobrazh()
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
File "/Users/vatarishin/lab_sem_5/python-labs/TEMA9/Mod3.py", line 5, in otobrazh
|
||||||
|
print(self.data)#Отображение данных экземпляра
|
||||||
|
AttributeError: 'Class1' object has no attribute 'data'
|
||||||
|
>>> z4=Class1()
|
||||||
|
>>> z4.data='значение данного data у экз.4'
|
||||||
|
>>> z4.otobrazh()
|
||||||
|
значение данного data у экз.4
|
||||||
|
del z4
|
||||||
|
>>> import Mod3
|
||||||
|
>>> z4 = Mod3.Class2()
|
||||||
|
>>> z4.zad_zn('Класс из модуля')
|
||||||
|
>>> z4.otobrazh()
|
||||||
|
значение = Класс из модуля
|
||||||
|
>>> Mod3.otobrazh('Объект')
|
||||||
|
значение объекта = Объект
|
||||||
|
```
|
||||||
|
### 9.5. Использование специальных методов
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.6. Присоединение атрибутов к классу
|
||||||
|
```py
|
||||||
|
>>> dir(Class3)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
|
||||||
|
>>> Class3.fio='Иванов И.И.'
|
||||||
|
>>> dir(Class3)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
|
||||||
|
>>> z7 = Class3(123)
|
||||||
|
>>> dir(z7)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
|
||||||
|
>>> dir(z7)==dir(Class3)
|
||||||
|
False
|
||||||
|
|
||||||
|
>>> z7.rozden='1987'
|
||||||
|
>>> dir(z7)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'data', 'fio', 'otobrazh', 'rozden', 'zad_dr_zn', 'zad_zn']
|
||||||
|
|
||||||
|
>>> dir(Class3)
|
||||||
|
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||||
|
```
|
||||||
|
### 9.7 Выявление родительских классов
|
||||||
|
```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'>)
|
||||||
|
```
|
||||||
|
### 9.8. Создание свойства класса.
|
||||||
|
```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
|
||||||
|
>>> exempl.svojstvo
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
File "<stdin>", line 5, in chten
|
||||||
|
AttributeError: 'Class4' object has no attribute '_Class4__prm'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9.9
|
||||||
|
```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])
|
||||||
|
```
|
||||||
|
=== testSAU.py ===
|
||||||
|
```py
|
||||||
|
###main_SAU
|
||||||
|
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
||||||
|
from SAU import *
|
||||||
|
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
|
||||||
|
SAUe=SAU(prm) # Создаём экземпляр класса
|
||||||
|
yt=[]
|
||||||
|
for xt in xx: # Прохождение входного сигнала
|
||||||
|
SAUe.zdn_zn(xt)
|
||||||
|
SAUe.model()
|
||||||
|
SAUe.otobraz()
|
||||||
|
yt.append(SAUe.ypr[1])
|
||||||
|
import pylab
|
||||||
|
pylab.plot(yt)
|
||||||
|
pylab.show()
|
||||||
|
```
|
||||||
|
Вывод:
|
||||||
|
```
|
||||||
|
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
|
||||||
|
```
|
||||||
|
График сохранен в файле .
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 9
|
||||||
|
Выполнил: Коваленко Д.М. Проверил: Козлюк Д.А.
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
Создайте и запишите в модуль класс, содержащий следующие компоненты:
|
||||||
|
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
|
||||||
|
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
|
||||||
|
- метод для обеспечения перевода сотрудника из одного отдела в другой;
|
||||||
|
- метод для изменения должности сотрудника;
|
||||||
|
- свойство, содержащее перечень (список) поощрений сотрудника.
|
||||||
|
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в отдел, измене-ния должности и оклада, объявления благодарности.
|
||||||
|
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
employee_module.py
|
||||||
|
```py
|
||||||
|
class Employee:
|
||||||
|
def __init__(self, fio, otdel, dolzhnost, oklad):
|
||||||
|
self.fio = fio
|
||||||
|
self.otdel = otdel
|
||||||
|
self.dolzhnost = dolzhnost
|
||||||
|
self.oklad = oklad
|
||||||
|
self._pooshrenia = []
|
||||||
|
|
||||||
|
def salary_raise(self, summa):
|
||||||
|
if summa > 0:
|
||||||
|
self.oklad += summa
|
||||||
|
print(f"Оклад сотрудника {self.fio} увеличен на {summa}. Новый оклад: {self.oklad}")
|
||||||
|
else:
|
||||||
|
print("Сумма для повышения оклада должна быть больше нуля.")
|
||||||
|
|
||||||
|
def change_department(self, new_department):
|
||||||
|
print(f"Сотрудник {self.fio} переведен из отдела {self.otdel} в отдел {new_department}.")
|
||||||
|
self.otdel = new_department
|
||||||
|
|
||||||
|
def change_position(self, new_position):
|
||||||
|
print(f"Должность сотрудника {self.fio} изменена с {self.dolzhnost} на {new_position}.")
|
||||||
|
self.dolzhnost = new_position
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pooshrenia(self):
|
||||||
|
return self._pooshrenia
|
||||||
|
|
||||||
|
def add_encouragement(self, tekst):
|
||||||
|
self._pooshrenia.append(tekst)
|
||||||
|
print(f"Сотрудник {self.fio} теперь имеет поощрение: {tekst}")
|
||||||
|
```
|
||||||
|
|
||||||
|
main.py
|
||||||
|
```py
|
||||||
|
from employee_module import Employee
|
||||||
|
|
||||||
|
emp1 = Employee("Сидорова Е.Ю.", "Кафедра Управления и информационных технологий", "Старший преподаватель", 75000)
|
||||||
|
emp2 = Employee("Бауэр В.Ю.", "Дир. ИВТИ", "Заместитель директора института", 150000)
|
||||||
|
|
||||||
|
print("=== НАЧАЛЬНЫЕ ДАННЫЕ ===")
|
||||||
|
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
|
||||||
|
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
|
||||||
|
|
||||||
|
print("\n=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===")
|
||||||
|
# Операции с сотрудниками
|
||||||
|
emp1.salary_raise(15000)
|
||||||
|
emp2.change_department("Дир. ЭНМИ")
|
||||||
|
emp1.change_position("Заместитель заведующего кафедрой")
|
||||||
|
emp2.add_encouragement("За преданность делу")
|
||||||
|
emp1.add_encouragement("За смелость")
|
||||||
|
|
||||||
|
print("\n=== ИТОГОВЫЕ ДАННЫЕ ===")
|
||||||
|
# Вывод итоговых данных
|
||||||
|
print(f"{emp1.fio}, {emp1.otdel}, {emp1.dolzhnost}, оклад: {emp1.oklad}")
|
||||||
|
print(f"{emp2.fio}, {emp2.otdel}, {emp2.dolzhnost}, оклад: {emp2.oklad}")
|
||||||
|
|
||||||
|
print("\n=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===")
|
||||||
|
print(f"Поощрения {emp1.fio}: {emp1.pooshrenia}")
|
||||||
|
print(f"Поощрения {emp2.fio}: {emp2.pooshrenia}")
|
||||||
|
```
|
||||||
|
|
||||||
|
Вывод:
|
||||||
|
```
|
||||||
|
=== НАЧАЛЬНЫЕ ДАННЫЕ ===
|
||||||
|
Сидорова Е.Ю., Кафедра Управления и информационных технологий, Старший преподаватель, оклад: 75000
|
||||||
|
Бауэр В.Ю., Дир. ИВТИ, Заместитель директора института, оклад: 150000
|
||||||
|
|
||||||
|
=== ОПЕРАЦИИ С СОТРУДНИКАМИ ===
|
||||||
|
Оклад сотрудника Сидорова Е.Ю. увеличен на 15000. Новый оклад: 90000
|
||||||
|
Сотрудник Бауэр В.Ю. переведен из отдела Дир. ИВТИ в отдел Дир. ЭНМИ.
|
||||||
|
Должность сотрудника Сидорова Е.Ю. изменена с Старший преподаватель на Заместитель заведующего кафедрой.
|
||||||
|
Сотрудник Бауэр В.Ю. теперь имеет поощрение: За преданность делу
|
||||||
|
Сотрудник Сидорова Е.Ю. теперь имеет поощрение: За смелость
|
||||||
|
|
||||||
|
=== ИТОГОВЫЕ ДАННЫЕ ===
|
||||||
|
Сидорова Е.Ю., Кафедра Управления и информационных технологий, Заместитель заведующего кафедрой, оклад: 90000
|
||||||
|
Бауэр В.Ю., Дир. ЭНМИ, Заместитель директора института, оклад: 150000
|
||||||
|
|
||||||
|
=== ПЕРЕЧЕНЬ ПООЩРЕНИЙ ===
|
||||||
|
Поощрения Сидорова Е.Ю.: ['За смелость']
|
||||||
|
Поощрения Бауэр В.Ю.: ['За преданность делу']
|
||||||
|
```
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
# Индивидуальное контрольное задание по теме 9
|
||||||
|
|
||||||
|
Коваленко Дмитрий, А-01-23
|
||||||
|
|
||||||
|
## Задание 12
|
||||||
|
|
||||||
|
1) Создайте модуль М1, содержащий две функции:
|
||||||
|
- функция 1: аргумент - список SPS и бинарный ключ KL; функция должна создавать новый список с элементами из SPS, упорядоченными по возрастанию (при KL=0) или по убыванию величины (при KL=1);
|
||||||
|
- функция 2: аргумент - список или кортеж; функция должна рассчитать по нему медиану и среднее значение.
|
||||||
|
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
|
||||||
|
- по запросу вводятся параметры выборки случайной величины, подчиняющейся нормальному распределению: N - число элементов выборки, M - её математическое ожидание, D2-дисперсия,
|
||||||
|
- создаётся выборка с заданными параметрами,
|
||||||
|
- у пользователя запрашивается значение бинарного ключа;
|
||||||
|
- с помощью функции 1 по выборке рассчитывается упорядоченный ряд и по нему - медиана и среднее значение;
|
||||||
|
- с помощью функции 2 по выборке рассчитываются оценка матожидания и медиана;
|
||||||
|
- исходная выборка и результаты расчета записываются в бинарный файл Res456.bin.
|
||||||
|
- выборка представляется в виде графика.
|
||||||
|
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
|
||||||
|
4) Проведите расчеты при 3-х разных наборах значений параметров.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Модуль-реализация M1
|
||||||
|
```py
|
||||||
|
from numpy import median, mean
|
||||||
|
|
||||||
|
def func1(SPS, KL):
|
||||||
|
return sorted(SPS, reverse=KL)
|
||||||
|
|
||||||
|
def func2(data):
|
||||||
|
return median(data), mean(data)
|
||||||
|
```
|
||||||
|
|
||||||
|
Модуль-реализация M2
|
||||||
|
```py
|
||||||
|
from numpy.random import normal
|
||||||
|
from math import sqrt
|
||||||
|
from pylab import plot, show
|
||||||
|
import M1
|
||||||
|
|
||||||
|
print('Введите параметры выборки случайной велечины')
|
||||||
|
n = int(input('Введите число элементов: '))
|
||||||
|
m = int(input('Введите мат ожидание: '))
|
||||||
|
d2 = int(input('Введите дисперсию: '))
|
||||||
|
data = normal(m, sqrt(d2), n)
|
||||||
|
KL = int(input('Введите значение бинарного ключа: '))
|
||||||
|
orderedData = M1.func1(data, KL)
|
||||||
|
me, mede = M1.func2(orderedData)
|
||||||
|
with open('Res456.bin', 'wb') as file:
|
||||||
|
data.tofile(file)
|
||||||
|
me.tofile(file)
|
||||||
|
mede.tofile(file)
|
||||||
|
plot(data)
|
||||||
|
show()
|
||||||
|
```
|
||||||
|
|
||||||
|
Модуль-проверка
|
||||||
|
```py
|
||||||
|
import M2
|
||||||
|
from numpy import frombuffer, float64
|
||||||
|
|
||||||
|
with open('Res456.bin', 'rb') as file:
|
||||||
|
data = file.read()
|
||||||
|
decoded = frombuffer(data, dtype=float64)
|
||||||
|
print(f'Оценка мат. ожидания {decoded[-2]}\nОценка медианы {decoded[-1]}')
|
||||||
|
```
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
###main_SAU
|
||||||
|
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
||||||
|
from SAU import *
|
||||||
|
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
|
||||||
|
SAUe=SAU(prm) # Создаём экземпляр класса
|
||||||
|
yt=[]
|
||||||
|
for xt in xx: # Прохождение входного сигнала
|
||||||
|
SAUe.zdn_zn(xt)
|
||||||
|
SAUe.model()
|
||||||
|
SAUe.otobraz()
|
||||||
|
yt.append(SAUe.ypr[1])
|
||||||
|
import pylab
|
||||||
|
pylab.plot(yt)
|
||||||
|
pylab.show()
|
||||||
Загрузка…
Ссылка в новой задаче