Сравнить коммиты
76 Коммитов
| Автор | SHA1 | Дата |
|---|---|---|
|
|
5e4aed02c4 | 1 месяц назад |
|
|
cda7a77dc1 | 1 месяц назад |
|
|
6b5eb56023 | 1 месяц назад |
|
|
13f8ef0c17 | 1 месяц назад |
|
|
3da1dde586 | 1 месяц назад |
|
|
6f9abe833f | 1 месяц назад |
|
|
9b4a8e108e | 1 месяц назад |
|
|
89381eb1f0 | 2 месяцев назад |
|
|
f03e826fba | 2 месяцев назад |
|
|
fcda4ca9f4 | 2 месяцев назад |
|
|
004736f534 | 2 месяцев назад |
|
|
a60618ec85 | 2 месяцев назад |
|
|
053cf63996 | 2 месяцев назад |
|
|
3489ef8216 | 2 месяцев назад |
|
|
a5d82e4111 | 2 месяцев назад |
|
|
ba27609d1f | 2 месяцев назад |
|
|
d256a94a07 | 2 месяцев назад |
|
|
ce36ec1458 | 2 месяцев назад |
|
|
e555e5cc3f | 2 месяцев назад |
|
|
a2012c615f | 2 месяцев назад |
|
|
502978c576 | 2 месяцев назад |
|
|
0aa7a21443 | 2 месяцев назад |
|
|
7f16803393 | 2 месяцев назад |
|
|
c525dec81c | 2 месяцев назад |
|
|
b0aef753ef | 2 месяцев назад |
|
|
8e69428e2f | 3 месяцев назад |
|
|
7d361db18e | 3 месяцев назад |
|
|
23a20e6f2c | 3 месяцев назад |
|
|
0b2f126266 | 3 месяцев назад |
|
|
535bf7dbe4 | 3 месяцев назад |
|
|
d134f5108b | 3 месяцев назад |
|
|
7f58198e24 | 3 месяцев назад |
|
|
be76086d87 | 3 месяцев назад |
|
|
46945f58b6 | 3 месяцев назад |
|
|
9445ebaa4f | 3 месяцев назад |
|
|
28aad7c9ec | 3 месяцев назад |
|
|
b5f9fc830b | 3 месяцев назад |
|
|
3e03a94eb7 | 4 месяцев назад |
|
|
4113c9e5b4 | 4 месяцев назад |
|
|
1adb53b8a2 | 4 месяцев назад |
|
|
4b245c1571 | 4 месяцев назад |
|
|
fd95f946ed | 4 месяцев назад |
|
|
04cb96ab68 | 4 месяцев назад |
|
|
e18ade923e | 4 месяцев назад |
|
|
6cde9c8752 | 4 месяцев назад |
|
|
551aab0ea7 | 4 месяцев назад |
|
|
ef4a1b5138 | 4 месяцев назад |
|
|
2978dcfae9 | 4 месяцев назад |
|
|
6a80a6e488 | 4 месяцев назад |
|
|
ff6aa14b50 | 4 месяцев назад |
|
|
cdc4a67a0d | 4 месяцев назад |
|
|
5079218d95 | 4 месяцев назад |
|
|
2e8f3ffa3d | 4 месяцев назад |
|
|
96a5e93641 | 4 месяцев назад |
|
|
a272b33871 | 4 месяцев назад |
|
|
5b8c2a36c3 | 5 месяцев назад |
|
|
00c3e8a5c8 | 5 месяцев назад |
|
|
151856a8db | 5 месяцев назад |
|
|
8ca9c2f928 | 5 месяцев назад |
|
|
e7fbd5cbe3 | 5 месяцев назад |
|
|
23198c0e3d | 5 месяцев назад |
|
|
b5d142143e | 5 месяцев назад |
|
|
c806a81a72 | 5 месяцев назад |
|
|
eecf8053bd | 5 месяцев назад |
|
|
5567c41c77 | 5 месяцев назад |
|
|
f37ab5c261 | 5 месяцев назад |
|
|
2d168d9324 | 5 месяцев назад |
|
|
e2633362b4 | 5 месяцев назад |
|
|
713865f3f3 | 5 месяцев назад |
|
|
ecce18d3eb | 5 месяцев назад |
|
|
390a2d64ba | 5 месяцев назад |
|
|
de0eb4286b | 5 месяцев назад |
|
|
9e7891884a | 5 месяцев назад |
|
|
448d0c7dbe | 5 месяцев назад |
|
|
e480b3a8a5 | 5 месяцев назад |
|
|
731adf6feb | 5 месяцев назад |
@ -0,0 +1,5 @@
|
||||
#Программа по Теме 1 <Голощапов Дмитрий Евгеньевич>
|
||||
print('Hello')
|
||||
h=input('Your name=')
|
||||
import os
|
||||
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
|
||||
@ -0,0 +1,62 @@
|
||||
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
|
||||
Type "help", "copyright", "credits" or "license()" for more information.
|
||||
# Протокол по Теме 1 <Голощапов Дмитрий Евгеньевич>
|
||||
print('Hello')
|
||||
Hello
|
||||
|
||||
h=input('Your name=')
|
||||
Your name=Dima
|
||||
|
||||
import os
|
||||
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA1')
|
||||
|
||||
import Pr0
|
||||
Hello
|
||||
Your name=
|
||||
|
||||
import prb1
|
||||
Как Вас зовут? Дима
|
||||
Привет, Дима
|
||||
|
||||
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(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.
|
||||
|
||||
(None, None)
|
||||
|
||||
import tdemo_chaos
|
||||
@ -0,0 +1,13 @@
|
||||
# Контрольный вопрос №11 по теме 1
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Вопрос:
|
||||
|
||||
В каком месте инструкции можно написать комментарий?
|
||||
|
||||
# Ответ:
|
||||
|
||||
Комментарий можно написать в любой месте строки, но он должен начинаться с символа #.
|
||||
Весь текст после # до конца строки будет считаться комментарием и игнорироваться интерпретатором.
|
||||
Комментарий можно разместить как на отдельной строке, так и после инструкции.
|
||||
@ -0,0 +1,731 @@
|
||||
# Протокол лабораторной работы 2 Голощапов Дмитрий Евгеньевич
|
||||
|
||||
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
|
||||
|
||||
Type "help", "copyright", "credits" or "license()" for more information.
|
||||
|
||||
import os
|
||||
|
||||
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
|
||||
|
||||
f1 = 16; f2 = 3
|
||||
|
||||
f1, f2
|
||||
|
||||
(16, 3)
|
||||
|
||||
f1; f2
|
||||
|
||||
16
|
||||
|
||||
3
|
||||
|
||||
dir()
|
||||
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
|
||||
|
||||
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_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
|
||||
|
||||
type(f2)
|
||||
|
||||
<class 'int'>
|
||||
|
||||
del f1, f2
|
||||
|
||||
dir()
|
||||
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
|
||||
|
||||
gg1 = 1.6
|
||||
|
||||
gg1
|
||||
|
||||
1.6
|
||||
|
||||
hh1 = 'example'
|
||||
|
||||
hh1
|
||||
|
||||
'example'
|
||||
|
||||
73sr = 3
|
||||
|
||||
SyntaxError: invalid decimal literal
|
||||
|
||||
and = 7
|
||||
|
||||
SyntaxError: invalid syntax
|
||||
|
||||
import keyword
|
||||
|
||||
keyword.kwlist
|
||||
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
|
||||
kwd = keyword.kwlist
|
||||
|
||||
kwd
|
||||
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
|
||||
type(kwd)
|
||||
|
||||
<class 'list'>
|
||||
|
||||
import builtins
|
||||
|
||||
dir(builtins)
|
||||
|
||||
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', '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', 'S
|
||||
ystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', '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']
|
||||
|
||||
abs(-5)
|
||||
|
||||
5
|
||||
|
||||
len([1, 2, 3])
|
||||
|
||||
3
|
||||
|
||||
max(14, 8)
|
||||
|
||||
14
|
||||
|
||||
min (15, 0)
|
||||
|
||||
0
|
||||
|
||||
pow (5, 2)
|
||||
|
||||
25
|
||||
|
||||
round (3,124)
|
||||
|
||||
3
|
||||
|
||||
sum ([7, 3, 5])
|
||||
|
||||
15
|
||||
|
||||
sorted ([3, 7, 9, 75, 0, -1])
|
||||
|
||||
[-1, 0, 3, 7, 9, 75]
|
||||
|
||||
list1 = [1, 2, 3]
|
||||
|
||||
list2 = [4, 5, 6]
|
||||
|
||||
zip (list1, list2)
|
||||
|
||||
<zip object at 0x0000019F7EA6E700>
|
||||
|
||||
list(zipped)
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#34>", line 1, in <module>
|
||||
list(zipped)
|
||||
|
||||
NameError: name 'zipped' is not defined
|
||||
|
||||
Gg1 = 45
|
||||
|
||||
gg1, Gg1
|
||||
|
||||
(1.6, 45)
|
||||
|
||||
gg1 == Gg1
|
||||
|
||||
False
|
||||
|
||||
bb1 = True
|
||||
|
||||
|
||||
SyntaxError: unexpected indent
|
||||
|
||||
KeyboardInterrupt
|
||||
|
||||
bb1 = True
|
||||
|
||||
bb2 = False
|
||||
|
||||
type(bb1)
|
||||
|
||||
<class 'bool'>
|
||||
|
||||
ii1=-1234567890
|
||||
|
||||
type(ii1)
|
||||
|
||||
<class 'int'>
|
||||
|
||||
ff1 = 8.987e-12
|
||||
|
||||
type(ff1)
|
||||
|
||||
<class 'float'>
|
||||
|
||||
dv1 = 0b1100101
|
||||
|
||||
type(dv1)
|
||||
|
||||
<class 'int'>
|
||||
|
||||
vsm1 = 0o52765
|
||||
|
||||
type(vsm1)
|
||||
|
||||
<class 'int'>
|
||||
|
||||
shest1 = 0x7109af6
|
||||
|
||||
type(shest1)
|
||||
|
||||
<class 'int'>
|
||||
|
||||
cc1 = 2 - 3j
|
||||
|
||||
type(cc1)
|
||||
|
||||
<class 'complex'>
|
||||
|
||||
a = 3.67
|
||||
|
||||
b = 0.45
|
||||
|
||||
cc2 = complex (a, b)
|
||||
|
||||
cc2
|
||||
|
||||
(3.67+0.45j)
|
||||
|
||||
type (cc2)
|
||||
|
||||
<class 'complex'>
|
||||
|
||||
ss1 = "Это - строка символов"
|
||||
|
||||
ss2 = 'Это - строка символов'
|
||||
|
||||
ss1 == ss2
|
||||
|
||||
True
|
||||
|
||||
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
|
||||
|
||||
print(ss1a)
|
||||
|
||||
Это - " строка символов ",
|
||||
выводимая на двух строках
|
||||
|
||||
ss1b = 'Меня зовут: \n Голощапов Д.Е.'
|
||||
|
||||
print(ss1b)
|
||||
|
||||
Меня зовут:
|
||||
Голощапов Д.Е.
|
||||
|
||||
mnogo="""Нетрудно заметить , что в результате операции
|
||||
|
||||
над числами разных типов получается число,
|
||||
|
||||
имеющее более сложный тип из тех, которые участвуют в операции."""
|
||||
|
||||
print(mnogo)
|
||||
|
||||
Нетрудно заметить , что в результате операции
|
||||
|
||||
над числами разных типов получается число,
|
||||
|
||||
имеющее более сложный тип из тех, которые участвуют в операции.
|
||||
|
||||
ss1[0]
|
||||
|
||||
'Э'
|
||||
|
||||
ss1[8]
|
||||
|
||||
'р'
|
||||
|
||||
ss1[-2]
|
||||
|
||||
'о'
|
||||
|
||||
ss1[6:9]
|
||||
|
||||
'стр'
|
||||
|
||||
ss1[13:]
|
||||
|
||||
'символов'
|
||||
|
||||
ss1[:13]
|
||||
|
||||
'Это - строка '
|
||||
|
||||
ss1[5:-8]
|
||||
|
||||
' строка '
|
||||
|
||||
ss1[3:17:2]
|
||||
|
||||
' тоасм'
|
||||
|
||||
ss1[17:3:-2]
|
||||
|
||||
'омсаот '
|
||||
|
||||
ss1[-4:3:-2]
|
||||
|
||||
'омсаот '
|
||||
|
||||
ss1[4]='='
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#78>", line 1, in <module>
|
||||
ss1[4]='='
|
||||
TypeError: 'str' object does not support item assignment
|
||||
|
||||
ss1=ss1[:4]+'='+ss1[5:]
|
||||
|
||||
ss1
|
||||
|
||||
'Это = строка символов'
|
||||
|
||||
ss1b[-1]
|
||||
|
||||
'.'
|
||||
|
||||
ss1b_cut = ss1b [::-1]
|
||||
|
||||
ss1b_cut
|
||||
|
||||
'.Е.Д вопащолоГ \n :тувоз янеМ'
|
||||
|
||||
num10 = 26
|
||||
|
||||
type(num10)
|
||||
|
||||
<class 'int'>
|
||||
|
||||
num16 = hex(num10)
|
||||
|
||||
num16
|
||||
|
||||
'0x1a'
|
||||
|
||||
type(num16)
|
||||
|
||||
<class 'str'>
|
||||
|
||||
str1 = str(num10) + ' в десятичной - это ' + str(num16) + ' в шестнадцатеричной '
|
||||
|
||||
str1
|
||||
|
||||
'26 в десятичной - это 0x1a в шестнадцатеричной '
|
||||
|
||||
str1[5:16:3]
|
||||
|
||||
'дячй'
|
||||
|
||||
spis1=[111,'Spisok',5-9j]
|
||||
|
||||
spis1
|
||||
|
||||
[111, 'Spisok', (5-9j)]
|
||||
|
||||
stup=[0,0,1,1,1,1,1,1,1]
|
||||
|
||||
stup
|
||||
|
||||
[0, 0, 1, 1, 1, 1, 1, 1, 1]
|
||||
|
||||
spis=[1,2,3,4,
|
||||
|
||||
5,6,7,
|
||||
|
||||
8,9,10]
|
||||
|
||||
spis
|
||||
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
|
||||
spis1 [-1]
|
||||
|
||||
(5-9j)
|
||||
|
||||
stup [-8 :: 2]
|
||||
|
||||
[0, 1, 1, 1]
|
||||
|
||||
spis1[1]='Список'
|
||||
|
||||
spis1
|
||||
|
||||
[111, 'Список', (5-9j)]
|
||||
|
||||
len(spis1)
|
||||
|
||||
3
|
||||
|
||||
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
|
||||
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
|
||||
spis1+['New item']
|
||||
|
||||
[111, 'Список', (5-9j), 'New item', 'New item']
|
||||
|
||||
spis1
|
||||
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
|
||||
spis1 += ss1b
|
||||
|
||||
spis1
|
||||
|
||||
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
|
||||
spis1
|
||||
|
||||
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
|
||||
spis1 = [111, 'Список', (5-9j), 'New item']
|
||||
|
||||
spis1.append(ss1b)
|
||||
|
||||
spis1
|
||||
|
||||
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
spis1.pop(1)
|
||||
|
||||
'Список'
|
||||
|
||||
spis1
|
||||
|
||||
|
||||
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
spis1.pop(7)
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#116>", line 1, in <module>
|
||||
spis1.pop(7)
|
||||
IndexError: pop index out of range
|
||||
help(spis1.insert)
|
||||
Help on built-in function insert:
|
||||
|
||||
insert(index, object, /) method of builtins.list instance
|
||||
Insert object before index.
|
||||
|
||||
spis1.insert(2, "hello")
|
||||
|
||||
spis1
|
||||
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
|
||||
spis1.insert(8, "test")
|
||||
|
||||
spis1
|
||||
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
|
||||
help(spis1.remove)
|
||||
Help on built-in function remove:
|
||||
|
||||
remove(value, /) method of builtins.list instance
|
||||
Remove first occurrence of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
|
||||
spis1.remove(111)
|
||||
|
||||
spis1
|
||||
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
|
||||
spis1.remove('kitten')
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#125>", line 1, in <module>
|
||||
spis1.remove('kitten')
|
||||
ValueError: list.remove(x): x not in list
|
||||
help(spis1.extend)
|
||||
Help on built-in function extend:
|
||||
|
||||
extend(iterable, /) method of builtins.list instance
|
||||
Extend list by appending elements from the iterable.
|
||||
|
||||
end1 = [123, "mew", (1,2)]
|
||||
|
||||
spis1.extend(end1)
|
||||
|
||||
spis1
|
||||
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
|
||||
help(spis1.clear)
|
||||
Help on built-in function clear:
|
||||
|
||||
clear() method of builtins.list instance
|
||||
Remove all items from list.
|
||||
|
||||
|
||||
end1.clear()
|
||||
|
||||
end1
|
||||
[]
|
||||
|
||||
help(spis1.sort)
|
||||
Help on built-in function sort:
|
||||
|
||||
sort(*, key=None, reverse=False) method of builtins.list instance
|
||||
Sort the list in ascending order and return None.
|
||||
|
||||
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
|
||||
order of two equal elements is maintained).
|
||||
|
||||
If a key function is given, apply it once to each list item and sort them,
|
||||
ascending or descending, according to their function values.
|
||||
|
||||
The reverse flag can be set to sort in descending order.
|
||||
|
||||
|
||||
end1 = [5, 6, 9.99999, 384, 0, -5]
|
||||
|
||||
end1.sort(key = abs, reverse = True)
|
||||
|
||||
end1
|
||||
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
|
||||
help(end1.copy)
|
||||
Help on built-in function copy:
|
||||
|
||||
copy() method of builtins.list instance
|
||||
Return a shallow copy of the list.
|
||||
|
||||
|
||||
endcopy = end1.copy()
|
||||
|
||||
endcopy
|
||||
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
|
||||
help(endcopy.index)
|
||||
|
||||
Help on built-in function index:
|
||||
|
||||
index(value, start=0, stop=9223372036854775807, /) method of builtins.list instance
|
||||
Return first index of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
|
||||
endcopy.index(0)
|
||||
|
||||
5
|
||||
|
||||
endopy.index("lalala")
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#142>", line 1, in <module>
|
||||
endopy.index("lalala")
|
||||
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
|
||||
help(endcopy.count)
|
||||
Help on built-in function count:
|
||||
|
||||
count(value, /) method of builtins.list instance
|
||||
Return number of occurrences of value.
|
||||
|
||||
|
||||
endcopy.count(5)
|
||||
|
||||
1
|
||||
|
||||
endcopy.count(666666)
|
||||
|
||||
0
|
||||
|
||||
spis2=[spis1,[4,5,6,7]]
|
||||
|
||||
spis2
|
||||
|
||||
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
|
||||
spis2[0][1]
|
||||
|
||||
'hello'
|
||||
|
||||
spis2[0][1]=78
|
||||
|
||||
spis2
|
||||
|
||||
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
|
||||
spis1
|
||||
|
||||
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
|
||||
kort1=(222,'Kortezh',77+8j)
|
||||
|
||||
kort1= kort1+(1,2)
|
||||
|
||||
kort1
|
||||
|
||||
(222, 'Kortezh', (77+8j), 1, 2)
|
||||
|
||||
kort1= kort1+(ss1b,)
|
||||
|
||||
kort1
|
||||
|
||||
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
|
||||
kort2=kort1[:2]+kort1[3:]
|
||||
|
||||
kort2
|
||||
|
||||
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
|
||||
kort1.index(2)
|
||||
|
||||
4
|
||||
|
||||
kort1.count(222)
|
||||
|
||||
1
|
||||
|
||||
kort1[2]=90
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#161>", line 1, in <module>
|
||||
kort1[2]=90
|
||||
TypeError: 'tuple' object does not support item assignment
|
||||
|
||||
kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
|
||||
|
||||
kortstr
|
||||
|
||||
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
|
||||
|
||||
type(kortstr[5])
|
||||
|
||||
<class 'tuple'>
|
||||
|
||||
type(kortstr[4])
|
||||
|
||||
<class 'list'>
|
||||
|
||||
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||
|
||||
dic1
|
||||
|
||||
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
|
||||
|
||||
dic1[1]
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#168>", line 1, in <module>
|
||||
dic1[1]
|
||||
KeyError: 1
|
||||
|
||||
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)])
|
||||
|
||||
dic4
|
||||
|
||||
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
|
||||
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
|
||||
|
||||
dic5
|
||||
|
||||
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
|
||||
terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
|
||||
|
||||
count_list = ["one", "two", "three", "four", "five"]
|
||||
|
||||
terms_dict = dict(zip(count_list, terms_tuple))
|
||||
|
||||
terms_dict
|
||||
|
||||
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
|
||||
|
||||
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
|
||||
|
||||
mnoz1
|
||||
|
||||
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
|
||||
|
||||
len(mnoz1)
|
||||
|
||||
4
|
||||
|
||||
'датчик' in mnoz1
|
||||
|
||||
True
|
||||
|
||||
mnoz1.add('реле')
|
||||
|
||||
mnoz1.remove('линия связи')
|
||||
|
||||
mnoz1
|
||||
|
||||
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
|
||||
|
||||
mnoz2 = {'спичка', 15, False, 'gear'}
|
||||
|
||||
mnoz2
|
||||
|
||||
{False, 'спичка', 'gear', 15}
|
||||
|
||||
len(mnoz2)
|
||||
|
||||
4
|
||||
|
||||
mnoz2.remove(15)
|
||||
|
||||
mnoz2
|
||||
|
||||
{False, 'спичка', 'gear'}
|
||||
@ -0,0 +1,406 @@
|
||||
#Протокол лабораторной работы 2 Голощапов Дмитрий Евгеньевич
|
||||
Python 3.10.3 (tags/v3.10.3:a342a49, Mar 16 2022, 13:07:40) [MSC v.1929 64 bit (AMD64)] on win32
|
||||
Type "help", "copyright", "credits" or "license()" for more information.
|
||||
import os
|
||||
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
|
||||
f1 = 16; f2 = 3
|
||||
f1, f2
|
||||
(16, 3)
|
||||
f1; f2
|
||||
16
|
||||
3
|
||||
dir()
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
|
||||
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_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
|
||||
type(f2)
|
||||
<class 'int'>
|
||||
del f1, f2
|
||||
dir()
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
|
||||
gg1 = 1.6
|
||||
gg1
|
||||
1.6
|
||||
hh1 = 'example'
|
||||
hh1
|
||||
'example'
|
||||
73sr = 3
|
||||
SyntaxError: invalid decimal literal
|
||||
and = 7
|
||||
SyntaxError: invalid syntax
|
||||
import keyword
|
||||
keyword.kwlist
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
kwd = keyword.kwlist
|
||||
kwd
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
type(kwd)
|
||||
<class 'list'>
|
||||
import builtins
|
||||
dir(builtins)
|
||||
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', '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', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', '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']
|
||||
abs(-5)
|
||||
5
|
||||
len([1, 2, 3])
|
||||
3
|
||||
max(14, 8)
|
||||
14
|
||||
min (15, 0)
|
||||
0
|
||||
pow (5, 2)
|
||||
25
|
||||
round (3,124)
|
||||
3
|
||||
sum ([7, 3, 5])
|
||||
15
|
||||
sorted ([3, 7, 9, 75, 0, -1])
|
||||
[-1, 0, 3, 7, 9, 75]
|
||||
list1 = [1, 2, 3]
|
||||
list2 = [4, 5, 6]
|
||||
zip (list1, list2)
|
||||
<zip object at 0x0000019F7EA6E700>
|
||||
list(zipped)
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#34>", line 1, in <module>
|
||||
list(zipped)
|
||||
NameError: name 'zipped' is not defined
|
||||
Gg1 = 45
|
||||
gg1, Gg1
|
||||
(1.6, 45)
|
||||
gg1 == Gg1
|
||||
False
|
||||
bb1 = True
|
||||
|
||||
SyntaxError: unexpected indent
|
||||
KeyboardInterrupt
|
||||
bb1 = True
|
||||
bb2 = False
|
||||
type(bb1)
|
||||
<class 'bool'>
|
||||
ii1=-1234567890
|
||||
type(ii1)
|
||||
<class 'int'>
|
||||
ff1 = 8.987e-12
|
||||
type(ff1)
|
||||
<class 'float'>
|
||||
dv1 = 0b1100101
|
||||
type(dv1)
|
||||
<class 'int'>
|
||||
vsm1 = 0o52765
|
||||
type(vsm1)
|
||||
<class 'int'>
|
||||
shest1 = 0x7109af6
|
||||
type(shest1)
|
||||
<class 'int'>
|
||||
cc1 = 2 - 3j
|
||||
type(cc1)
|
||||
<class 'complex'>
|
||||
a = 3.67
|
||||
b = 0.45
|
||||
cc2 = complex (a, b)
|
||||
cc2
|
||||
(3.67+0.45j)
|
||||
type (cc2)
|
||||
<class 'complex'>
|
||||
ss1 = "Это - строка символов"
|
||||
ss2 = 'Это - строка символов'
|
||||
ss1 == ss2
|
||||
True
|
||||
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
|
||||
print(ss1a)
|
||||
Это - " строка символов ",
|
||||
выводимая на двух строках
|
||||
ss1b = 'Меня зовут: \n Голощапов Д.Е.'
|
||||
print(ss1b)
|
||||
Меня зовут:
|
||||
Голощапов Д.Е.
|
||||
mnogo="""Нетрудно заметить , что в результате операции
|
||||
над числами разных типов получается число,
|
||||
имеющее более сложный тип из тех, которые участвуют в операции."""
|
||||
print(mnogo)
|
||||
Нетрудно заметить , что в результате операции
|
||||
над числами разных типов получается число,
|
||||
имеющее более сложный тип из тех, которые участвуют в операции.
|
||||
ss1[0]
|
||||
'Э'
|
||||
ss1[8]
|
||||
'р'
|
||||
ss1[-2]
|
||||
'о'
|
||||
ss1[6:9]
|
||||
'стр'
|
||||
ss1[13:]
|
||||
'символов'
|
||||
ss1[:13]
|
||||
'Это - строка '
|
||||
ss1[5:-8]
|
||||
' строка '
|
||||
ss1[3:17:2]
|
||||
' тоасм'
|
||||
ss1[17:3:-2]
|
||||
'омсаот '
|
||||
ss1[-4:3:-2]
|
||||
'омсаот '
|
||||
ss1[4]='='
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#78>", line 1, in <module>
|
||||
ss1[4]='='
|
||||
TypeError: 'str' object does not support item assignment
|
||||
ss1=ss1[:4]+'='+ss1[5:]
|
||||
ss1
|
||||
'Это = строка символов'
|
||||
ss1b[-1]
|
||||
'.'
|
||||
ss1b_cut = ss1b [::-1]
|
||||
ss1b_cut
|
||||
'.Е.Д вопащолоГ \n :тувоз янеМ'
|
||||
num10 = 26
|
||||
type(num10)
|
||||
<class 'int'>
|
||||
num16 = hex(num10)
|
||||
num16
|
||||
'0x1a'
|
||||
type(num16)
|
||||
<class 'str'>
|
||||
str1 = str(num10) + ' в десятичной - это ' + str(num16) + ' в шестнадцатеричной '
|
||||
str1
|
||||
'26 в десятичной - это 0x1a в шестнадцатеричной '
|
||||
str1[5:16:3]
|
||||
'дячй'
|
||||
spis1=[111,'Spisok',5-9j]
|
||||
spis1
|
||||
[111, 'Spisok', (5-9j)]
|
||||
stup=[0,0,1,1,1,1,1,1,1]
|
||||
stup
|
||||
[0, 0, 1, 1, 1, 1, 1, 1, 1]
|
||||
spis=[1,2,3,4,
|
||||
5,6,7,
|
||||
8,9,10]
|
||||
spis
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
spis1 [-1]
|
||||
(5-9j)
|
||||
stup [-8 :: 2]
|
||||
[0, 1, 1, 1]
|
||||
spis1[1]='Список'
|
||||
spis1
|
||||
[111, 'Список', (5-9j)]
|
||||
len(spis1)
|
||||
3
|
||||
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
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
spis1+['New item']
|
||||
[111, 'Список', (5-9j), 'New item', 'New item']
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
spis1 += ss1b
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
spis1 = [111, 'Список', (5-9j), 'New item']
|
||||
spis1.append(ss1b)
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
spis1.pop(1)
|
||||
'Список'
|
||||
spis1
|
||||
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
spis1.pop(7)
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#116>", line 1, in <module>
|
||||
spis1.pop(7)
|
||||
IndexError: pop index out of range
|
||||
help(spis1.insert)
|
||||
Help on built-in function insert:
|
||||
|
||||
insert(index, object, /) method of builtins.list instance
|
||||
Insert object before index.
|
||||
|
||||
spis1.insert(2, "hello")
|
||||
spis1
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
spis1.insert(8, "test")
|
||||
spis1
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
help(spis1.remove)
|
||||
Help on built-in function remove:
|
||||
|
||||
remove(value, /) method of builtins.list instance
|
||||
Remove first occurrence of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
spis1.remove(111)
|
||||
spis1
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
spis1.remove('kitten')
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#125>", line 1, in <module>
|
||||
spis1.remove('kitten')
|
||||
ValueError: list.remove(x): x not in list
|
||||
help(spis1.extend)
|
||||
Help on built-in function extend:
|
||||
|
||||
extend(iterable, /) method of builtins.list instance
|
||||
Extend list by appending elements from the iterable.
|
||||
|
||||
end1 = [123, "mew", (1,2)]
|
||||
spis1.extend(end1)
|
||||
spis1
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
help(spis1.clear)
|
||||
Help on built-in function clear:
|
||||
|
||||
clear() method of builtins.list instance
|
||||
Remove all items from list.
|
||||
|
||||
end1.clear()
|
||||
end1
|
||||
[]
|
||||
help(spis1.sort)
|
||||
Help on built-in function sort:
|
||||
|
||||
sort(*, key=None, reverse=False) method of builtins.list instance
|
||||
Sort the list in ascending order and return None.
|
||||
|
||||
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
|
||||
order of two equal elements is maintained).
|
||||
|
||||
If a key function is given, apply it once to each list item and sort them,
|
||||
ascending or descending, according to their function values.
|
||||
|
||||
The reverse flag can be set to sort in descending order.
|
||||
|
||||
end1 = [5, 6, 9.99999, 384, 0, -5]
|
||||
end1.sort(key = abs, reverse = True)
|
||||
end1
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
help(end1.copy)
|
||||
Help on built-in function copy:
|
||||
|
||||
copy() method of builtins.list instance
|
||||
Return a shallow copy of the list.
|
||||
|
||||
endcopy = end1.copy()
|
||||
endcopy
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
help(endcopy.index)
|
||||
Help on built-in function index:
|
||||
|
||||
index(value, start=0, stop=9223372036854775807, /) method of builtins.list instance
|
||||
Return first index of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
endcopy.index(0)
|
||||
5
|
||||
endopy.index("lalala")
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#142>", line 1, in <module>
|
||||
endopy.index("lalala")
|
||||
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
|
||||
help(endcopy.count)
|
||||
Help on built-in function count:
|
||||
|
||||
count(value, /) method of builtins.list instance
|
||||
Return number of occurrences of value.
|
||||
|
||||
endcopy.count(5)
|
||||
1
|
||||
endcopy.count(666666)
|
||||
0
|
||||
spis2=[spis1,[4,5,6,7]]
|
||||
spis2
|
||||
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
spis2[0][1]
|
||||
'hello'
|
||||
spis2[0][1]=78
|
||||
spis2
|
||||
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
spis1
|
||||
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
kort1=(222,'Kortezh',77+8j)
|
||||
kort1= kort1+(1,2)
|
||||
kort1
|
||||
(222, 'Kortezh', (77+8j), 1, 2)
|
||||
kort1= kort1+(ss1b,)
|
||||
kort1
|
||||
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
kort2=kort1[:2]+kort1[3:]
|
||||
kort2
|
||||
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
kort1.index(2)
|
||||
4
|
||||
kort1.count(222)
|
||||
1
|
||||
kort1[2]=90
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#161>", line 1, in <module>
|
||||
kort1[2]=90
|
||||
TypeError: 'tuple' object does not support item assignment
|
||||
kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
|
||||
kortstr
|
||||
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
|
||||
type(kortstr[5])
|
||||
<class 'tuple'>
|
||||
type(kortstr[4])
|
||||
<class 'list'>
|
||||
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||
dic1
|
||||
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
|
||||
dic1[1]
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#168>", line 1, in <module>
|
||||
dic1[1]
|
||||
KeyError: 1
|
||||
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)])
|
||||
dic4
|
||||
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
|
||||
dic5
|
||||
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
|
||||
count_list = ["one", "two", "three", "four", "five"]
|
||||
terms_dict = dict(zip(count_list, terms_tuple))
|
||||
terms_dict
|
||||
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
|
||||
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
|
||||
mnoz1
|
||||
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
|
||||
len(mnoz1)
|
||||
4
|
||||
'датчик' in mnoz1
|
||||
True
|
||||
mnoz1.add('реле')
|
||||
mnoz1.remove('линия связи')
|
||||
mnoz1
|
||||
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
|
||||
mnoz2 = {'спичка', 15, False, 'gear'}
|
||||
mnoz2
|
||||
{False, 'спичка', 'gear', 15}
|
||||
len(mnoz2)
|
||||
4
|
||||
mnoz2.remove(15)
|
||||
mnoz2
|
||||
{False, 'спичка', 'gear'}
|
||||
@ -0,0 +1,683 @@
|
||||
# Отчет по теме 2
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>>import os
|
||||
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
|
||||
|
||||
# 2. Изучение простых объектов
|
||||
|
||||
Создадим два простых объекта - переменные f1 и f2. Это можно сделать в одну строку:
|
||||
|
||||
>>>f1 = 16; f2 = 3
|
||||
|
||||
Можно вывести эти переменные через запятую. Тогда они будут отображены как кортеж:
|
||||
|
||||
>>>f1, f2
|
||||
(16, 3)
|
||||
|
||||
Или через точку с запятой. Тогда друг за другом:
|
||||
|
||||
>>>f1; f2
|
||||
16
|
||||
3
|
||||
|
||||
Функция dir() покажет, какие объекты находятся в текущем рабочем пространстве:
|
||||
|
||||
>>>dir()
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
|
||||
|
||||
Еще эта функция может показать атрибуты объекта:
|
||||
|
||||
>>>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_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
|
||||
|
||||
Для определения классовой принадлежности любого объекта следует использовать функцию type():
|
||||
|
||||
>>>type(f2)
|
||||
<class 'int'>
|
||||
|
||||
Удалим объекты из рабочего пространства:
|
||||
|
||||
>>>del f1, f2
|
||||
>>>dir()
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
|
||||
|
||||
# 3. Изучение правила именования объектов в Python.
|
||||
|
||||
>>>gg1 = 1.6
|
||||
>>>gg1
|
||||
1.6
|
||||
>>>hh1 = 'example'
|
||||
>>>hh1
|
||||
'example'
|
||||
>>>73sr = 3
|
||||
SyntaxError: invalid decimal literal --- ошибка, т.к. имя не может начинаться с числа
|
||||
>>>and = 7
|
||||
SyntaxError: invalid syntax --- ошибка, т.к. имя не может совпадать с ключевым словом языка
|
||||
|
||||
# 4. Вывод списка ключевых слов с помощью инструкции
|
||||
|
||||
>>>import keyword
|
||||
>>>keyword.kwlist
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
|
||||
Просмотрим список, сохраним его в переменной с некоторым именем.Проверим его тип.
|
||||
|
||||
>>>kwd = keyword.kwlist
|
||||
>>>kwd
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
>>>type(kwd)
|
||||
<class 'list'>
|
||||
|
||||
# 5. Ввод списка встроенных идентификаторов с помощью инструкций
|
||||
|
||||
>>>import builtins
|
||||
>>>dir(builtins)
|
||||
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', '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', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', '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']
|
||||
|
||||
Изучим назначение функций: abs, len, max, min, pow, round, sorted, sum, zip:
|
||||
|
||||
Взятие модуля:
|
||||
|
||||
>>>abs(-5)
|
||||
5
|
||||
|
||||
Длина списка:
|
||||
|
||||
>>>len([1, 2, 3])
|
||||
3
|
||||
|
||||
Выбор максимального и минимального значения:
|
||||
|
||||
>>>max(14, 8)
|
||||
14
|
||||
>>>min (15, 0)
|
||||
0
|
||||
|
||||
Возведение в степень:
|
||||
|
||||
>>>pow (5, 2)
|
||||
25
|
||||
|
||||
Округление до целого:
|
||||
|
||||
>>>round (3,124)
|
||||
3
|
||||
|
||||
Сортировка по возрастанию(можно применить reverse = True для сортировки по убыванию):
|
||||
|
||||
>>>sorted ([3, 7, 9, 75, 0, -1])
|
||||
[-1, 0, 3, 7, 9, 75]
|
||||
|
||||
Суммирование:
|
||||
|
||||
>>>sum ([7, 3, 5])
|
||||
15
|
||||
|
||||
Объединение последовательности объектов в последовательность кортежей:
|
||||
|
||||
>>>list1 = [1, 2, 3]
|
||||
>>>list2 = [4, 5, 6]
|
||||
>>>zip (list1, list2)
|
||||
<zip object at 0x0000019F7EA6E700>
|
||||
>>> result=zip (list1, list2)
|
||||
>>> list(result)
|
||||
[(1, 4), (2, 5), (3, 6)]
|
||||
|
||||
|
||||
# 6. Пример того, что Python - регистрочувствительный язык.
|
||||
|
||||
>>>Gg1 = 45
|
||||
>>>gg1, Gg1
|
||||
(1.6, 45)
|
||||
>>>gg1 == Gg1
|
||||
False
|
||||
|
||||
Таким образом, большая и маленькая буква одной и той же буквы в начале имеют различие в имени переменной, так как получилось два разных объекта
|
||||
|
||||
# 7. Изучение простых базовых типов объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str).
|
||||
|
||||
## 7.1.Логический тип.
|
||||
|
||||
>>>bb1 = True
|
||||
>>>bb2 = False
|
||||
>>>type(bb1)
|
||||
<class 'bool'>
|
||||
|
||||
## 7.2. Другие простые типы.
|
||||
|
||||
Целое число (десятичное)
|
||||
|
||||
>>>ii1=-1234567890
|
||||
>>>type(ii1)
|
||||
<class 'int'>
|
||||
|
||||
Экспоненциальная форма записи числа
|
||||
|
||||
>>>ff1 = 8.987e-12
|
||||
>>>type(ff1)
|
||||
<class 'float'>
|
||||
|
||||
Двоичное число (префикс 0b - binary)
|
||||
|
||||
>>>dv1 = 0b1100101
|
||||
>>>type(dv1)
|
||||
<class 'int'>
|
||||
|
||||
Восьмеричное число (0о - octal)
|
||||
|
||||
>>>vsm1 = 0o52765
|
||||
>>>type(vsm1)
|
||||
<class 'int'>
|
||||
|
||||
Шестнадцатеричное число (0х - hexadecimal)
|
||||
|
||||
>>>shest1 = 0x7109af6
|
||||
>>>type(shest1)
|
||||
<class 'int'>
|
||||
|
||||
Комплексное число
|
||||
|
||||
>>>cc1 = 2 - 3j
|
||||
>>>type(cc1)
|
||||
<class 'complex'>
|
||||
|
||||
Создание комплексного числа
|
||||
|
||||
>>>a = 3.67
|
||||
>>>b = 0.45
|
||||
>>>cc2 = complex (a, b)
|
||||
>>>cc2
|
||||
(3.67+0.45j)
|
||||
>>>type (cc2)
|
||||
<class 'complex'>
|
||||
|
||||
## 7.3. Строка символов.
|
||||
|
||||
Одинарные и двойные кавычки взаимозаменяемы, но если открыта одинарная, то закрыта тоже
|
||||
должна быть одинарная
|
||||
|
||||
>>>ss1 = "Это - строка символов"
|
||||
>>>ss2 = 'Это - строка символов'
|
||||
>>>ss1 == ss2
|
||||
True
|
||||
|
||||
Внутри строки символов можно использовать, так называемые, «экранированные последовательности, начинающиеся со знака «\»(обратный слеш), например, \, ', ", \t, \n и другие. Пример:
|
||||
|
||||
>>>ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
|
||||
>>>print(ss1a)
|
||||
Это - " строка символов ",
|
||||
выводимая на двух строках
|
||||
|
||||
Создадим строку по шаблону:
|
||||
|
||||
>>>ss1b = 'Меня зовут: \n Голощапов Д.Е.'
|
||||
>>>print(ss1b)
|
||||
Меня зовут:
|
||||
Голощапов Д.Е.
|
||||
|
||||
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например:
|
||||
|
||||
>>>mnogo="""Нетрудно заметить , что в результате операции
|
||||
над числами разных типов получается число,
|
||||
имеющее более сложный тип из тех, которые участвуют в операции."""
|
||||
>>>print(mnogo)
|
||||
Нетрудно заметить , что в результате операции
|
||||
над числами разных типов получается число,
|
||||
имеющее более сложный тип из тех, которые участвуют в операции.
|
||||
|
||||
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки. Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например:
|
||||
|
||||
>>>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]
|
||||
'омсаот '
|
||||
|
||||
При замене 17 на -4 получается такой же результат:
|
||||
|
||||
>>>ss1[-4:3:-2]
|
||||
'омсаот '
|
||||
|
||||
Строка является неизменяемым объектом. Попробуем, например, инструкцию
|
||||
|
||||
>>>ss1[4]='='
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#78>", line 1, in <module>
|
||||
ss1[4]='='
|
||||
TypeError: 'str' object does not support item assignment
|
||||
|
||||
Однако, можно это сделать по-другому, переопределив её:
|
||||
|
||||
>>>ss1=ss1[:4]+'='+ss1[5:]
|
||||
>>>ss1
|
||||
'Это = строка символов'
|
||||
|
||||
С использованием ранее созданной строки ss1b попробуем создать объекты с разными срезами исходной строки.
|
||||
|
||||
>>>ss1b[-1]
|
||||
'.'
|
||||
>>>ss1b_cut = ss1b [::-1]
|
||||
>>>ss1b_cut
|
||||
'.Е.Д вопащолоГ \n :тувоз янеМ'
|
||||
|
||||
Самостоятельное создание объектов разных типов. Отображение типов и значений созданных объектов.
|
||||
|
||||
>>>num10 = 26
|
||||
>>>type(num10)
|
||||
<class 'int'>
|
||||
>>>num16 = hex(num10)
|
||||
>>>num16
|
||||
'0x1a'
|
||||
>>>type(num16)
|
||||
<class 'str'>
|
||||
|
||||
# 8. Списки (list), кортежи (tuple), словари (dict), множества (set).
|
||||
|
||||
## 8.1. Список list - изменяемый тип данных. Это упорядоченная последовательность из элементов
|
||||
одного или разных типов.
|
||||
|
||||
Пример списка с 3 элементами разных типов:
|
||||
|
||||
>>>spis1=[111,'Spisok',5-9j]
|
||||
>>>spis1
|
||||
[111, 'Spisok', (5-9j)]
|
||||
|
||||
Еще пример: список, содержащий последовательность отсчетов сигнала в виде «единичной ступеньки»:
|
||||
|
||||
>>>stup=[0,0,1,1,1,1,1,1,1]
|
||||
>>>stup
|
||||
[0, 0, 1, 1, 1, 1, 1, 1, 1]
|
||||
|
||||
Список можно вводить на нескольких строках. При этом список будет считаться незавершенным, пока не будет введена закрывающая квадратная скобка, например:
|
||||
|
||||
>>>spis=[1,2,3,4,
|
||||
5,6,7,
|
||||
8,9,10]
|
||||
>>>spis
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
|
||||
При работе с элементами списка можно использовать индексы точно так же, как это делали с элементами символьной строки, например, ссылка на последний элемент списка:
|
||||
|
||||
>>>spis1 [-1]
|
||||
(5-9j)
|
||||
или
|
||||
>>>stup [-8 :: 2]
|
||||
[0, 1, 1, 1]
|
||||
|
||||
Проверим возможность изменения списка, например:
|
||||
|
||||
>>>spis1[1]='Список'
|
||||
>>>spis1
|
||||
[111, 'Список', (5-9j)]
|
||||
|
||||
Текущее число элементов в списке можно узнать с помощью функции len():
|
||||
|
||||
>>>len(spis1)
|
||||
3
|
||||
|
||||
Методы объекта находятся в списке его атрибутов, который выводится с помощью уже известной функции dir(). Описание метода можно вывести с помощью функции help() по образцу
|
||||
|
||||
>>>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
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
>>>spis1+['New item']
|
||||
[111, 'Список', (5-9j), 'New item', 'New item']
|
||||
>>>spis1
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
|
||||
Обратим внимание на то, что в этой инструкции новый список только отображается, но не сохраняется.
|
||||
|
||||
Добавим в конец списка spis1 строку ss1b и отобразите список:
|
||||
|
||||
>>>spis1 += ss1b
|
||||
>>>spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
>>>spis1 = [111, 'Список', (5-9j), 'New item']
|
||||
>>>spis1.append(ss1b)
|
||||
>>>spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
Удаление элемента:
|
||||
|
||||
>>>spis1.pop(1)
|
||||
'Список'
|
||||
>>>spis1
|
||||
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index:
|
||||
|
||||
Для insert (Вставка элемента в определенное место по индексу):
|
||||
|
||||
>>>help(spis1.insert)
|
||||
Help on built-in function insert:
|
||||
|
||||
insert(index, object, /) method of builtins.list instance
|
||||
Insert object before index.
|
||||
|
||||
>>>spis1.insert(2, "hello")
|
||||
>>>spis1
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
>>>spis1.insert(8, "test")
|
||||
>>>spis1
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
|
||||
Для remove (Удаление элемента по значению):
|
||||
|
||||
>>>help(spis1.remove)
|
||||
Help on built-in function remove:
|
||||
|
||||
remove(value, /) method of builtins.list instance
|
||||
Remove first occurrence of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
>>>spis1.remove(111)
|
||||
>>>spis1
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
>>>spis1.remove('kitten')
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#125>", line 1, in <module>
|
||||
|
||||
Для extend (Добавление элементов объекта в конец другого объекта):
|
||||
|
||||
>>>help(spis1.extend)
|
||||
Help on built-in function extend:
|
||||
|
||||
extend(iterable, /) method of builtins.list instance
|
||||
Extend list by appending elements from the iterable.
|
||||
|
||||
>>>end1 = [123, "mew", (1,2)]
|
||||
>>>spis1.extend(end1)
|
||||
>>>spis1
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
|
||||
Для clear (Полное очищение списка):
|
||||
|
||||
>>>help(spis1.clear)
|
||||
Help on built-in function clear:
|
||||
|
||||
clear() method of builtins.list instance
|
||||
Remove all items from list.
|
||||
|
||||
>>>end1.clear()
|
||||
>>>end1
|
||||
[]
|
||||
|
||||
Для sort (Сортировка списка без создания нового объекта):
|
||||
|
||||
>>>help(spis1.sort)
|
||||
Help on built-in function sort:
|
||||
|
||||
sort(*, key=None, reverse=False) method of builtins.list instance
|
||||
Sort the list in ascending order and return None.
|
||||
|
||||
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
|
||||
order of two equal elements is maintained).
|
||||
|
||||
If a key function is given, apply it once to each list item and sort them,
|
||||
ascending or descending, according to their function values.
|
||||
|
||||
The reverse flag can be set to sort in descending order.
|
||||
|
||||
>>>end1 = [5, 6, 9.99999, 384, 0, -5]
|
||||
>>>end1.sort(key = abs, reverse = True)
|
||||
>>>end1
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
|
||||
Для copy (Создание копии списка):
|
||||
|
||||
>>>help(end1.copy)
|
||||
Help on built-in function copy:
|
||||
|
||||
copy() method of builtins.list instance
|
||||
Return a shallow copy of the list.
|
||||
|
||||
>>>endcopy = end1.copy()
|
||||
>>>endcopy
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
|
||||
Для index (Поиск индекса по значению):
|
||||
|
||||
>>>help(endcopy.index)
|
||||
Help on built-in function index:
|
||||
|
||||
index(value, start=0, stop=9223372036854775807, /) method of builtins.list instance
|
||||
Return first index of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
>>>endcopy.index(0)
|
||||
5
|
||||
>>>endopy.index("lalala")
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#142>", line 1, in <module>
|
||||
endopy.index("lalala")
|
||||
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
|
||||
|
||||
Для count (Подсчет количества элементов по значению):
|
||||
|
||||
>>>help(endcopy.count)
|
||||
Help on built-in function count:
|
||||
|
||||
count(value, /) method of builtins.list instance
|
||||
Return number of occurrences of value.
|
||||
|
||||
>>>endcopy.count(5)
|
||||
1
|
||||
>>>endcopy.count(666666)
|
||||
0
|
||||
|
||||
Списки могут быть вложенными:
|
||||
|
||||
>>>spis2=[spis1,[4,5,6,7]]
|
||||
>>>spis2
|
||||
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
|
||||
Обращение к элементам вложенного списка:
|
||||
|
||||
>>>spis2[0][1]
|
||||
'hello'
|
||||
|
||||
Изменение элемента вложенного списка:
|
||||
|
||||
>>>spis2[0][1]=78
|
||||
>>>spis2
|
||||
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
>>>spis1
|
||||
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
|
||||
Видим, что spis1 тоже изменился. Упоминая spis1 в строке spis2=[spis1,[4,5,6,7]] мы не создаем копию spis1, поэтому его изменения в составе spis2 отображаются на исходном spis1.
|
||||
|
||||
Создание своего списка - объекта:
|
||||
|
||||
>>>spis3 = [100, 'Test', True, spis1]
|
||||
>>>spis3
|
||||
[100, 'Test', True, [(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]]
|
||||
|
||||
## 8.2.Кортеж: последовательность как список, но неизменяемая как строка.
|
||||
|
||||
Примеры операций с кортежами: создание кортежа:
|
||||
|
||||
>>>kort1=(222,'Kortezh',77+8j)
|
||||
|
||||
Изменить кортеж нельзя, но можно его переопределить:
|
||||
|
||||
>>>kort1= kort1+(1,2)
|
||||
>>>kort1
|
||||
(222, 'Kortezh', (77+8j), 1, 2)
|
||||
|
||||
Если надо добавить еще один элемент в кортеж:
|
||||
|
||||
>>>kort1= kort1+(ss1b,)
|
||||
>>>kort1
|
||||
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
|
||||
Теперь переопределим кортеж с удалением комплексного элемента:
|
||||
|
||||
>>>kort2=kort1[:2]+kort1[3:]
|
||||
>>>kort2
|
||||
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
|
||||
Два важных метода кортежа (они есть также и у списков):
|
||||
|
||||
• Определение индекса заданного элемента:
|
||||
|
||||
>>>kort1.index(2)
|
||||
4
|
||||
|
||||
• Подсчет числа вхождений заданного элемента в кортеже:
|
||||
|
||||
>>>kort1.count(222)
|
||||
1
|
||||
|
||||
Методов append и pop у кортежей нет, т.к. они являются неизменяемыми. Попробуем операцию замены элемента кортежа:
|
||||
|
||||
>>>kort1[2]=90
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#161>", line 1, in <module>
|
||||
kort1[2]=90
|
||||
TypeError: 'tuple' object does not support item assignment
|
||||
|
||||
Создание объекта-кортежа с элементами разных типов: число, строка, список, кортеж.
|
||||
|
||||
>>>kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
|
||||
>>>kortstr
|
||||
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
|
||||
>>>type(kortstr[5])
|
||||
<class 'tuple'>
|
||||
>>>type(kortstr[4])
|
||||
<class 'list'>
|
||||
|
||||
## 8.3. Словарь (dictionary) - содержит в себе совокупность пар
|
||||
"ключ (key) (неизменяемый)": "значение (value) (любого типа)"
|
||||
|
||||
Пример создания словаря:
|
||||
|
||||
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||
>>>dic1
|
||||
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
|
||||
|
||||
Обращение к элементам словаря не по индексам, а по ключам:
|
||||
|
||||
>>>dic1['Orel']
|
||||
56
|
||||
|
||||
Пополнение словаря (добавление элемента, изменение словаря):
|
||||
|
||||
>>>dic1['Pskov']=78
|
||||
>>>dic1
|
||||
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
|
||||
|
||||
Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы keys или values, создающие списки, соответственно, ключей или значений из словаря. Функция sorted позволяет увидеть список упорядоченным по ключам или по значениям:
|
||||
|
||||
>>>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'
|
||||
|
||||
Создадим более сложный словарь из списка с элементами-кортежами с использованием функции dict:
|
||||
|
||||
>>>dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
|
||||
>>>dic4
|
||||
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
>>>dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
|
||||
>>>dic5
|
||||
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
|
||||
Самостоятельно придумайте объект-кортеж с 7 элементами и объект-список с 5 элементами и попробуйте создать из них словарь с помощью функций dict и zip. Сколько элементов в получившемся словаре? Объясните это число.
|
||||
|
||||
>>>terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
|
||||
>>>count_list = ["one", "two", "three", "four", "five"]
|
||||
>>>terms_dict = dict(zip(count_list, terms_tuple))
|
||||
>>>terms_dict
|
||||
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
|
||||
|
||||
Как мы видим длина словаря составляет 5 объектов. Это связано с функцией zip, которая делает так, что длина итогового объекта будет соответствовать минимальной длине составляющего.
|
||||
|
||||
## 8.4. Множество: состоят из НЕповторяющихся неизменяемых элементов
|
||||
|
||||
Пример создания множества:
|
||||
|
||||
>>>mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
|
||||
>>>mnoz1
|
||||
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
|
||||
|
||||
В созданном множестве дубликаты элементов были автоматически удалены.
|
||||
|
||||
Некоторые операции с множеством:
|
||||
|
||||
определение числа элементов
|
||||
|
||||
>>>len(mnoz1)
|
||||
4
|
||||
|
||||
проверка наличия элемента во множестве
|
||||
|
||||
>>>'датчик' in mnoz1
|
||||
True
|
||||
|
||||
добавление и удаление элемента
|
||||
|
||||
>>>mnoz1.add('реле')
|
||||
>>>mnoz1.remove('линия связи')
|
||||
>>>mnoz1
|
||||
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
|
||||
|
||||
Объект-множество с элементами разных типов
|
||||
|
||||
>>>mnoz2 = {'спичка', 15, False, 'gear'}
|
||||
>>>mnoz2
|
||||
{False, 'спичка', 'gear', 15}
|
||||
>>>len(mnoz2)
|
||||
4
|
||||
>>>mnoz2.remove(15)
|
||||
mnoz2
|
||||
{False, 'спичка', 'gear'}
|
||||
|
||||
# 9. Завершение работы в среде IDLE.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,683 @@
|
||||
# Отчет по теме 2
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Пункт 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
import os
|
||||
os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA2')
|
||||
|
||||
# Пункт 2. Изучение простых объектов
|
||||
|
||||
Создадим два простых объекта - переменные f1 и f2. Это можно сделать в одну строку:
|
||||
|
||||
f1 = 16; f2 = 3
|
||||
|
||||
Можно вывести эти переменные через запятую. Тогда они будут отображены как кортеж:
|
||||
|
||||
f1, f2
|
||||
(16, 3)
|
||||
|
||||
Или через точку с запятой. Тогда друг за другом:
|
||||
|
||||
f1; f2
|
||||
16
|
||||
3
|
||||
|
||||
Функция dir() покажет, какие объекты находятся в текущем рабочем пространстве:
|
||||
|
||||
dir()
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os']
|
||||
|
||||
Еще эта функция может показать атрибуты объекта:
|
||||
|
||||
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_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
|
||||
|
||||
Для определения классовой принадлежности любого объекта следует использовать функцию type():
|
||||
|
||||
type(f2)
|
||||
<class 'int'>
|
||||
|
||||
Удалим объекты из рабочего пространства:
|
||||
|
||||
del f1, f2
|
||||
dir()
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
|
||||
|
||||
# Пункт 3. Изучение правила именования объектов в Python.
|
||||
|
||||
gg1 = 1.6
|
||||
gg1
|
||||
1.6
|
||||
hh1 = 'example'
|
||||
hh1
|
||||
'example'
|
||||
73sr = 3
|
||||
SyntaxError: invalid decimal literal --- ошибка, т.к. имя не может начинаться с числа
|
||||
and = 7
|
||||
SyntaxError: invalid syntax --- ошибка, т.к. имя не может совпадать с ключевым словом языка
|
||||
|
||||
# Пункт 4. Вывод списка ключевых слов с помощью инструкции
|
||||
|
||||
import keyword
|
||||
keyword.kwlist
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
|
||||
Просмотрим список, сохраним его в переменной с некоторым именем.Проверим его тип.
|
||||
|
||||
kwd = keyword.kwlist
|
||||
kwd
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
type(kwd)
|
||||
<class 'list'>
|
||||
|
||||
# Пункт 5. Ввод списка встроенных идентификаторов с помощью инструкций
|
||||
|
||||
import builtins
|
||||
dir(builtins)
|
||||
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', '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', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', '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']
|
||||
|
||||
Изучим назначение функций: abs, len, max, min, pow, round, sorted, sum, zip:
|
||||
|
||||
Взятие модуля:
|
||||
|
||||
abs(-5)
|
||||
5
|
||||
|
||||
Длина списка:
|
||||
|
||||
len([1, 2, 3])
|
||||
3
|
||||
|
||||
Выбор максимального и минимального значения:
|
||||
|
||||
max(14, 8)
|
||||
14
|
||||
min (15, 0)
|
||||
0
|
||||
|
||||
Возведение в степень:
|
||||
|
||||
pow (5, 2)
|
||||
25
|
||||
|
||||
Округление до целого:
|
||||
|
||||
round (3,124)
|
||||
3
|
||||
|
||||
Сортировка по возрастанию(можно применить reverse = True для сортировки по убыванию):
|
||||
|
||||
sorted ([3, 7, 9, 75, 0, -1])
|
||||
[-1, 0, 3, 7, 9, 75]
|
||||
|
||||
Суммирование:
|
||||
|
||||
sum ([7, 3, 5])
|
||||
15
|
||||
|
||||
Объединение объектов в кортеж (возвращается указатель на участок памяти):
|
||||
|
||||
list1 = [1, 2, 3]
|
||||
list2 = [4, 5, 6]
|
||||
zip (list1, list2)
|
||||
<zip object at 0x0000019F7EA6E700>
|
||||
|
||||
Это итератор - указатель на объект памяти.
|
||||
|
||||
# Пункт 6. Пример того, что Python - регистрочувствительный язык.
|
||||
|
||||
Gg1 = 45
|
||||
gg1, Gg1
|
||||
(1.6, 45)
|
||||
gg1 == Gg1
|
||||
False
|
||||
|
||||
# Пункт 7. Изучение простых базовых типов объектов: логический (bool), целый (int), вещественный (float), комплексный (complex), строка символов (str).
|
||||
|
||||
## 7.1.Логический тип.
|
||||
|
||||
bb1 = True
|
||||
bb2 = False
|
||||
type(bb1)
|
||||
<class 'bool'>
|
||||
|
||||
## 7.2. Другие простые типы.
|
||||
|
||||
Целое число (десятичное)
|
||||
|
||||
ii1=-1234567890
|
||||
type(ii1)
|
||||
<class 'int'>
|
||||
|
||||
Экспоненциальная форма записи числа
|
||||
|
||||
ff1 = 8.987e-12
|
||||
type(ff1)
|
||||
<class 'float'>
|
||||
|
||||
Двоичное число (префикс 0b - binary)
|
||||
|
||||
dv1 = 0b1100101
|
||||
type(dv1)
|
||||
<class 'int'>
|
||||
|
||||
Восьмеричное число (0о - octal)
|
||||
|
||||
vsm1 = 0o52765
|
||||
type(vsm1)
|
||||
<class 'int'>
|
||||
|
||||
Шестнадцатеричное число (0х - hexadecimal)
|
||||
|
||||
shest1 = 0x7109af6
|
||||
type(shest1)
|
||||
<class 'int'>
|
||||
|
||||
Комплексное число
|
||||
|
||||
cc1 = 2 - 3j
|
||||
type(cc1)
|
||||
<class 'complex'>
|
||||
|
||||
Создание комплексного числа
|
||||
|
||||
a = 3.67
|
||||
b = 0.45
|
||||
cc2 = complex (a, b)
|
||||
cc2
|
||||
(3.67+0.45j)
|
||||
type (cc2)
|
||||
<class 'complex'>
|
||||
|
||||
## 7.3. Строка символов.
|
||||
|
||||
Одинарные и двойные кавычки взаимозаменяемы, но если открыта одинарная, то закрыта тоже
|
||||
должна быть одинарная
|
||||
|
||||
ss1 = "Это - строка символов"
|
||||
ss2 = 'Это - строка символов'
|
||||
ss1 == ss2
|
||||
True
|
||||
|
||||
Внутри строки символов можно использовать, так называемые, «экранированные последовательности, начинающиеся со знака «\»(обратный слеш), например, \, ', ", \t, \n и другие. Пример:
|
||||
|
||||
ss1a="Это - \" строка символов \", \n \t выводимая на двух строках"
|
||||
print(ss1a)
|
||||
Это - " строка символов ",
|
||||
выводимая на двух строках
|
||||
|
||||
Создадим строку по шаблону:
|
||||
|
||||
ss1b = 'Меня зовут: \n Голощапов Д.Е.'
|
||||
print(ss1b)
|
||||
Меня зовут:
|
||||
Голощапов Д.Е.
|
||||
|
||||
Многострочные строки можно задавать в виде значения объекта с использованием тройных кавычек, например:
|
||||
|
||||
mnogo="""Нетрудно заметить , что в результате операции
|
||||
над числами разных типов получается число,
|
||||
имеющее более сложный тип из тех, которые участвуют в операции."""
|
||||
print(mnogo)
|
||||
Нетрудно заметить , что в результате операции
|
||||
над числами разных типов получается число,
|
||||
имеющее более сложный тип из тех, которые участвуют в операции.
|
||||
|
||||
При вводе такой строки символ приглашения в начале строки не появится, пока не будет вновь введены тройные кавычки. Можно обращаться к частям строки символов с использованием индексов символов по их порядку в строке. При этом надо учитывать, что нумерация символов начинается с 0. Например:
|
||||
|
||||
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]
|
||||
'омсаот '
|
||||
|
||||
При замене 17 на -4 получается такой же результат:
|
||||
|
||||
ss1[-4:3:-2]
|
||||
'омсаот '
|
||||
|
||||
Строка является неизменяемым объектом. Попробуем, например, инструкцию
|
||||
|
||||
ss1[4]='='
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#78>", line 1, in <module>
|
||||
ss1[4]='='
|
||||
TypeError: 'str' object does not support item assignment
|
||||
|
||||
Однако, можно это сделать по-другому, переопределив её:
|
||||
|
||||
ss1=ss1[:4]+'='+ss1[5:]
|
||||
ss1
|
||||
'Это = строка символов'
|
||||
|
||||
С использованием ранее созданной строки ss1b попробуем создать объекты с разными срезами исходной строки.
|
||||
|
||||
ss1b[-1]
|
||||
'.'
|
||||
ss1b_cut = ss1b [::-1]
|
||||
ss1b_cut
|
||||
'.Е.Д вопащолоГ \n :тувоз янеМ'
|
||||
|
||||
Самостоятельное создание объектов разных типов. Отображение типов и значений созданных объектов.
|
||||
|
||||
num10 = 26
|
||||
type(num10)
|
||||
<class 'int'>
|
||||
num16 = hex(num10)
|
||||
num16
|
||||
'0x1a'
|
||||
type(num16)
|
||||
<class 'str'>
|
||||
|
||||
# Пункт 8. Списки (list), кортежи (tuple), словари (dict), множества (set).
|
||||
|
||||
## 8.1. Список list - изменяемый тип данных. Это упорядоченная последовательность из элементов
|
||||
одного или разных типов.
|
||||
|
||||
Пример списка с 3 элементами разных типов:
|
||||
|
||||
spis1=[111,'Spisok',5-9j]
|
||||
spis1
|
||||
[111, 'Spisok', (5-9j)]
|
||||
|
||||
Еще пример: список, содержащий последовательность отсчетов сигнала в виде «единичной ступеньки»:
|
||||
|
||||
stup=[0,0,1,1,1,1,1,1,1]
|
||||
stup
|
||||
[0, 0, 1, 1, 1, 1, 1, 1, 1]
|
||||
|
||||
Список можно вводить на нескольких строках. При этом список будет считаться незавершенным, пока не будет введена закрывающая квадратная скобка, например:
|
||||
|
||||
spis=[1,2,3,4,
|
||||
5,6,7,
|
||||
8,9,10]
|
||||
spis
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
|
||||
При работе с элементами списка можно использовать индексы точно так же, как это делали с элементами символьной строки, например, ссылка на последний элемент списка:
|
||||
|
||||
spis1 [-1]
|
||||
(5-9j)
|
||||
или
|
||||
stup [-8 :: 2]
|
||||
[0, 1, 1, 1]
|
||||
|
||||
Проверим возможность изменения списка, например:
|
||||
|
||||
spis1[1]='Список'
|
||||
spis1
|
||||
[111, 'Список', (5-9j)]
|
||||
|
||||
Текущее число элементов в списке можно узнать с помощью функции len():
|
||||
|
||||
len(spis1)
|
||||
3
|
||||
|
||||
Методы объекта находятся в списке его атрибутов, который выводится с помощью уже известной функции dir(). Описание метода можно вывести с помощью функции help() по образцу
|
||||
|
||||
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
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
spis1+['New item']
|
||||
[111, 'Список', (5-9j), 'New item', 'New item']
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item']
|
||||
|
||||
Обратим внимание на то, что в этой инструкции новый список только отображается, но не сохраняется.
|
||||
|
||||
Добавим в конец списка spis1 строку ss1b и отобразите список:
|
||||
|
||||
spis1 += ss1b
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'М', 'е', 'н', 'я', ' ', 'з', 'о', 'в', 'у', 'т', ':', ' ', '\n', ' ', 'Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
spis1 = [111, 'Список', (5-9j), 'New item']
|
||||
spis1.append(ss1b)
|
||||
spis1
|
||||
[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
Удаление элемента:
|
||||
|
||||
spis1.pop(1)
|
||||
'Список'
|
||||
spis1
|
||||
[111, (5-9j), 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
|
||||
Также могут использоваться методы insert, remove, extend, clear, sort, reverse, copy, count, index:
|
||||
|
||||
Для insert (Вставка элемента в определенное место по индексу):
|
||||
|
||||
help(spis1.insert)
|
||||
Help on built-in function insert:
|
||||
|
||||
insert(index, object, /) method of builtins.list instance
|
||||
Insert object before index.
|
||||
|
||||
spis1.insert(2, "hello")
|
||||
spis1
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.']
|
||||
spis1.insert(8, "test")
|
||||
spis1
|
||||
[111, (5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
|
||||
Для remove (Удаление элемента по значению):
|
||||
|
||||
help(spis1.remove)
|
||||
Help on built-in function remove:
|
||||
|
||||
remove(value, /) method of builtins.list instance
|
||||
Remove first occurrence of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
spis1.remove(111)
|
||||
spis1
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test']
|
||||
spis1.remove('kitten')
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#125>", line 1, in <module>
|
||||
spis1.remove('kitten')
|
||||
ValueError: list.remove(x): x not in list
|
||||
|
||||
Для extend (Добавление элементов объекта в конец другого объекта):
|
||||
|
||||
help(spis1.extend)
|
||||
Help on built-in function extend:
|
||||
|
||||
extend(iterable, /) method of builtins.list instance
|
||||
Extend list by appending elements from the iterable.
|
||||
|
||||
end1 = [123, "mew", (1,2)]
|
||||
spis1.extend(end1)
|
||||
spis1
|
||||
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
|
||||
Для clear (Полное очищение списка):
|
||||
|
||||
help(spis1.clear)
|
||||
Help on built-in function clear:
|
||||
|
||||
clear() method of builtins.list instance
|
||||
Remove all items from list.
|
||||
|
||||
end1.clear()
|
||||
end1
|
||||
[]
|
||||
|
||||
Для sort ( Сортировка списка без создания нового объекта):
|
||||
|
||||
help(spis1.sort)
|
||||
Help on built-in function sort:
|
||||
|
||||
sort(*, key=None, reverse=False) method of builtins.list instance
|
||||
Sort the list in ascending order and return None.
|
||||
|
||||
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
|
||||
order of two equal elements is maintained).
|
||||
|
||||
If a key function is given, apply it once to each list item and sort them,
|
||||
ascending or descending, according to their function values.
|
||||
|
||||
The reverse flag can be set to sort in descending order.
|
||||
|
||||
end1 = [5, 6, 9.99999, 384, 0, -5]
|
||||
end1.sort(key = abs, reverse = True)
|
||||
end1
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
|
||||
Для copy (Создание копии списка):
|
||||
|
||||
help(end1.copy)
|
||||
Help on built-in function copy:
|
||||
|
||||
copy() method of builtins.list instance
|
||||
Return a shallow copy of the list.
|
||||
|
||||
endcopy = end1.copy()
|
||||
endcopy
|
||||
[384, 9.99999, 6, 5, -5, 0]
|
||||
|
||||
Для index (Поиск индекса по значению):
|
||||
|
||||
help(endcopy.index)
|
||||
Help on built-in function index:
|
||||
|
||||
index(value, start=0, stop=9223372036854775807, /) method of builtins.list instance
|
||||
Return first index of value.
|
||||
|
||||
Raises ValueError if the value is not present.
|
||||
|
||||
endcopy.index(0)
|
||||
5
|
||||
endopy.index("lalala")
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#142>", line 1, in <module>
|
||||
endopy.index("lalala")
|
||||
NameError: name 'endopy' is not defined. Did you mean: 'endcopy'?
|
||||
|
||||
Для count (Подсчет количества элементов по значению):
|
||||
|
||||
help(endcopy.count)
|
||||
Help on built-in function count:
|
||||
|
||||
count(value, /) method of builtins.list instance
|
||||
Return number of occurrences of value.
|
||||
|
||||
endcopy.count(5)
|
||||
1
|
||||
endcopy.count(666666)
|
||||
0
|
||||
|
||||
Списки могут быть вложенными:
|
||||
|
||||
spis2=[spis1,[4,5,6,7]]
|
||||
spis2
|
||||
[[(5-9j), 'hello', 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
|
||||
Обращение к элементам вложенного списка:
|
||||
|
||||
spis2[0][1]
|
||||
'hello'
|
||||
|
||||
Изменение элемента вложенного списка:
|
||||
|
||||
spis2[0][1]=78
|
||||
spis2
|
||||
[[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)], [4, 5, 6, 7]]
|
||||
spis1
|
||||
[(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]
|
||||
|
||||
Видим, что spis1 тоже изменился. Это происходит потому, что python работает не просто с объектами, а с ссылками на участки памяти. То есть, в Python списки передаются по ссылке, а не по значению.Упоминая spis1 в строке spis2=[spis1,[4,5,6,7]] мы не создаем копию spis1, а сообщаем именно тот список, поэтому его изменения в составе spis2 отображаются на исходном spis1.
|
||||
|
||||
Создание своего списка - объекта:
|
||||
|
||||
spis3 = [100, 'Test', True, spis1]
|
||||
spis3
|
||||
[100, 'Test', True, [(5-9j), 78, 'New item', 'Меня зовут: \n Голощапов Д.Е.', 'test', 123, 'mew', (1, 2)]]
|
||||
|
||||
## 8.2.Кортеж: последовательность как список, но неизменяемая как строка.
|
||||
|
||||
Примеры операций с кортежами: создание кортежа:
|
||||
|
||||
kort1=(222,'Kortezh',77+8j)
|
||||
|
||||
Изменить кортеж нельзя, но можно его переопределить:
|
||||
|
||||
kort1= kort1+(1,2)
|
||||
kort1
|
||||
(222, 'Kortezh', (77+8j), 1, 2)
|
||||
|
||||
Если надо добавить еще один элемент в кортеж:
|
||||
|
||||
kort1= kort1+(ss1b,)
|
||||
kort1
|
||||
(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
|
||||
Теперь переопределим кортеж с удалением комплексного элемента:
|
||||
|
||||
kort2=kort1[:2]+kort1[3:]
|
||||
kort2
|
||||
(222, 'Kortezh', 1, 2, 'Меня зовут: \n Голощапов Д.Е.')
|
||||
|
||||
Два важных метода кортежа (они есть также и у списков):
|
||||
|
||||
• Определение индекса заданного элемента:
|
||||
|
||||
kort1.index(2)
|
||||
4
|
||||
|
||||
• Подсчет числа вхождений заданного элемента в кортеже:
|
||||
|
||||
kort1.count(222)
|
||||
1
|
||||
|
||||
Методов append и pop у кортежей нет, т.к. они являются неизменяемыми. Попробуем операцию замены элемента кортежа:
|
||||
|
||||
kort1[2]=90
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#161>", line 1, in <module>
|
||||
kort1[2]=90
|
||||
TypeError: 'tuple' object does not support item assignment
|
||||
|
||||
Создание объекта-кортежа с элементами разных типов: число, строка, список, кортеж.
|
||||
|
||||
kortstr = ("h", "lambda", "always", 54, [1,2,3], (6,7))
|
||||
kortstr
|
||||
('h', 'lambda', 'always', 54, [1, 2, 3], (6, 7))
|
||||
type(kortstr[5])
|
||||
<class 'tuple'>
|
||||
type(kortstr[4])
|
||||
<class 'list'>
|
||||
|
||||
## 8.3. Словарь (dictionary) - содержит в себе совокупность пар
|
||||
"ключ (key) (неизменяемый)": "значение (value) (любого типа)"
|
||||
|
||||
Пример создания словаря:
|
||||
|
||||
dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||
dic1
|
||||
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
|
||||
|
||||
Обращение к элементам словаря не по индексам, а по ключам:
|
||||
|
||||
dic1['Orel']
|
||||
56
|
||||
|
||||
Пополнение словаря (добавление элемента, изменение словаря):
|
||||
|
||||
dic1['Pskov']=78
|
||||
dic1
|
||||
{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78}
|
||||
|
||||
Обратим внимание на то, что в силу неупорядоченности словаря при его выводе
|
||||
элементы могут располагаться не в том порядке, в каком они задавались при его формировании.
|
||||
Для того, чтобы получить перечень ключей или значений из словаря следует использовать методы keys или values, создающие списки, соответственно, ключей или значений из словаря. Функция sorted позволяет увидеть список упорядоченным по ключам или по значениям:
|
||||
|
||||
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'
|
||||
|
||||
Создадим более сложный словарь из списка с элементами-кортежами с использованием функции dict:
|
||||
|
||||
dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)])
|
||||
dic4
|
||||
{1: ['A', 'B', 'C'], 2: [4, 5], 'Q': 'Prim', 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b]))
|
||||
dic5
|
||||
{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n Голощапов Д.Е.'}
|
||||
|
||||
Самостоятельно придумайте объект-кортеж с 7 элементами и объект-список с 5 элементами и попробуйте создать из них словарь с помощью функций dict и zip. Сколько элементов в получившемся словаре? Объясните это число.
|
||||
|
||||
terms_tuple = ("mean", "median", "mode", "variance", "standard deviation", "correlation", "regression")
|
||||
count_list = ["one", "two", "three", "four", "five"]
|
||||
terms_dict = dict(zip(count_list, terms_tuple))
|
||||
terms_dict
|
||||
{'one': 'mean', 'two': 'median', 'three': 'mode', 'four': 'variance', 'five': 'standard deviation'}
|
||||
|
||||
Как мы видим длина словаря составляет 5 объектов. Это связано с функцией zip, которая делает так, что длина итогового объекта будет соответствовать минимальной длине составляющего.
|
||||
|
||||
## 8.4. Множество: состоят из НЕповторяющихся неизменяемых элементов
|
||||
|
||||
Пример создания множества:
|
||||
|
||||
mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
|
||||
mnoz1
|
||||
{'микропроцессор', 'датчик', 'линия связи', 'двигатель'}
|
||||
|
||||
В созданном множестве дубликаты элементов были автоматически удалены.
|
||||
|
||||
Некоторые операции с множеством:
|
||||
|
||||
определение числа элементов
|
||||
|
||||
len(mnoz1)
|
||||
4
|
||||
|
||||
проверка наличия элемента во множестве
|
||||
|
||||
'датчик' in mnoz1
|
||||
True
|
||||
|
||||
добавление и удаление элемента
|
||||
|
||||
mnoz1.add('реле')
|
||||
mnoz1.remove('линия связи')
|
||||
mnoz1
|
||||
{'реле', 'датчик', 'микропроцессор', 'двигатель'}
|
||||
|
||||
Объект-множество с элементами разных типов
|
||||
|
||||
mnoz2 = {'спичка', 15, False, 'gear'}
|
||||
mnoz2
|
||||
{False, 'спичка', 'gear', 15}
|
||||
len(mnoz2)
|
||||
4
|
||||
mnoz2.remove(15)
|
||||
mnoz2
|
||||
{False, 'спичка', 'gear'}
|
||||
|
||||
# Пункт 9. Завершение работы в среде IDLE.
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,70 @@
|
||||
# Общее контрольное задание по теме 2
|
||||
|
||||
## Задание
|
||||
|
||||
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
|
||||
|
||||
1.Создать переменную с именем familia и со значением - символьной строкой – своей фамилией в латинской транскрипции.
|
||||
|
||||
2.Создать переменную со значением, совпадающим с первой буквой из familia.
|
||||
|
||||
3.Создать переменную с именем sp_kw со значением – списком всей ключевых слов языка Python.
|
||||
|
||||
4.Удалите из списка sp_kw значение 'nonlocal'. Выводом списка в командном окне IDLE убедитесь, что это значение удалено из списка.
|
||||
|
||||
5.Создайте кортеж kort_nam с именами: вашим и еще 3-х студентов из вашей группы. Напишите инструкцию, позволяющую убедиться, что тип переменной – это tuple.
|
||||
|
||||
6.Напишите инструкцию, добавляющую в kort_nam имена еще двух студентов.
|
||||
|
||||
7.Напишите инструкцию, позволяющую определить, сколько раз в кортеже присутствуют студенты с именем «Дима».
|
||||
|
||||
8.Создайте словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
|
||||
|
||||
## Решение
|
||||
|
||||
1. Создаю переменную familia.
|
||||
|
||||
familia = 'Goloshchapov'
|
||||
|
||||
2. Создаю переменную, которая равна первой букве familia.
|
||||
|
||||
fam1 = familia[0]
|
||||
fam1
|
||||
'G'
|
||||
|
||||
3. Создаю переменную с именем sp_kw, значение – списк всех ключевых слов Python.
|
||||
|
||||
import keyword
|
||||
sp_kw = keyword.kwlist
|
||||
sp_kw
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
|
||||
4. Удаляю из списка sp_kw значение 'nonlocal', затем убедился, что это значение удалено из списка.
|
||||
|
||||
sp_kw.remove('nonlocal')
|
||||
sp_kw
|
||||
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
|
||||
|
||||
5. Создаю кортеж kort_nam с моим и еще 3-х студентов из группы именами. Проверяю, что тип переменной – это tuple.
|
||||
|
||||
kort_nam = ("Liza", "Alexander", "Danya", "Dima")
|
||||
type(kort_nam)
|
||||
<class 'tuple'>
|
||||
|
||||
6. Добавляю в kort_nam имена двух студентов.
|
||||
|
||||
kort_nam += ("Nikita", "Artem")
|
||||
kort_nam
|
||||
('Liza', 'Alexander', 'Danya', 'Dima', 'Nikita', 'Artem')
|
||||
|
||||
7. Определяю, сколько раз в кортеже присутствуют студенты с именем «Дима».
|
||||
|
||||
kort_nam.count("Dima")
|
||||
1
|
||||
|
||||
8. Создаю словарь dict_bas, в котором ключами являются русские названия типов переменных, использованных в предыдущих операторах, а значениями – ранее созданные переменные, соответствующие этим типам.
|
||||
|
||||
dict_bas = {"строка": familia, "символ": fam1, "список": sp_kw,
|
||||
"кортеж": kort_nam,}
|
||||
dict_bas
|
||||
{'строка': 'Goloshchapov', 'символ': 'G', 'список': ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'], 'кортеж': ('Liza', 'Alexander', 'Danya', 'Dima', 'Nikita', 'Artem')}
|
||||
@ -0,0 +1,32 @@
|
||||
# Индивидуальное контрольное задание по теме 2
|
||||
|
||||
Голощапов Дмитрий, A-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
1.Пусть предполагается выполнить инструкции
|
||||
|
||||
u=[1,2,3,4,5]
|
||||
|
||||
v=['a',u,'v',[11,12]]
|
||||
|
||||
print(v[1][3])
|
||||
|
||||
Не выполняя эти инструкции, подумайте, какое значение будет выведено на экран? Проверьте свое предположение вводом инструкций.
|
||||
|
||||
# Решение
|
||||
|
||||
Перед нами представлено 2 списка, при этом 1 из них является вложенным.
|
||||
|
||||
Так как индексация элементов в Python начинается с 0, мы обращаемся к элементу с индексом 1( это вложенный список). Потом мы обращаемся к элементу с 3 индексом этого вложенного списка.
|
||||
|
||||
В результате этого обращения выведется 4.
|
||||
|
||||
Подтвердим это путем выполнения этих команд в Python.
|
||||
|
||||
>>> u=[1,2,3,4,5]
|
||||
>>> v=['a',u,'v',[11,12]]
|
||||
>>> print(v[1][3])
|
||||
4
|
||||
|
||||
|
||||
@ -0,0 +1,644 @@
|
||||
# Отчет по теме 3
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>> import os
|
||||
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA3')
|
||||
|
||||
# 2 Преобразование базовых типов обьектов в другие типы
|
||||
|
||||
Было изучено, как преобразовывать обьекты одного типа, в обьекты другого типа.
|
||||
|
||||
# 2.1 Преобразование обьектов в логический тип данных
|
||||
|
||||
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты логического типа.
|
||||
|
||||
>>> logiz1=bool(56)
|
||||
>>> logiz2=bool(0)
|
||||
>>> logiz3=bool("Beta")
|
||||
>>> logiz4=bool("")
|
||||
>>> logiz1
|
||||
True
|
||||
>>> type(logiz1)
|
||||
<class 'bool'>
|
||||
|
||||
# 2.2 Преобразование обьектов в числовой тип данных
|
||||
|
||||
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты целого и вещественного типа int и float.
|
||||
|
||||
>>>tt1=int(198.6) #Отбрасывается дробная часть
|
||||
>>>tt1
|
||||
198
|
||||
>>>tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
|
||||
>>>tt2
|
||||
-76
|
||||
>>>tt3=int("B",16) #В шестнадцатиричной системе буква "В" соответствует числу 11
|
||||
>>>tt3
|
||||
11
|
||||
>>>tt4=int("71",8) #71 преобразуется в число в восьмеричной системе
|
||||
>>>tt4
|
||||
57
|
||||
>>>tt5=int("98.76") #Число представлено в виде строки, но само по себе оно относится к вещественным числам (типа float), поэтому сразу невозможно его преобразовать в целое. Для такого преобразования надо сначала переопределить его как float, а уже потом как int.
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#14>", line 1, in <module>
|
||||
tt5=int("98.76")
|
||||
ValueError: invalid literal for int() with base 10: '98.76'
|
||||
>>>flt1=float(789)
|
||||
>>>flt1
|
||||
789.0
|
||||
>>>flt2=float(-6.78e2)
|
||||
>>>flt2
|
||||
-678.0
|
||||
>>>flt3=float("Infinity")
|
||||
>>>flt3
|
||||
inf
|
||||
>>>flt4=float("-inf")
|
||||
>>>flt4
|
||||
-inf
|
||||
|
||||
# 2.3 Преобразование целочисленных обьектов в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратное представление
|
||||
|
||||
Были преобразованы целочисленных обьекты в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратно представлены в целочисленном виде.
|
||||
|
||||
>>>hh=123
|
||||
>>>dv1=bin(hh) #Преобразование в строку с двоичным представлением
|
||||
>>>vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
|
||||
>>>shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
|
||||
>>>dv1
|
||||
'0b1111011'
|
||||
>>>vos1
|
||||
'0o173'
|
||||
>>>shs1
|
||||
'0x7b'
|
||||
>>>int(dv1,2)
|
||||
123
|
||||
>>>int(vos1, 8)
|
||||
123
|
||||
>>>int(shs1, 16)
|
||||
123
|
||||
|
||||
# 3 Преобразование сложных типов обьектов в другие типы
|
||||
|
||||
# 3.1 Преобразование элементов в строку символов
|
||||
|
||||
В строку были преобразованы число, логическая переменная, список, кортеж и словарь.
|
||||
|
||||
>>>strk1=str(23.6)
|
||||
>>>strk1
|
||||
'23.6'
|
||||
>>>strk2=str(logiz3)
|
||||
>>>strk2
|
||||
'True'
|
||||
>>>strk3=str(["A","B","C"]) #Преобразуем список
|
||||
>>>strk3
|
||||
"['A', 'B', 'C']"
|
||||
>>>strk4=str(("A","B","C")) #Преобразуем кортеж
|
||||
>>>strk4
|
||||
"('A', 'B', 'C')"
|
||||
>>>strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
|
||||
>>>strk5
|
||||
"{'A': 1, 'B': 2, 'C': 9}"
|
||||
|
||||
# 3.2 Преобразование элементов в список
|
||||
|
||||
Были преобразованы в список строка символов, кортеж и словарь тремя способами (включая только ключи, только значения и ключи и значения вместе).
|
||||
|
||||
>>>spis1=list("Строка символов") #Заданная строка разделяется на символы
|
||||
>>>spis1
|
||||
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
|
||||
>>>spis2=list((124,236,-15,908)) #Кортеж превращается в список
|
||||
>>>spis2
|
||||
[124, 236, -15, 908]
|
||||
>>>spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
|
||||
>>>spis3
|
||||
['A', 'B', 'C']
|
||||
>>>spis3=list({"A":1,"B":2,"C":9}.values()) #Преобразование словаря в список по значениям
|
||||
>>>spis3
|
||||
[1, 2, 9]
|
||||
>>>spis3=list({"A":1,"B":2,"C":9}.items()) #Преобразование словаря в список ключи и значения
|
||||
>>>spis3
|
||||
[('A', 1), ('B', 2), ('C', 9)]
|
||||
|
||||
# 3.3 Преобразование элементов в кортеж
|
||||
|
||||
В кортеж были преобразованы строка, список и словарь.
|
||||
|
||||
>>>kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
|
||||
>>>kort7
|
||||
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
|
||||
>>>kort8=tuple(spis2) #Преобразование списка в кортеж
|
||||
>>>kort8
|
||||
(124, 236, -15, 908)
|
||||
>>>kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
|
||||
>>>kort9
|
||||
('A', 'B', 'C')
|
||||
|
||||
# 3.4 Удаление обьектов
|
||||
|
||||
Были удалены два обьекта и проверено их наличие. Так же самостоятельно была создана строка, которая была потом преобразована в список, затем список – в кортеж и, кортеж – в строку.
|
||||
|
||||
>>>del strk5, kort8
|
||||
>>>strk5
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#62>", line 1, in <module>
|
||||
strk5
|
||||
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
|
||||
>>>kort8
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#63>", line 1, in <module>
|
||||
kort8
|
||||
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
|
||||
>>> f_str="Голощапов Д.Е."
|
||||
>>> f_spis=list(f_str)
|
||||
>>> f_kort=tuple(f_spis)
|
||||
>>> f_sstr=str(f_kort)
|
||||
>>> f_spis
|
||||
['Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
>>> f_kort
|
||||
('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')
|
||||
>>> f_sstr
|
||||
"('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')"
|
||||
|
||||
# 4 Изучение арифметических операций
|
||||
|
||||
Были применены и изучены различные арифметические операции с числами целого, вещественного и комплексного типа.
|
||||
|
||||
# 4.1 Изучение сложения и вычитания
|
||||
|
||||
Были применены операции сложения и вычитания с различными числами.
|
||||
|
||||
>>>12+7+90 # Сложение целых чисел
|
||||
109
|
||||
>>>5.689e-1 - 0.456 #Вычитание вещественных чисел
|
||||
0.11289999999999994
|
||||
>>>23.6+54 #Сложение вещественного и целого чисел
|
||||
77.6
|
||||
>>>14-56.7+89 # Сложение и вычитание целых и вещественных чисел
|
||||
46.3
|
||||
|
||||
# 4.2 Изучение умножения
|
||||
|
||||
Было умножено вещественное число на целое.
|
||||
|
||||
>>>-6.7*12 #Умножение вещественного числа на целое число
|
||||
-80.4
|
||||
|
||||
# 4.3 Изучение деления с результатом - вещественным числом
|
||||
|
||||
Было произведено деление чисел на целое число и проверен класс результативной переменной.
|
||||
|
||||
>>>-234.5/6 #Деление вещественного числа на целое
|
||||
-39.083333333333336
|
||||
>>>a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
|
||||
>>>a
|
||||
3.9555555555555557
|
||||
>>>type(a)
|
||||
<class 'float'>
|
||||
|
||||
# 4.4 Изучение деления с округлением вниз
|
||||
|
||||
Был применен операнд деления с округлением вниз, деление испробовано на целых и вещественных числах и выведен тип результативной переменной.
|
||||
|
||||
>>>b=178//45 #Деление двух целых чисел
|
||||
>>>b
|
||||
3
|
||||
>>>type(b)
|
||||
<class 'int'>
|
||||
>>>c=-24.6//12.1 #Деление двух вещественных чисел
|
||||
>>>c
|
||||
-3.0
|
||||
>>>type(c)
|
||||
<class 'float'>
|
||||
>>>ddd=56.88//45
|
||||
>>>ddd
|
||||
1.0
|
||||
>>>type(ddd)
|
||||
<class 'float'>
|
||||
>>>eee=45//56.88
|
||||
>>>eee
|
||||
0.0
|
||||
>>>type(eee)
|
||||
<class 'float'>
|
||||
|
||||
# 4.5 Изучение получения отсатка от деления
|
||||
|
||||
Был применен операнд остатка от деления, операция применена по отношению к целым и вещественным числам.
|
||||
|
||||
>>>148%33 #Остаток от деления двух целых чисел
|
||||
16
|
||||
>>>12.6%3.8 #Остаток от деления двух вещественных чисел
|
||||
1.2000000000000002
|
||||
>>>148%3.9
|
||||
3.7000000000000033
|
||||
>>>3.9%2
|
||||
1.9
|
||||
|
||||
# 4.6 Изучение возведения в степень
|
||||
|
||||
Была применена операция возведения в степень с вещественными и целыми числами.
|
||||
|
||||
>>>14**3 #Целое число возводится в целую степень
|
||||
2744
|
||||
>>>e=2.7**3.6 #Вещественное число возводится в вещественную степень
|
||||
>>>e
|
||||
35.719843790663525
|
||||
>>>2.7**3
|
||||
19.683000000000003
|
||||
>>>3**2.7
|
||||
19.419023519771343
|
||||
|
||||
Также самостоятельно были произведены операции над комплексными числами. Выяснено, что выполнимы все вышеприведенные операции, кроме деления с округлением вниз и определения остатка.
|
||||
|
||||
>>>kom1=5+2j
|
||||
>>>kom2=3+7j
|
||||
>>>kom1+kom2
|
||||
(8+9j)
|
||||
>>>kom1-kom2
|
||||
(2-5j)
|
||||
>>>kom1*kom2
|
||||
(1+41j)
|
||||
>>>kom1/kom2
|
||||
(0.5-0.5000000000000001j)
|
||||
>>>kom1//kom2
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#110>", line 1, in <module>
|
||||
kom1//kom2
|
||||
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
|
||||
>>>kom1//3
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#111>", line 1, in <module>
|
||||
kom1//3
|
||||
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
|
||||
>>>kom1%kom2
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#112>", line 1, in <module>
|
||||
kom1%kom2
|
||||
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
|
||||
>>>kom1%3
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#113>", line 1, in <module>
|
||||
kom1%3
|
||||
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
|
||||
>>>kom1**4
|
||||
(41+840j)
|
||||
>>>kom1**kom2
|
||||
(10.184748623043754+3.841522923031664j)
|
||||
|
||||
# 5 Изучение операций с двоичными представлениями целых чисел
|
||||
|
||||
Были произведены различные операции с двоичным представлением целых чисел.
|
||||
|
||||
# 5.1 Изучение двоичной инверсии
|
||||
|
||||
Была применена двоичная инверсия.
|
||||
|
||||
>>>dv1=9
|
||||
>>>dv2=~dv1
|
||||
>>>dv2
|
||||
-10
|
||||
|
||||
# 5.2 Изучение двоичного И
|
||||
|
||||
Была применена операция двоичного И.
|
||||
|
||||
7&9 # 111 и 1001 = 0001
|
||||
1
|
||||
7&8 # 111 и 1000 = 0000
|
||||
0
|
||||
|
||||
# 5.3 Изучение двоичного ИЛИ
|
||||
|
||||
Была применена операция двоичного ИЛИ.
|
||||
|
||||
>>>7|9 # 111 или 1001 = 1111
|
||||
15
|
||||
>>>7|8 # 111 или 1000 = 1111
|
||||
15
|
||||
>>>14|5 # 1110 или 0101 = 1111
|
||||
15
|
||||
|
||||
# 5.4 Изучение двоичного исключающего ИЛИ
|
||||
|
||||
Была применена операция двоичного исключающего ИЛИ.
|
||||
|
||||
>>>14^5 # 1110 исключающее или 0101 = 1011
|
||||
11
|
||||
Число 11 получилось при переводе числа 1011 из двоичной системы в десятичную. Это можно сделать с помощью выражения: 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11
|
||||
|
||||
# 5.5 Изучение сдвига двоичного представления на заданное число разрядов влево или вправо с дополнением нулями
|
||||
|
||||
Был произведен сдвиг двоичного представления влево и вправо с дополнением нулями.
|
||||
|
||||
>>>h=14 #Двоичное представление = 1110
|
||||
>>>g=h<<2 # Новое двоичное представление = 111000
|
||||
>>>g
|
||||
56
|
||||
>>>g1=h>>1 # Новое двоичное представление = 0111
|
||||
>>>g1
|
||||
7
|
||||
>>>g2=h>>2 # Новое двоичное представление = 0011
|
||||
>>>g2
|
||||
3
|
||||
|
||||
Самостоятельно были созданы два двоичных числа с 7-ю знаками и произведены операции над ними.
|
||||
|
||||
>>>bin1 = int("0101010", 2)
|
||||
>>>bin2 = int("1100101", 2)
|
||||
>>>bin3 = ~bin1
|
||||
>>>bin3
|
||||
-43
|
||||
>>>bin1&bin2
|
||||
32
|
||||
>>>bin1|bin2
|
||||
111
|
||||
>>>bin1^bin2
|
||||
79
|
||||
>>>bin1>>3
|
||||
5
|
||||
>>>bin1<<6
|
||||
2688
|
||||
|
||||
# 6 Изучение операций при работе с последовательностями (строками, списками, кортежами)
|
||||
|
||||
# 6.1 Изучение обьединения обьектов различных типов
|
||||
|
||||
Были обьеденены строки, списки и кортежи.
|
||||
|
||||
>>>'Система '+'регулирования' #Соединение двух строк символов
|
||||
'Система регулирования'
|
||||
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
|
||||
['abc', 'de', 'fg', 'hi', 'jkl']
|
||||
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
|
||||
('abc', 'de', 'fg', 'hi', 'jkl')
|
||||
|
||||
# 6.2 Изучение повторения элементов обьекта различных типов
|
||||
|
||||
Было произведено повторение строки, списка и кортежа
|
||||
|
||||
>>>'ля-'*5 #Повторение строки 5 раз
|
||||
'ля-ля-ля-ля-ля-'
|
||||
>>>['ку','-']*3 #Повторение списка 3 раза
|
||||
['ку', '-', 'ку', '-', 'ку', '-']
|
||||
>>>('кис','-')*4 #Повторение кортежа 4 раза
|
||||
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
|
||||
>>>signal1=[0]*3+[1]*99
|
||||
>>>signal2=(0,)*3+(1,)*5+(0,)*7
|
||||
>>>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, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
|
||||
|
||||
# 6.3 Изучение проверки наличия элементов в обьекте
|
||||
|
||||
Было проверено наличие определенных элементов в строке, списке и кортеже.
|
||||
|
||||
>>>stroka='Система автоматического управления'
|
||||
>>>'автомат' in stroka #Наличие подстроки в строке
|
||||
True
|
||||
>>>'ку' in ['ку','-']*3 #Наличие контекста в списке
|
||||
True
|
||||
>>>'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
|
||||
False
|
||||
|
||||
# 6.4 Изучение подстановки элементов в обьект
|
||||
|
||||
Была произведена подстановка чисел и строки в обьект.
|
||||
|
||||
>>>stroka='Температура = %g %s %g'
|
||||
>>>stroka % (16,' меньше ',25)
|
||||
'Температура = 16 меньше 25'
|
||||
>>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
|
||||
>>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
|
||||
'Температура = 16 меньше 25'
|
||||
|
||||
# 7 Изучение оператора присваивания
|
||||
|
||||
# 7.1 Изучение присваивания для переменной
|
||||
|
||||
Была создана переменная и ей присвоено определенное значение.
|
||||
|
||||
>>>zz=-12
|
||||
>>>zz
|
||||
-12
|
||||
|
||||
# 7.2 Изучение изменения заданной переменной на определенную величину
|
||||
|
||||
Значение переменной было увеличено и потом уменьшено на определенное значение.
|
||||
|
||||
>>>zz+=5 # Значение zz увеличивается на 5
|
||||
>>>zz-=3 # Значение уменьшается на 3
|
||||
>>>zz
|
||||
-10
|
||||
|
||||
# 7.3 Изучение умножения и деления переменной
|
||||
|
||||
Переменная была умножена, а потом поделена на определенное значение. Также самостоятельно был применен этот операнд для строки, в последствии чего символы в строке продублировались столько раз, какое было умножаемое число.
|
||||
|
||||
>>>zz/=2
|
||||
>>>zz
|
||||
-5.0
|
||||
>>>zz*=5
|
||||
>>>zz
|
||||
-25.0
|
||||
>>>xxx="zz"
|
||||
>>>xxx*=5
|
||||
>>>xxx
|
||||
'zzzzzzzzzz'
|
||||
|
||||
# 7.4 Изучение деления с округлением вниз, получение остатка деления и возведение в степень
|
||||
|
||||
На переменной были самостоятельно испробованы операции деления с округлением вниз, получение остатка деления и возведение в степень.
|
||||
|
||||
>>>zz//=3
|
||||
>>>zz
|
||||
-9.0
|
||||
>>>zz%=2
|
||||
>>>zz
|
||||
1.0
|
||||
>>>zz**=3
|
||||
>>>zz
|
||||
1.0
|
||||
|
||||
# 7.5 Изучение множественного присваивания
|
||||
|
||||
Разным переменным было присвоено одно значение. Также были присвоены значения переменным в одну строку с использованием кортежа,
|
||||
|
||||
>>>w=v=10 # Переменным присваивается одно и то же значение
|
||||
>>>w
|
||||
10
|
||||
>>>v
|
||||
10
|
||||
>>>n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа, строки, списка и словаря.
|
||||
>>>n1;n2;n3
|
||||
11
|
||||
-3
|
||||
'all'
|
||||
>>>n1,n2,n3="11", "-3", "all"
|
||||
>>>n1;n2;n3
|
||||
'11'
|
||||
'-3'
|
||||
'all'
|
||||
>>>n1,n2,n3=[11,-3,'all']
|
||||
>>>n1;n2;n3
|
||||
11
|
||||
-3
|
||||
'all'
|
||||
>>>n1,n2,n3={11: 3,-3:7,'all':8}
|
||||
>>>n1;n2;n3
|
||||
11
|
||||
-3
|
||||
'all'
|
||||
|
||||
# 8 Изучение логических операций
|
||||
|
||||
Были изучены и применены некоторые логические операции, а также некоторые действия, с помощью логических операций.
|
||||
|
||||
# 8.1 Изучение операций сравнения
|
||||
|
||||
К двум переменным были применены различные операции сравнения.
|
||||
|
||||
>>>w==v
|
||||
True
|
||||
>>>w!=v
|
||||
False
|
||||
>>>w>v
|
||||
False
|
||||
>>>w<v
|
||||
False
|
||||
>>>w<=v
|
||||
True
|
||||
>>>w>=v
|
||||
True
|
||||
|
||||
# 8.2 Изучение проверки наличия элемента в обьекте с помощью логических операций
|
||||
|
||||
Были созданы множество и словарь, и проверено имеются ли в них определенные элементы.
|
||||
|
||||
>>>mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||
>>>'book' in mnoz1
|
||||
True
|
||||
>>>'cap' in mnoz1
|
||||
False
|
||||
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||
>>>'Vologda' in dic1
|
||||
True
|
||||
>>>'Pskov' in dic1
|
||||
False
|
||||
>>>56 in dic1.values()
|
||||
True
|
||||
>>>dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
|
||||
>>>'UII' in dct1['Depart']
|
||||
True
|
||||
>>>dct1['Depart'][1] == 'MM'
|
||||
False
|
||||
|
||||
# 8.3 Изучение создания выражений с соединительными словами И, ИЛИ, НЕ
|
||||
|
||||
Были построены выражения с соединитиельными словами И, ИЛИ, НЕ.
|
||||
|
||||
>>>a=17
|
||||
>>>b=-6
|
||||
>>>(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
|
||||
True
|
||||
>>>(5>6) and ('kazan' in dic1) and not ('lozhka' in mnoz1)
|
||||
False
|
||||
>>>(5>6) and (7>5) or ("Saratov" in dic1)
|
||||
True
|
||||
|
||||
# 8.4 Изучение проверки ссылок переменных на наличие одного и того же обьекта
|
||||
|
||||
Было проверено, являются ли созданные обьекты одними и теми же обьектами в памяти.
|
||||
|
||||
>>>w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
|
||||
>>>w is v
|
||||
True
|
||||
>>>w1=['A','B']
|
||||
>>>v1=['A','B']
|
||||
>>>w1 is v1 #В данном случае эти переменные не записаны в один адрес памяти, питон создает для списков два разных обьекта, так как список это изменяемый тип и так как значение для переменных присваивалось по-отдельности. Так питон гарантирует, что изменение одного списка не повлияет на другой.
|
||||
False
|
||||
|
||||
# 9 Изучение операций с обьектами, проводимыми с помощью методов
|
||||
|
||||
Была создана строка и выведены все атрибуты для нее.
|
||||
|
||||
>>>stroka='Микропроцессорная система управления'
|
||||
>>>dir(stroka)
|
||||
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
|
||||
|
||||
# 9.1 Изучение методов применимых для строки
|
||||
|
||||
Были применены разные методы для работы со строками.
|
||||
|
||||
>>>stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
|
||||
5
|
||||
>>>stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
|
||||
4
|
||||
>>>stroka.replace(' у',' автоматического у')
|
||||
'Микропроцессорная система автоматического управления'
|
||||
>>>spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
|
||||
>>>spis22
|
||||
['Микропроцессорная', 'система', 'управления']
|
||||
>>>stroka.upper() #Возвращает строку со всеми заглавными буквами
|
||||
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
|
||||
>>>stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
|
||||
>>>stroka3
|
||||
'Микропроцессорная система управления'
|
||||
>>>stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
|
||||
('Микропроце', 'с', 'сорная система управления')
|
||||
>>>stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
|
||||
('Микропроцессорная си', 'с', 'тема управления')
|
||||
>>>strk1='Момент времени {}, значение = {}'
|
||||
>>>strk1.format(1,89.7)
|
||||
'Момент времени 1, значение = 89.7'
|
||||
>>>strk2='Момент времени {1}, значение = {0}:{2}'
|
||||
>>>strk2.format(36.7,2,'норма!')
|
||||
'Момент времени 2, значение = 36.7:норма!'
|
||||
>>>strk3='Момент времени {num}, значение = {znch}'
|
||||
>>>strk3.format(znch=89.7,num=2)
|
||||
'Момент времени 2, значение = 89.7'
|
||||
|
||||
# 9.2 Изучение методов применимых к спискам
|
||||
|
||||
Были применены разные методы для работы со списками.
|
||||
|
||||
>>>spsk=[4, "a", 5, 7, 9]
|
||||
>>>dir(spsk)
|
||||
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
|
||||
>>>spsk.pop(2)
|
||||
5
|
||||
>>>spsk
|
||||
[4, 'a', 7, 9]
|
||||
>>>spsk.append('c') #К списку прибавляется строка "с"
|
||||
>>>spsk
|
||||
[4, 'a', 7, 9, 'c']
|
||||
>>>spsk.insert(2,'a') #На 2 место в списке вставляется строка "а"
|
||||
>>>spsk
|
||||
[4, 'a', 'a', 7, 9, 'c']
|
||||
>>>spsk.count('a') #Считается количество "а" в списке
|
||||
2
|
||||
|
||||
# 9.3 Изучение методов применимых к кортежам
|
||||
|
||||
Были применены разные методы для работы с кортажами и применен один из них.
|
||||
|
||||
>>>kor=(2, "k")
|
||||
>>>dir(kor)
|
||||
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
|
||||
>>>kor.index(2)
|
||||
0
|
||||
|
||||
# 9.4 Изучение методов применимых к словарям
|
||||
|
||||
Были применены разные методы для работы со словарями и применен один из них.
|
||||
|
||||
>>>dirr={"A":3, "B":4}
|
||||
>>>dir(dirr)
|
||||
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
|
||||
>>>dirr.keys()
|
||||
>>>dict_keys(['A', 'B'])
|
||||
|
||||
# 10 Завершение работы в IDLE
|
||||
@ -0,0 +1,644 @@
|
||||
# Отчет по теме 3
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>> import os
|
||||
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA3')
|
||||
|
||||
# 2 Преобразование базовых типов обьектов в другие типы
|
||||
|
||||
Было изучено, как преобразовывать обьекты одного типа, в обьекты другого типа.
|
||||
|
||||
# 2.1 Преобразование обьектов в логический тип данных
|
||||
|
||||
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты логического типа.
|
||||
|
||||
>>> logiz1=bool(56)
|
||||
>>> logiz2=bool(0)
|
||||
>>> logiz3=bool("Beta")
|
||||
>>> logiz4=bool("")
|
||||
>>> logiz1
|
||||
True
|
||||
>>> type(logiz1)
|
||||
<class 'bool'>
|
||||
|
||||
# 2.2 Преобразование обьектов в числовой тип данных
|
||||
|
||||
Было изучено, как преобразовывать обьекты типа строка и число, в обьекты целого и вещественного типа int и float.
|
||||
|
||||
>>>tt1=int(198.6) #Отбрасывается дробная часть
|
||||
>>>tt1
|
||||
198
|
||||
>>>tt2=int("-76") #Число – в строке символов, система по умолчанию - десятичная
|
||||
>>>tt2
|
||||
-76
|
||||
>>>tt3=int("B",16) #В шестнадцатиричной системе буква "В" соответствует числу 11
|
||||
>>>tt3
|
||||
11
|
||||
>>>tt4=int("71",8) #71 преобразуется в число в восьмеричной системе
|
||||
>>>tt4
|
||||
57
|
||||
>>>tt5=int("98.76") #Число представлено в виде строки, но само по себе оно относится к вещественным числам (типа float), поэтому сразу невозможно его преобразовать в целое. Для такого преобразования надо сначала переопределить его как float, а уже потом как int.
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#14>", line 1, in <module>
|
||||
tt5=int("98.76")
|
||||
ValueError: invalid literal for int() with base 10: '98.76'
|
||||
>>>flt1=float(789)
|
||||
>>>flt1
|
||||
789.0
|
||||
>>>flt2=float(-6.78e2)
|
||||
>>>flt2
|
||||
-678.0
|
||||
>>>flt3=float("Infinity")
|
||||
>>>flt3
|
||||
inf
|
||||
>>>flt4=float("-inf")
|
||||
>>>flt4
|
||||
-inf
|
||||
|
||||
# 2.3 Преобразование целочисленных обьектов в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратное представление
|
||||
|
||||
Были преобразованы целочисленных обьекты в строки с двоичным, восьмеричным и шестнадцатеричным представлением и обратно представлены в целочисленном виде.
|
||||
|
||||
>>>hh=123
|
||||
>>>dv1=bin(hh) #Преобразование в строку с двоичным представлением
|
||||
>>>vos1=oct(hh) # Преобразование в строку с восьмеричным представлением
|
||||
>>>shs1=hex(hh) # Преобразование в строку с шестнадцатеричным представлением
|
||||
>>>dv1
|
||||
'0b1111011'
|
||||
>>>vos1
|
||||
'0o173'
|
||||
>>>shs1
|
||||
'0x7b'
|
||||
>>>int(dv1,2)
|
||||
123
|
||||
>>>int(vos1, 8)
|
||||
123
|
||||
>>>int(shs1, 16)
|
||||
123
|
||||
|
||||
# 3 Преобразование сложных типов обьектов в другие типы
|
||||
|
||||
# 3.1 Преобразование элементов в строку символов
|
||||
|
||||
В строку были преобразованы число, логическая переменная, список, кортеж и словарь.
|
||||
|
||||
>>>strk1=str(23.6)
|
||||
>>>strk1
|
||||
'23.6'
|
||||
>>>strk2=str(logiz3)
|
||||
>>>strk2
|
||||
'True'
|
||||
>>>strk3=str(["A","B","C"]) #Преобразуем список
|
||||
>>>strk3
|
||||
"['A', 'B', 'C']"
|
||||
>>>strk4=str(("A","B","C")) #Преобразуем кортеж
|
||||
>>>strk4
|
||||
"('A', 'B', 'C')"
|
||||
>>>strk5=str({"A":1,"B":2,"C":9}) #Преобразуем словарь
|
||||
>>>strk5
|
||||
"{'A': 1, 'B': 2, 'C': 9}"
|
||||
|
||||
# 3.2 Преобразование элементов в список
|
||||
|
||||
Были преобразованы в список строка символов, кортеж и словарь тремя способами (включая только ключи, только значения и ключи и значения вместе).
|
||||
|
||||
>>>spis1=list("Строка символов") #Заданная строка разделяется на символы
|
||||
>>>spis1
|
||||
['С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в']
|
||||
>>>spis2=list((124,236,-15,908)) #Кортеж превращается в список
|
||||
>>>spis2
|
||||
[124, 236, -15, 908]
|
||||
>>>spis3=list({"A":1,"B":2,"C":9}) #Преобразование словаря в список
|
||||
>>>spis3
|
||||
['A', 'B', 'C']
|
||||
>>>spis3=list({"A":1,"B":2,"C":9}.values()) #Преобразование словаря в список по значениям
|
||||
>>>spis3
|
||||
[1, 2, 9]
|
||||
>>>spis3=list({"A":1,"B":2,"C":9}.items()) #Преобразование словаря в список ключи и значения
|
||||
>>>spis3
|
||||
[('A', 1), ('B', 2), ('C', 9)]
|
||||
|
||||
# 3.3 Преобразование элементов в кортеж
|
||||
|
||||
В кортеж были преобразованы строка, список и словарь.
|
||||
|
||||
>>>kort7=tuple('Строка символов') #Преобразование строки символов в кортеж
|
||||
>>>kort7
|
||||
('С', 'т', 'р', 'о', 'к', 'а', ' ', 'с', 'и', 'м', 'в', 'о', 'л', 'о', 'в')
|
||||
>>>kort8=tuple(spis2) #Преобразование списка в кортеж
|
||||
>>>kort8
|
||||
(124, 236, -15, 908)
|
||||
>>>kort9=tuple({"A":1,"B":2,"C":9}) #Преобразование словаря в кортеж
|
||||
>>>kort9
|
||||
('A', 'B', 'C')
|
||||
|
||||
# 3.4 Удаление обьектов
|
||||
|
||||
Были удалены два обьекта и проверено их наличие. Так же самостоятельно была создана строка, которая была потом преобразована в список, затем список – в кортеж и, кортеж – в строку.
|
||||
|
||||
>>>del strk5, kort8
|
||||
>>>strk5
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#62>", line 1, in <module>
|
||||
strk5
|
||||
NameError: name 'strk5' is not defined. Did you mean: 'strk1'?
|
||||
>>>kort8
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#63>", line 1, in <module>
|
||||
kort8
|
||||
NameError: name 'kort8' is not defined. Did you mean: 'kort7'?
|
||||
>>> f_str="Голощапов Д.Е."
|
||||
>>> f_spis=list(f_str)
|
||||
>>> f_kort=tuple(f_spis)
|
||||
>>> f_sstr=str(f_kort)
|
||||
>>> f_spis
|
||||
['Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.']
|
||||
>>> f_kort
|
||||
('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')
|
||||
>>> f_sstr
|
||||
"('Г', 'о', 'л', 'о', 'щ', 'а', 'п', 'о', 'в', ' ', 'Д', '.', 'Е', '.')"
|
||||
|
||||
# 4 Изучение арифметических операций
|
||||
|
||||
Были применены и изучены различные арифметические операции с числами целого, вещественного и комплексного типа.
|
||||
|
||||
# 4.1 Изучение сложения и вычитания
|
||||
|
||||
Были применены операции сложения и вычитания с различными числами.
|
||||
|
||||
>>>12+7+90 # Сложение целых чисел
|
||||
109
|
||||
>>>5.689e-1 - 0.456 #Вычитание вещественных чисел
|
||||
0.11289999999999994
|
||||
>>>23.6+54 #Сложение вещественного и целого чисел
|
||||
77.6
|
||||
>>>14-56.7+89 # Сложение и вычитание целых и вещественных чисел
|
||||
46.3
|
||||
|
||||
# 4.2 Изучение умножения
|
||||
|
||||
Было умножено вещественное число на целое.
|
||||
|
||||
>>>-6.7*12 #Умножение вещественного числа на целое число
|
||||
-80.4
|
||||
|
||||
# 4.3 Изучение деления с результатом - вещественным числом
|
||||
|
||||
Было произведено деление чисел на целое число и проверен класс результативной переменной.
|
||||
|
||||
>>>-234.5/6 #Деление вещественного числа на целое
|
||||
-39.083333333333336
|
||||
>>>a=178/45 #Деление двух целых чисел – проверьте тип объекта a!
|
||||
>>>a
|
||||
3.9555555555555557
|
||||
>>>type(a)
|
||||
<class 'float'>
|
||||
|
||||
# 4.4 Изучение деления с округлением вниз
|
||||
|
||||
Был применен операнд деления с округлением вниз, деление испробовано на целых и вещественных числах и выведен тип результативной переменной.
|
||||
|
||||
>>>b=178//45 #Деление двух целых чисел
|
||||
>>>b
|
||||
3
|
||||
>>>type(b)
|
||||
<class 'int'>
|
||||
>>>c=-24.6//12.1 #Деление двух вещественных чисел
|
||||
>>>c
|
||||
-3.0
|
||||
>>>type(c)
|
||||
<class 'float'>
|
||||
>>>ddd=56.88//45
|
||||
>>>ddd
|
||||
1.0
|
||||
>>>type(ddd)
|
||||
<class 'float'>
|
||||
>>>eee=45//56.88
|
||||
>>>eee
|
||||
0.0
|
||||
>>>type(eee)
|
||||
<class 'float'>
|
||||
|
||||
# 4.5 Изучение получения отсатка от деления
|
||||
|
||||
Был применен операнд остатка от деления, операция применена по отношению к целым и вещественным числам.
|
||||
|
||||
>>>148%33 #Остаток от деления двух целых чисел
|
||||
16
|
||||
>>>12.6%3.8 #Остаток от деления двух вещественных чисел
|
||||
1.2000000000000002
|
||||
>>>148%3.9
|
||||
3.7000000000000033
|
||||
>>>3.9%2
|
||||
1.9
|
||||
|
||||
# 4.6 Изучение возведения в степень
|
||||
|
||||
Была применена операция возведения в степень с вещественными и целыми числами.
|
||||
|
||||
>>>14**3 #Целое число возводится в целую степень
|
||||
2744
|
||||
>>>e=2.7**3.6 #Вещественное число возводится в вещественную степень
|
||||
>>>e
|
||||
35.719843790663525
|
||||
>>>2.7**3
|
||||
19.683000000000003
|
||||
>>>3**2.7
|
||||
19.419023519771343
|
||||
|
||||
Также самостоятельно были произведены операции над комплексными числами. Выяснено, что выполнимы все вышеприведенные операции, кроме деления с округлением вниз и определения остатка.
|
||||
|
||||
>>>kom1=5+2j
|
||||
>>>kom2=3+7j
|
||||
>>>kom1+kom2
|
||||
(8+9j)
|
||||
>>>kom1-kom2
|
||||
(2-5j)
|
||||
>>>kom1*kom2
|
||||
(1+41j)
|
||||
>>>kom1/kom2
|
||||
(0.5-0.5000000000000001j)
|
||||
>>>kom1//kom2
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#110>", line 1, in <module>
|
||||
kom1//kom2
|
||||
TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
|
||||
>>>kom1//3
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#111>", line 1, in <module>
|
||||
kom1//3
|
||||
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
|
||||
>>>kom1%kom2
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#112>", line 1, in <module>
|
||||
kom1%kom2
|
||||
TypeError: unsupported operand type(s) for %: 'complex' and 'complex'
|
||||
>>>kom1%3
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#113>", line 1, in <module>
|
||||
kom1%3
|
||||
TypeError: unsupported operand type(s) for %: 'complex' and 'int'
|
||||
>>>kom1**4
|
||||
(41+840j)
|
||||
>>>kom1**kom2
|
||||
(10.184748623043754+3.841522923031664j)
|
||||
|
||||
# 5 Изучение операций с двоичными представлениями целых чисел
|
||||
|
||||
Были произведены различные операции с двоичным представлением целых чисел.
|
||||
|
||||
# 5.1 Изучение двоичной инверсии
|
||||
|
||||
Была применена двоичная инверсия.
|
||||
|
||||
>>>dv1=9
|
||||
>>>dv2=~dv1
|
||||
>>>dv2
|
||||
-10
|
||||
|
||||
# 5.2 Изучение двоичного И
|
||||
|
||||
Была применена операция двоичного И.
|
||||
|
||||
>>>7&9 # 111 и 1001 = 0001
|
||||
1
|
||||
>>>7&8 # 111 и 1000 = 0000
|
||||
0
|
||||
|
||||
# 5.3 Изучение двоичного ИЛИ
|
||||
|
||||
Была применена операция двоичного ИЛИ.
|
||||
|
||||
>>>7|9 # 111 или 1001 = 1111
|
||||
15
|
||||
>>>7|8 # 111 или 1000 = 1111
|
||||
15
|
||||
>>>14|5 # 1110 или 0101 = 1111
|
||||
15
|
||||
|
||||
# 5.4 Изучение двоичного исключающего ИЛИ
|
||||
|
||||
Была применена операция двоичного исключающего ИЛИ.
|
||||
|
||||
>>>14^5 # 1110 исключающее или 0101 = 1011
|
||||
11
|
||||
Число 11 получилось при переводе числа 1011 из двоичной системы в десятичную. Это можно сделать с помощью выражения: 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11
|
||||
|
||||
# 5.5 Изучение сдвига двоичного представления на заданное число разрядов влево или вправо с дополнением нулями
|
||||
|
||||
Был произведен сдвиг двоичного представления влево и вправо с дополнением нулями.
|
||||
|
||||
>>>h=14 #Двоичное представление = 1110
|
||||
>>>g=h<<2 # Новое двоичное представление = 111000
|
||||
>>>g
|
||||
56
|
||||
>>>g1=h>>1 # Новое двоичное представление = 0111
|
||||
>>>g1
|
||||
7
|
||||
>>>g2=h>>2 # Новое двоичное представление = 0011
|
||||
>>>g2
|
||||
3
|
||||
|
||||
Самостоятельно были созданы два двоичных числа с 7-ю знаками и произведены операции над ними.
|
||||
|
||||
>>>bin1 = int("0101010", 2)
|
||||
>>>bin2 = int("1100101", 2)
|
||||
>>>bin3 = ~bin1
|
||||
>>>bin3
|
||||
-43
|
||||
>>>bin1&bin2
|
||||
32
|
||||
>>>bin1|bin2
|
||||
111
|
||||
>>>bin1^bin2
|
||||
79
|
||||
>>>bin1>>3
|
||||
5
|
||||
>>>bin1<<6
|
||||
2688
|
||||
|
||||
# 6 Изучение операций при работе с последовательностями (строками, списками, кортежами)
|
||||
|
||||
# 6.1 Изучение обьединения обьектов различных типов
|
||||
|
||||
Были обьеденены строки, списки и кортежи.
|
||||
|
||||
>>>'Система '+'регулирования' #Соединение двух строк символов
|
||||
'Система регулирования'
|
||||
>>>['abc','de','fg']+['hi','jkl'] # Объединение двух списков
|
||||
['abc', 'de', 'fg', 'hi', 'jkl']
|
||||
>>>('abc','de','fg')+('hi','jkl') # Объединение двух кортежей
|
||||
('abc', 'de', 'fg', 'hi', 'jkl')
|
||||
|
||||
# 6.2 Изучение повторения элементов обьекта различных типов
|
||||
|
||||
Было произведено повторение строки, списка и кортежа
|
||||
|
||||
>>>'ля-'*5 #Повторение строки 5 раз
|
||||
'ля-ля-ля-ля-ля-'
|
||||
>>>['ку','-']*3 #Повторение списка 3 раза
|
||||
['ку', '-', 'ку', '-', 'ку', '-']
|
||||
>>>('кис','-')*4 #Повторение кортежа 4 раза
|
||||
('кис', '-', 'кис', '-', 'кис', '-', 'кис', '-')
|
||||
>>>signal1=[0]*3+[1]*99
|
||||
>>>signal2=(0,)*3+(1,)*5+(0,)*7
|
||||
>>>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, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0)
|
||||
|
||||
# 6.3 Изучение проверки наличия элементов в обьекте
|
||||
|
||||
Было проверено наличие определенных элементов в строке, списке и кортеже.
|
||||
|
||||
>>>stroka='Система автоматического управления'
|
||||
>>>'автомат' in stroka #Наличие подстроки в строке
|
||||
True
|
||||
>>>'ку' in ['ку','-']*3 #Наличие контекста в списке
|
||||
True
|
||||
>>>'ля-' in ('abc', 'de', 'fg', 'hi', 'jkl') #Наличие контекста в кортеже
|
||||
False
|
||||
|
||||
# 6.4 Изучение подстановки элементов в обьект
|
||||
|
||||
Была произведена подстановка чисел и строки в обьект.
|
||||
|
||||
>>>stroka='Температура = %g %s %g'
|
||||
>>>stroka % (16,' меньше ',25)
|
||||
'Температура = 16 меньше 25'
|
||||
>>>stroka='Температура = %(zn1)g %(sravn)s %(zn2)g'
|
||||
>>>stroka % {'zn1':16,'sravn':' меньше ','zn2':25}
|
||||
'Температура = 16 меньше 25'
|
||||
|
||||
# 7 Изучение оператора присваивания
|
||||
|
||||
# 7.1 Изучение присваивания для переменной
|
||||
|
||||
Была создана переменная и ей присвоено определенное значение.
|
||||
|
||||
>>>zz=-12
|
||||
>>>zz
|
||||
-12
|
||||
|
||||
# 7.2 Изучение изменения заданной переменной на определенную величину
|
||||
|
||||
Значение переменной было увеличено и потом уменьшено на определенное значение.
|
||||
|
||||
>>>zz+=5 # Значение zz увеличивается на 5
|
||||
>>>zz-=3 # Значение уменьшается на 3
|
||||
>>>zz
|
||||
-10
|
||||
|
||||
# 7.3 Изучение умножения и деления переменной
|
||||
|
||||
Переменная была умножена, а потом поделена на определенное значение. Также самостоятельно был применен этот операнд для строки, в последствии чего символы в строке продублировались столько раз, какое было умножаемое число.
|
||||
|
||||
>>>zz/=2
|
||||
>>>zz
|
||||
-5.0
|
||||
>>>zz*=5
|
||||
>>>zz
|
||||
-25.0
|
||||
>>>xxx="zz"
|
||||
>>>xxx*=5
|
||||
>>>xxx
|
||||
'zzzzzzzzzz'
|
||||
|
||||
# 7.4 Изучение деления с округлением вниз, получение остатка деления и возведение в степень
|
||||
|
||||
На переменной были самостоятельно испробованы операции деления с округлением вниз, получение остатка деления и возведение в степень.
|
||||
|
||||
>>>zz//=3
|
||||
>>>zz
|
||||
-9.0
|
||||
>>>zz%=2
|
||||
>>>zz
|
||||
1.0
|
||||
>>>zz**=3
|
||||
>>>zz
|
||||
1.0
|
||||
|
||||
# 7.5 Изучение множественного присваивания
|
||||
|
||||
Разным переменным было присвоено одно значение. Также были присвоены значения переменным в одну строку с использованием кортежа,
|
||||
|
||||
>>>w=v=10 # Переменным присваивается одно и то же значение
|
||||
>>>w
|
||||
10
|
||||
>>>v
|
||||
10
|
||||
>>>n1,n2,n3=(11,-3,'all') #Значения переменных берутся из кортежа, строки, списка и словаря.
|
||||
>>>n1;n2;n3
|
||||
11
|
||||
-3
|
||||
'all'
|
||||
>>>n1,n2,n3="11", "-3", "all"
|
||||
>>>n1;n2;n3
|
||||
'11'
|
||||
'-3'
|
||||
'all'
|
||||
>>>n1,n2,n3=[11,-3,'all']
|
||||
>>>n1;n2;n3
|
||||
11
|
||||
-3
|
||||
'all'
|
||||
>>>n1,n2,n3={11: 3,-3:7,'all':8}
|
||||
>>>n1;n2;n3
|
||||
11
|
||||
-3
|
||||
'all'
|
||||
|
||||
# 8 Изучение логических операций
|
||||
|
||||
Были изучены и применены некоторые логические операции, а также некоторые действия, с помощью логических операций.
|
||||
|
||||
# 8.1 Изучение операций сравнения
|
||||
|
||||
К двум переменным были применены различные операции сравнения.
|
||||
|
||||
>>>w==v
|
||||
True
|
||||
>>>w!=v
|
||||
False
|
||||
>>>w>v
|
||||
False
|
||||
>>>w<v
|
||||
False
|
||||
>>>w<=v
|
||||
True
|
||||
>>>w>=v
|
||||
True
|
||||
|
||||
# 8.2 Изучение проверки наличия элемента в обьекте с помощью логических операций
|
||||
|
||||
Были созданы множество и словарь, и проверено имеются ли в них определенные элементы.
|
||||
|
||||
>>>mnoz1={'pen','book','pen','iPhone','table','book'}
|
||||
>>>'book' in mnoz1
|
||||
True
|
||||
>>>'cap' in mnoz1
|
||||
False
|
||||
>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
|
||||
>>>'Vologda' in dic1
|
||||
True
|
||||
>>>'Pskov' in dic1
|
||||
False
|
||||
>>>56 in dic1.values()
|
||||
True
|
||||
>>>dct1={'Institut':['AVTI','IEE','IBB'],'Depart':['UII','PM','VMSS','MM'],'gruppa': ['A-01-15','A-02-15']}
|
||||
>>>'UII' in dct1['Depart']
|
||||
True
|
||||
>>>dct1['Depart'][1] == 'MM'
|
||||
False
|
||||
|
||||
# 8.3 Изучение создания выражений с соединительными словами И, ИЛИ, НЕ
|
||||
|
||||
Были построены выражения с соединитиельными словами И, ИЛИ, НЕ.
|
||||
|
||||
>>>a=17
|
||||
>>>b=-6
|
||||
>>>(a>=b) and ('book' in mnoz1) and not ('Pskov' in dic1)
|
||||
True
|
||||
>>>(5>6) and ('kazan' in dic1) and not ('lozhka' in mnoz1)
|
||||
False
|
||||
>>>(5>6) and (7>5) or ("Saratov" in dic1)
|
||||
True
|
||||
|
||||
# 8.4 Изучение проверки ссылок переменных на наличие одного и того же обьекта
|
||||
|
||||
Было проверено, являются ли созданные обьекты одними и теми же обьектами в памяти.
|
||||
|
||||
>>>w=v=10 #При таком присваивании переменные ссылаются на один и тот же объект в оперативной памяти
|
||||
>>>w is v
|
||||
True
|
||||
>>>w1=['A','B']
|
||||
>>>v1=['A','B']
|
||||
>>>w1 is v1 #В данном случае эти переменные не записаны в один адрес памяти, питон создает для списков два разных обьекта, так как список это изменяемый тип и так как значение для переменных присваивалось по-отдельности. Так питон гарантирует, что изменение одного списка не повлияет на другой.
|
||||
False
|
||||
|
||||
# 9 Изучение операций с обьектами, проводимыми с помощью методов
|
||||
|
||||
Была создана строка и выведены все атрибуты для нее.
|
||||
|
||||
>>>stroka='Микропроцессорная система управления'
|
||||
>>>dir(stroka)
|
||||
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
|
||||
|
||||
# 9.1 Изучение методов применимых для строки
|
||||
|
||||
Были применены разные методы для работы со строками.
|
||||
|
||||
>>>stroka.find('пр') #Возвращает номер позиции первого вхождения указанного контекста или значение -1
|
||||
5
|
||||
>>>stroka.count("с") #Подсчет числа вхождений строки “с” в stroka
|
||||
4
|
||||
>>>stroka.replace(' у',' автоматического у')
|
||||
'Микропроцессорная система автоматического управления'
|
||||
>>>spis22=stroka.split(' ') #Возвращает список подстрок, между которыми в строке стоит заданный разделитель
|
||||
>>>spis22
|
||||
['Микропроцессорная', 'система', 'управления']
|
||||
>>>stroka.upper() #Возвращает строку со всеми заглавными буквами
|
||||
'МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ'
|
||||
>>>stroka3=" ".join(spis22) #Возвращает строку, собранную из элементов списка
|
||||
>>>stroka3
|
||||
'Микропроцессорная система управления'
|
||||
>>>stroka3.partition("с") #Возвращает кортеж с результатами поиска «с» слева
|
||||
('Микропроце', 'с', 'сорная система управления')
|
||||
>>>stroka3.rpartition("с") #Возвращает кортеж с результатами поиска «с» справа
|
||||
('Микропроцессорная си', 'с', 'тема управления')
|
||||
>>>strk1='Момент времени {}, значение = {}'
|
||||
>>>strk1.format(1,89.7)
|
||||
'Момент времени 1, значение = 89.7'
|
||||
>>>strk2='Момент времени {1}, значение = {0}:{2}'
|
||||
>>>strk2.format(36.7,2,'норма!')
|
||||
'Момент времени 2, значение = 36.7:норма!'
|
||||
>>>strk3='Момент времени {num}, значение = {znch}'
|
||||
>>>strk3.format(znch=89.7,num=2)
|
||||
'Момент времени 2, значение = 89.7'
|
||||
|
||||
# 9.2 Изучение методов применимых к спискам
|
||||
|
||||
Были применены разные методы для работы со списками.
|
||||
|
||||
>>>spsk=[4, "a", 5, 7, 9]
|
||||
>>>dir(spsk)
|
||||
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
|
||||
>>>spsk.pop(2)
|
||||
5
|
||||
>>>spsk
|
||||
[4, 'a', 7, 9]
|
||||
>>>spsk.append('c') #К списку прибавляется строка "с"
|
||||
>>>spsk
|
||||
[4, 'a', 7, 9, 'c']
|
||||
>>>spsk.insert(2,'a') #На 2 место в списке вставляется строка "а"
|
||||
>>>spsk
|
||||
[4, 'a', 'a', 7, 9, 'c']
|
||||
>>>spsk.count('a') #Считается количество "а" в списке
|
||||
2
|
||||
|
||||
# 9.3 Изучение методов применимых к кортежам
|
||||
|
||||
Были применены разные методы для работы с кортажами и применен один из них.
|
||||
|
||||
>>>kor=(2, "k")
|
||||
>>>dir(kor)
|
||||
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
|
||||
>>>kor.index(2)
|
||||
0
|
||||
|
||||
# 9.4 Изучение методов применимых к словарям
|
||||
|
||||
Были применены разные методы для работы со словарями и применен один из них.
|
||||
|
||||
>>>dirr={"A":3, "B":4}
|
||||
>>>dir(dirr)
|
||||
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
|
||||
>>>dirr.keys()
|
||||
>>>dict_keys(['A', 'B'])
|
||||
|
||||
# 10 Завершение работы в IDLE
|
||||
@ -0,0 +1,72 @@
|
||||
# Общее контрольное задание по теме 3
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Реализовать, записать в текстовый файл и проанализировать результаты последовательности ин-струкций, выполняющих следующие действия:
|
||||
|
||||
•Преобразовать восьмеричное значение 45 в целое число.
|
||||
|
||||
•Создать объект-словарь D со значениями {"усиление":23, "запаздывание":12, "постоянная времени":78} и затем осуществить его преобразование в два списка: ключей и значений, а за-тем – эти два списка преобразовать в один кортеж. Чем отличается кортеж от списка?
|
||||
|
||||
•Напишите и выполните единое выражение, осуществляющее деление числа 1768 на 24.8 с округлением вниз, с определением после этого остатка от деления получившегося значения на 3 и затем возведения результата в степень 2.4.
|
||||
|
||||
•Напишите и выполните единое выражение, последовательно осуществляющее следующие операции: двоичное И для чисел 13 и 27, инверсия полученного значения, двоичное исключа-ющее ИЛИ для полученного значения и числа 14, сдвиг полученного значения на два разряда влево.
|
||||
|
||||
•Создать список с 4 одинаковыми элементами 'колебат' и написать оператор проверки наличия комбинации символов 'аткол' в результате конкатенации второго и третьего элементов этого списка.
|
||||
|
||||
•Определить список методов, доступных у ранее созданного словаря D. Поочередно использо-вать его методы keys и values, определить, что можно получить с применением этих методов.
|
||||
|
||||
•Создать объект - символьную строку с текстом данного предложения. Из символьной строки создать список, элементами которого будут отдельные слова из созданной строки. Заменить в списке элемент «-» на «,». Удалить из списка элемент со значением «данного». Отобразить получившийся список.
|
||||
|
||||
# Решение
|
||||
|
||||
>>>a = int("45", 8)
|
||||
>>>a
|
||||
37
|
||||
>>>D={"усиление":23, "запаздывание":12, "постоянная времени":78}
|
||||
>>>spis1=list(D)
|
||||
>>>spis1
|
||||
['усиление', 'запаздывание', 'постоянная времени']
|
||||
>>>spis2=list(D.values())
|
||||
>>>spis2
|
||||
[23, 12, 78]
|
||||
>>>kor=tuple(spis1)+tuple(spis2) #Список отличается от кортежа тем, что список изменяем, а кортеж нет.
|
||||
>>>kor
|
||||
('усиление', 'запаздывание', 'постоянная времени', 23, 12, 78)
|
||||
>>>((1768//24.8)%3)**2.4
|
||||
5.278031643091577
|
||||
>>>((~(13&27))^14)<<2
|
||||
-32
|
||||
>>>spis3=["колебат", "колебат", "колебат", "колебат" ]
|
||||
>>>'аткол' in spis3[1] + spis3[2]
|
||||
True
|
||||
>>>dir(D)
|
||||
['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
|
||||
>>>help(D.keys)
|
||||
Help on built-in function keys:
|
||||
|
||||
keys() method of builtins.dict instance
|
||||
Return a set-like object providing a view on the dict's keys.
|
||||
|
||||
>>>help(D.values)
|
||||
Help on built-in function values:
|
||||
|
||||
values() method of builtins.dict instance
|
||||
Return an object providing a view on the dict's values.
|
||||
|
||||
>>>D.keys() #Этот метод отображает ключи словаря
|
||||
dict_keys(['усиление', 'запаздывание', 'постоянная времени'])
|
||||
>>>D.values() #Этот метод отображает знаечния словаря
|
||||
dict_values([23, 12, 78])
|
||||
>>>S="Создать объект - символьную строку с текстом данного предложения"
|
||||
>>>L=list(S.split())
|
||||
>>>L
|
||||
['Создать', 'объект', '-', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
|
||||
>>>L[L.index("-")] = ","
|
||||
>>>L
|
||||
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'данного', 'предложения']
|
||||
>>>L.remove("данного")
|
||||
>>>L
|
||||
['Создать', 'объект', ',', 'символьную', 'строку', 'с', 'текстом', 'предложения']
|
||||
@ -0,0 +1,75 @@
|
||||
# Выполнение модульного задания
|
||||
|
||||
Голощапов Дмитрий , А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
M1_15
|
||||
|
||||
1) Можно ли создавать программы для среды Python с помощью других текстовых редакторов?
|
||||
|
||||
2) Создайте объект-список с 4 элементами: 1-й - год вашего рождения, 2-й - список изучаемых в семестре дисциплин, по которым будут сдаваться экзамены , 3-й - список ожидаемых оценок на экзаменах, 4-й - ваша фамилия ИО. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
|
||||
|
||||
3) Напишите инструкции, позволяющую создать новый список, включающий взятые из исходного списка название первой экзаменационной дисциплины и ожидаемую по ней оценку. Отобразите созданный объект на экране.
|
||||
|
||||
4) Создайте словарь, в котором ключами будут названия экзаменационных дисциплин, взятые из списка, а значениями - ожидаемые оценки по этим дисциплинам из того же списка. Отобразите полученный объект.
|
||||
|
||||
5) Напишите инструкцию, которая, используя данные из словаря, обеспечит расчет среднего балла по оценкам на экзаменах. Используя операцию подстановки значений в строку, отобразите результат в виде: "Средний балл=:.".
|
||||
|
||||
# Решение
|
||||
|
||||
## Можно ли создавать программы для среды Python с помощью других текстовых редакторов?
|
||||
|
||||
Да, программы для Python можно создавать с помощью любых текстовых редакторов (например, Notepad++, Sublime Text).
|
||||
Однако затем файл необходимо сохранить с расширением .py.
|
||||
|
||||
## Создайте объект-список с 4 элементами: 1-й - год вашего рождения, 2-й - список изучаемых в семестре дисциплин, по которым будут сдаваться экзамены , 3-й - список ожидаемых оценок на экзаменах, 4-й - ваша фамилия ИО. Напишите инструкцию, доказывающую, что создан объект именно требуемого типа. Напишите инструкцию отображения списка атрибутов созданного объекта.
|
||||
|
||||
>>> personal_data = [
|
||||
... 2005,
|
||||
... ["ТАУ", "ИАД", "Схемотехника", "ЭСУ"],
|
||||
... [5, 4, 5, 4],
|
||||
... "Голощапов Д.Е."
|
||||
... ]
|
||||
>>> personal_data
|
||||
[2005, ['ТАУ', 'ИАД', 'Схемотехника', 'ЭСУ'], [5, 4, 5, 4], 'Голощапов Д.Е.']
|
||||
>>> type(personal_data) #Определение типа объекта
|
||||
<class 'list'>
|
||||
>>> dir(personal_data) #Отображение списка атрибутов
|
||||
['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
|
||||
|
||||
## Напишите инструкции, позволяющую создать новый список, включающий взятые из исходного списка название первой экзаменационной дисциплины и ожидаемую по ней оценку. Отобразите созданный объект на экране.
|
||||
|
||||
>>> fs = personal_data[1][0] #Определение первого предмета
|
||||
>>> fs
|
||||
'ТАУ'
|
||||
>>> fg=personal_data[2][0] #Определение оценки
|
||||
>>> fg
|
||||
5
|
||||
>>> nl=[fs,fg]
|
||||
>>> nl
|
||||
|
||||
## Создайте словарь, в котором ключами будут названия экзаменационных дисциплин, взятые из списка, а значениями - ожидаемые оценки по этим дисциплинам из того же списка.
|
||||
|
||||
>>> s = personal_data[1]
|
||||
>>> s
|
||||
['ТАУ', 'ИАД', 'Схемотехника', 'ЭСУ']
|
||||
>>> g=personal_data[2]
|
||||
>>> g
|
||||
[5, 4, 5, 4]
|
||||
>>> d=dict(zip(s,g))
|
||||
>>> d
|
||||
{'ТАУ': 5, 'ИАД': 4, 'Схемотехника': 5, 'ЭСУ': 4}
|
||||
|
||||
## Напишите инструкцию, которая, используя данные из словаря, обеспечит расчет среднего балла по оценкам на экзаменах. Используя операцию подстановки значений в строку, отобразите результат в виде: "Средний балл=:.".
|
||||
|
||||
>>> c=sum(d.values())/len(d)
|
||||
>>> c
|
||||
4.5
|
||||
>>> str1='Средний балл=:{}'
|
||||
>>> str1.format(c)
|
||||
'Средний балл=:4.5'
|
||||
|
||||
|
||||
|
||||
|
||||
|
После Ширина: | Высота: | Размер: 26 KiB |
|
После Ширина: | Высота: | Размер: 20 KiB |
|
После Ширина: | Высота: | Размер: 15 KiB |
|
После Ширина: | Высота: | Размер: 8.6 KiB |
|
После Ширина: | Высота: | Размер: 9.6 KiB |
@ -0,0 +1,401 @@
|
||||
# Отчет по теме 4
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>>import os
|
||||
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA4')
|
||||
|
||||
# 2 Изучение стандартных встроенных функций
|
||||
|
||||
# 2.1 Изучение функции округления
|
||||
|
||||
Была применена функция round с одним и двумя аргументами и изучены различия между указанием одного и двух аргументов.
|
||||
|
||||
>>>round(123.456,1)
|
||||
123.5
|
||||
>>>round(123.456,0)
|
||||
123.0
|
||||
>>>type(round(123.456,1))
|
||||
<class 'float'>
|
||||
>>>type(round(123.456,0)) #В результате получаются числа класса float, так как указано сколько цифр после запятой нужно оставить. Два вышеупомянутых варианта отличаются именно количесивом цифр, оставленных после запятой при округлении.
|
||||
<class 'float'>
|
||||
>>>round(123.456)
|
||||
123
|
||||
>>>type(round(123.456)) #В данном случае получается число типа int, так как не указано количество цифр после запятой, и по умолчанию число округляется до целого.
|
||||
<class 'int'>
|
||||
|
||||
# 2.2 Изучение функции создания последовательности
|
||||
|
||||
Была применена функция range с тремя и с одним аргументо и изучена разница между этими способами применения функции.
|
||||
|
||||
>>>gg=range(76,123,9)
|
||||
>>> type(gg)
|
||||
<class 'range'>
|
||||
>>>list(gg)
|
||||
[76, 85, 94, 103, 112, 121]
|
||||
>>>range(23) #При указывание одного аргумента строится последовательность от 0 до указанного числа не включительно, с шагом 1.
|
||||
range(0, 23)
|
||||
>>>list(range(23))
|
||||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
|
||||
|
||||
# 2.3 Изучение функции zip
|
||||
|
||||
Была применена функция zip и произведена попытка обращения к элементу созданной последовательности по индексу.
|
||||
|
||||
>>> qq=["Goloshchapov", "Filipov", "Xodyuck", "Ivanov"]
|
||||
>>> ff=zip(gg,qq)
|
||||
>>> tuple(ff) #В итоге получится последовательность из 4 элементов, так как в qq 4 элемента, а в gg 6. Длина равна длине самого короткого списка.
|
||||
((76, 'Goloshchapov'), (85, 'Filipov'), (94, 'Xodyuck'), (103, 'Ivanov'))
|
||||
>>> ff[1] #Исходя из текста ошибки, можно сказать, что zip обьекты не поддерживают доступ по индексу.
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#16>", line 1, in <module>
|
||||
ff[1]
|
||||
TypeError: 'zip' object is not subscriptable
|
||||
|
||||
# 2.4 Изучение функции eval
|
||||
|
||||
Была применена функция eval.
|
||||
|
||||
>>> fff=float(input('коэффициент усиления=')); dan=eval('5*fff-156')
|
||||
коэффициент усиления=5
|
||||
>>> fff
|
||||
5.0
|
||||
>>> dan
|
||||
-131.0
|
||||
|
||||
# 2.5 Изучение функции exec
|
||||
|
||||
Была применена функция exec.
|
||||
|
||||
>>> exec(input('введите инструкции:'))
|
||||
введите инструкции:perem=-123.456;gg=round(abs(perem)+98,3)
|
||||
>>> gg
|
||||
221.456
|
||||
|
||||
Отличие eval() от exec() в том, что eval() вычисляет выражение , а exec() выполняет инструкции . Выражения — подмножество инструкций, отличающееся наличием результата. Например, 1, 1+2, a+3 — выражения, а присваивание или условный оператор — инструкции.
|
||||
|
||||
# 2.6 Изучение ряда полезных функций (abs, pow, max, min, sum, divmod, len, map)
|
||||
|
||||
Был изучен и применен ряд полезных функций:
|
||||
|
||||
abs - выдает значение по модулю;
|
||||
len - выдает длину обьекта;
|
||||
max - выдает максимальное число из списка введенных в аргумент;
|
||||
min - выдает минимальное число из списка введенных в аргумент;
|
||||
pow - при двух аргументах: возводит первый в степень второго, при наличие третьего аргумента делит получившийся результат на третий аргумент и показывает остаток;
|
||||
sum - суммирует числа;
|
||||
divmod - возвращает кортеж (a // b, a % b), где а и b соответственно первый и второй аргумент;
|
||||
map - применяет функцию из первого аргумента к каждому элементу итерируемого обьекта, который указан во втором аргументе.
|
||||
|
||||
>>>abs(-5)
|
||||
5
|
||||
>>>len("hi")
|
||||
2
|
||||
>>>max(3, 4)
|
||||
4
|
||||
>>>min(3, 4)
|
||||
3
|
||||
>>>pow(3, 2)
|
||||
9
|
||||
>>>pow(3, 2, 3)
|
||||
0
|
||||
>>>sum([2, 3])
|
||||
5
|
||||
>>>divmod(7, 2)
|
||||
(3, 1)
|
||||
>>>list(map(lambda x: x*2, [1, 2, 3, 4]))
|
||||
[2, 4, 6, 8]
|
||||
|
||||
# 3 Изучение функций из модуля math для работы с математическими выражениями и операциями.
|
||||
|
||||
Был импортирован и изучен модуль math. Были изучены и применены некоторые функции из модуля math.
|
||||
|
||||
sin - считает и выдает синус аргумента в радианах;
|
||||
acos - считает и выдает арккосинус аргумента в радианах;
|
||||
degrees - переводит число в радианах в градусы;
|
||||
radians - переводит число в градусах в радианы;
|
||||
exp - выдает значение числа e возведенного в степень, которая указана в аргументе;
|
||||
log - считает натуральный логарифм числа;
|
||||
log10 - считает делятичный логарифм числа;
|
||||
sqrt - считает корень из числа в аргументе;
|
||||
ceil - округляет число вверх;
|
||||
floor - округляет число вниз;
|
||||
pi - данная функция является представлением числа пи в питоне.
|
||||
|
||||
>>>import math
|
||||
>>>dir(math)
|
||||
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fma', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'sumprod', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
|
||||
>>>help(math.factorial)
|
||||
Help on built-in function factorial in module math:
|
||||
|
||||
factorial(n, /)
|
||||
Find n!.
|
||||
|
||||
>>>math.factorial(5)
|
||||
120
|
||||
>>>math.sin(180)
|
||||
-0.8011526357338304
|
||||
>>>math.acos(0.5)
|
||||
1.0471975511965979
|
||||
>>>help(math.degrees)
|
||||
Help on built-in function degrees in module math:
|
||||
|
||||
degrees(x, /)
|
||||
Convert angle x from radians to degrees.
|
||||
|
||||
>>>math.degrees(0.5)
|
||||
28.64788975654116
|
||||
>>>math.radians(28)
|
||||
0.4886921905584123
|
||||
>>>math.exp(1)
|
||||
2.718281828459045
|
||||
>>>math.log(1)
|
||||
0.0
|
||||
>>>math.log10(1)
|
||||
0.0
|
||||
>>>math.sqrt(9)
|
||||
3.0
|
||||
>>>help(math.ceil)
|
||||
Help on built-in function ceil in module math:
|
||||
|
||||
ceil(x, /)
|
||||
Return the ceiling of x as an Integral.
|
||||
|
||||
This is the smallest integer >= x.
|
||||
|
||||
>>>math.ceil(4.7)
|
||||
5
|
||||
>>>math.floor(4.7)
|
||||
4
|
||||
>>>math.pi
|
||||
3.141592653589793
|
||||
>>>math.sin(2*math.pi/7+math.exp(0.23))
|
||||
0.8334902641414562
|
||||
|
||||
# 4 Изучение модуля cmath для работы с комплексными числами
|
||||
|
||||
Был импортирован и изучен модуль cmath и применены функции для извлечения корня и расчета фазы комплексного числа.
|
||||
|
||||
>>>import cmath
|
||||
>>>dir(cmath)
|
||||
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']
|
||||
>>>cmath.sqrt(1.2-0.5j)
|
||||
(1.118033988749895-0.22360679774997896j)
|
||||
>>>cmath.phase(1-0.5j)
|
||||
-0.4636476090008061
|
||||
|
||||
# 5 Изучения стандартного модуля random для работы с псевдослучайными числами
|
||||
|
||||
Были самостоятельно изучены и применены методы модуля random:
|
||||
|
||||
random - равномерно распределенное случайное число;
|
||||
uniform- равномерно распределенное случайное число в диапазоне, заданном двумя аргументами;
|
||||
randint - случайные целые числа в диапазоне от значения первого аргумента до значения второго;
|
||||
gauss - нормально распределенное случайное число с средним равным первому аргументу и стандартным отклонением равным второму аргументу;
|
||||
choice - случайный выбор из совокупности указанной в аргументе;
|
||||
shuffle - случайная перестановка элементов списка в аргументе;
|
||||
sample - случайный выбор подмножества элементов из списка в первом аргументе (количество элементов равно числу, указанному во втором аргументе);
|
||||
betavariate - случайное число с бета-распределением, где альфа равна первому аргументу, а бета равна второму аргументу;
|
||||
gammavariate - случайное число с гамма-распределением, где альфа равна первому аргументу, а бета равна второму аргументу.
|
||||
|
||||
Также был самостоятельно создан список с 4 случайными значениями, подчиняющимися, соответственно, равномерному, нормальному, бета и гамма – распределениям и с любыми допустимыми значениями параметров этих распределений.
|
||||
|
||||
>>>import random
|
||||
>>>dir(random)
|
||||
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_ONE', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_index', '_inst', '_isfinite', '_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)
|
||||
Help on method seed in module random:
|
||||
|
||||
seed(a=None, version=2) method of random.Random instance
|
||||
Initialize internal state from a seed.
|
||||
|
||||
The only supported seed types are None, int, float,
|
||||
str, bytes, and bytearray.
|
||||
|
||||
None or no argument seeds from current time or from an operating
|
||||
system specific randomness source if available.
|
||||
|
||||
If *a* is an int, all bits are used.
|
||||
|
||||
For version 2 (the default), all of the bits are used if *a* is a str,
|
||||
bytes, or bytearray. For version 1 (provided for reproducing random
|
||||
sequences from older versions of Python), the algorithm for str and
|
||||
bytes generates a narrower range of seeds.
|
||||
|
||||
Функция random.seed() инициализирует начальное состояние генератора псевдослучайных чисел. Используется генератор псевдослучайных чисел (ГПСЧ): есть скрытое состояние (переменная в модуле random), на основе которого генерируется очередной результат random.random(), а само состояние обновляется.
|
||||
Генерация устроена так, что распределение результатов близко к равномерному.
|
||||
|
||||
>>> random.seed()
|
||||
>>> r = random.random()
|
||||
>>> r
|
||||
0.566968813410544
|
||||
>>> u = random.uniform(1, 10)
|
||||
>>> u
|
||||
8.395257535596317
|
||||
>>> rnd = random.randint(1, 10)
|
||||
>>> rnd
|
||||
1
|
||||
>>> g = random.gauss(0, 1)
|
||||
>>> g
|
||||
0.7923172140812969
|
||||
>>> l = ["a", "b", "c"]
|
||||
>>> ch = random.choice(l)
|
||||
>>> ch
|
||||
'b'
|
||||
>>> random.shuffle(l)
|
||||
>>> l
|
||||
['b', 'c', 'a']
|
||||
>>> s = random.sample(l, 2)
|
||||
>>> s
|
||||
['c', 'b']
|
||||
>>> b = random.betavariate(2, 5)
|
||||
>>> b
|
||||
0.30401704168811955
|
||||
>>> g = random.gammavariate(2, 2)
|
||||
>>> g
|
||||
4.631853628453073
|
||||
>>> random_list = [random.uniform(1, 10), random.gauss(5, 2), random.betavariate(2, 5), random.gammavariate(2, 2)]
|
||||
>>> random_list
|
||||
[3.2315627374553832, 4.74773932227122, 0.25797354673276174, 2.476042709934176]
|
||||
|
||||
# 6 Изучение модуля time для работы со временем и календарями
|
||||
|
||||
Были изучены и применены методы из модуля time:
|
||||
|
||||
time - возвращает время в секундах, прошедшее с начала эпохи, за которое обычно принимается 1.01.1970г;
|
||||
gmtime - возвращает объект класса struct_time, содержащий полную информацию о текущем времени (UTC): год (tm_year), месяц (tm_mon), день tm_mday)...;
|
||||
localtime - для получения «местного» времени (которое стоит на компьютере);
|
||||
asctime - преобразовывает представление времени из кортежа в строку (просто отображает время в формате строки);
|
||||
ctime - преобразовывает время в секундах, прошедшего с начала эпохи, в строку;
|
||||
sleep - прерывает работу программы на заданное время в секундах;
|
||||
mktime - преобразовает время из типа кортежа или struct_time в число секунд с начала эпохи.
|
||||
|
||||
>>> import time
|
||||
>>> dir(time)
|
||||
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']
|
||||
>>> c1=time.time()
|
||||
>>> c1
|
||||
1759240944.8244405
|
||||
>>> c2=time.time()-c1
|
||||
>>> c2
|
||||
19.052595853805542
|
||||
>>> dat=time.gmtime()
|
||||
>>> dat
|
||||
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=14, tm_min=3, tm_sec=22, tm_wday=1, tm_yday=273, tm_isdst=0)
|
||||
>>> dat.tm_mon
|
||||
9
|
||||
>>> dat.tm_hour
|
||||
14
|
||||
>>> tim=time.localtime()
|
||||
>>> tim
|
||||
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=17, tm_min=5, tm_sec=35, tm_wday=1, tm_yday=273, tm_isdst=0)
|
||||
>>> time.asctime()
|
||||
'Tue Sep 30 17:06:29 2025'
|
||||
>>> time.ctime()
|
||||
'Tue Sep 30 17:06:47 2025'
|
||||
>>> time.sleep(2) #Две секунды в IDLE не появлялось приглашение для ввода команды.
|
||||
>>> time.mktime(tim)
|
||||
1759241135.0
|
||||
>>> time.localtime(c1)
|
||||
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=17, tm_min=2, tm_sec=24, tm_wday=1, tm_yday=273, tm_isdst=0)
|
||||
|
||||
# 7 Изучение графических функций
|
||||
|
||||
Был создан линейный график, на котором изображена зависимость сигналов от времени.
|
||||
|
||||
>>> import pylab
|
||||
>>> x=list(range(-3,55,4))
|
||||
>>> t=list(range(15))
|
||||
>>> x;t
|
||||
[-3, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53]
|
||||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||||
>>> pylab.plot(t,x)
|
||||
[<matplotlib.lines.Line2D object at 0x000002666C2AE490>]
|
||||
>>> pylab.title('Первый график')
|
||||
Text(0.5, 1.0, 'Первый график')
|
||||
>>> pylab.xlabel('время')
|
||||
Text(0.5, 0, 'время')
|
||||
>>> pylab.ylabel('сигнал')
|
||||
Text(0, 0.5, 'сигнал')
|
||||
>>> pylab.show()
|
||||
|
||||

|
||||
|
||||
Далее были созданы два линейных графика на одном поле. (По оси y - значения из списка, по оси х - порядковый номер значений).
|
||||
|
||||
>>> X1=[12,6,8,10,7]
|
||||
>>> X2=[5,7,9,11,13]
|
||||
>>> pylab.plot(X1)
|
||||
[<matplotlib.lines.Line2D object at 0x000002666DAA2D50>]
|
||||
>>> pylab.plot(X2)
|
||||
[<matplotlib.lines.Line2D object at 0x000002666DAA2E90>]
|
||||
>>> pylab.show()
|
||||
|
||||

|
||||
|
||||
Также была создана круговая диаграмма.
|
||||
|
||||
>>> region=['Центр','Урал','Сибирь','Юг']
|
||||
>>> naselen=[65,12,23,17]
|
||||
>>> pylab.pie(naselen,labels=region)
|
||||
([<matplotlib.patches.Wedge object at 0x000002666C285160>, <matplotlib.patches.Wedge object at 0x000002666D04C7D0>, <matplotlib.patches.Wedge object at 0x000002666D04CB90>, <matplotlib.patches.Wedge object at 0x000002666D04CE10>], [Text(-0.191013134139045, 1.0832885038559115, 'Центр'), Text(-0.861328292412156, -0.6841882582231001, 'Урал'), Text(0.04429273995539947, -1.0991078896938387, 'Сибирь'), Text(0.9873750693480946, -0.48486129194837324, 'Юг')])
|
||||
>>> pylab.show()
|
||||
|
||||

|
||||
|
||||
Самостоятельно была создана гистограмма (по оси у - частота повторения значений, по оси х сами значения)
|
||||
|
||||
>>> data = [1, 2, 3, 3, 2, 3, 3, 3, 2]
|
||||
>>> pylab.hist(data, bins=3)
|
||||
(array([1., 3., 5.]), array([1. , 1.66666667, 2.33333333, 3. ]), <BarContainer object of 3 artists>)
|
||||
>>> pylab.title("Гистограмма")
|
||||
Text(0.5, 1.0, 'Гистограмма')
|
||||
>>> pylab.show()
|
||||
|
||||

|
||||
|
||||
Самостоятельно была создана столбиковая диаграмма, где по оси х - категории, а по оси у - значения, относящиеся к каждой категории.
|
||||
|
||||
>>> c = ['A', 'B', 'C', 'D']
|
||||
>>> v = [25, 40, 30, 50]
|
||||
>>> pylab.bar(c, v)
|
||||
<BarContainer object of 4 artists>
|
||||
>>> pylab.title("Столбиковая диаграмма")
|
||||
Text(0.5, 1.0, 'Столбиковая диаграмма')
|
||||
>>> pylab.show()
|
||||
|
||||

|
||||
|
||||
# 8 Изучение модуля statistics для работы в сфере статистики
|
||||
|
||||
Самостоятельно был импортирован и изучен модуль statistics. Из него были использованы функции подсчета среднего значения, медианы и моды для выборки в списке.
|
||||
|
||||
>>> import statistics
|
||||
>>> dir(statistics)
|
||||
['Counter', 'Decimal', 'Fraction', 'LinearRegression', 'NormalDist', 'StatisticsError', '_SQRT2', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_coerce', '_convert', '_decimal_sqrt_of_frac', '_exact_ratio', '_fail_neg', '_float_sqrt_of_frac', '_integer_sqrt_of_frac_rto', '_isfinite', '_kernel_invcdfs', '_mean_stdev', '_newton_raphson', '_normal_dist_inv_cdf', '_quartic_invcdf', '_quartic_invcdf_estimate', '_random', '_rank', '_sqrt_bit_width', '_sqrtprod', '_ss', '_sum', '_triweight_invcdf', '_triweight_invcdf_estimate', 'acos', 'asin', 'atan', 'bisect_left', 'bisect_right', 'correlation', 'cos', 'cosh', 'count', 'covariance', 'defaultdict', 'erf', 'exp', 'fabs', 'fmean', 'fsum', 'geometric_mean', 'groupby', 'harmonic_mean', 'hypot', 'isfinite', 'isinf', 'itemgetter', 'kde', 'kde_random', 'linear_regression', 'log', 'math', 'mean', 'median', 'median_grouped', 'median_high', 'median_low', 'mode', 'multimode', 'namedtupl e', 'numbers', 'pi', 'pstdev', 'pvariance', 'quantiles', 'random', 'reduce', 'repeat', 'sin', 'sqrt', 'stdev', 'sumprod', 'sys', 'tan', 'tau', 'variance']
|
||||
>>> data = [1, 2, 2, 3, 4, 5, 5, 5, 6]
|
||||
>>> mean = statistics.mean(data)
|
||||
>>> mean
|
||||
3.6666666666666665
|
||||
>>> median = statistics.median(data)
|
||||
>>> median
|
||||
4
|
||||
>>> mode = statistics.mode(data)
|
||||
>>> mode
|
||||
5
|
||||
|
||||
# 9 Завершение работы в IDLE
|
||||
|
||||
Был завершен сеанс в среде IDLE.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
# Общее контрольное задание по теме 4
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Реализовать, записать в текстовый файл и проанализировать результаты последовательности инструкций, выполняющих следующие действия:
|
||||
|
||||
• Напишите и исполните единое выражение, реализующее последовательное выполнение следующих операций: вычисление фазы комплексного числа 0.2+0.8j, округление результата до двух знаков после запятой, умножение полученного значения на 20, получение кортежа из двух значений: округленное вниз значение от деления результата на 3 и остатка от этого деления.
|
||||
|
||||
• Создайте объект класса struct_time с временными параметрами для текущего московского времени. Создайте строку с текущим часом и минутами.
|
||||
|
||||
• Создайте список с элементами – названиями дней недели. Сделайте случайную выборку из этого списка с тремя днями недели.
|
||||
|
||||
• Напишите инструкцию случайного выбора числа из последовательности целых чисел от 14 до 32 с шагом 3.
|
||||
|
||||
• Сгенерируйте нормально распределенное число N с математическим ожиданием 15 и стандартным отклонением 4 и округлите его до целого значения. Создайте список с N элементами – случайно выбранными буквами латинского алфавита.
|
||||
|
||||
• Напишите инструкцию для определения временного интервала в минутах, прошедшего с момента предыдущего (из п.2) определения временных параметров.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> divmod((round(cmath.phase(0.2+0.8j), 2))*20, 3)
|
||||
(8.0, 2.6000000000000014)
|
||||
>>> divmod(math.floor((round(cmath.phase(0.2+0.8j), 2))*20), 3) #Для получения остатка в целом виде и делении целых чисел, можно использовать такое выражение.
|
||||
(8, 2)
|
||||
|
||||
>>> v = time.localtime()
|
||||
>>> v
|
||||
time.struct_time(tm_year=2025, tm_mon=9, tm_mday=30, tm_hour=18, tm_min=48, tm_sec=25, tm_wday=1, tm_yday=273, tm_isdst=0)
|
||||
>>> st = v.tm_hour, v.tm_min
|
||||
>>> st
|
||||
(18, 48)
|
||||
>>> st = str(v.tm_hour)+" hour "+str(v.tm_min)+" min "
|
||||
>>> st
|
||||
'18 hour 48 min '
|
||||
|
||||
>>> ned = ["пн", "вт", "ср", "чт", "пт", "сб", "вскр"]
|
||||
>>> random.sample(ned, 3)
|
||||
['чт', 'сб', 'пт']
|
||||
|
||||
>>> random.choice(list(range(14, 33, 3)))
|
||||
26
|
||||
|
||||
>>> N = round(random.gauss(15, 4))
|
||||
>>> N
|
||||
12
|
||||
>>> import string #Импортировали модуль в котором есть латинский алфавит, чтобы из него выбрать буквы. Без использования этого модуля создавать список с алфавитом нужно было бы вручную.
|
||||
>>> random.sample(string.ascii_letters, N)
|
||||
['q', 'F', 'z', 'E', 'd', 'C', 'k', 'N', 'e', 'n', 'm', 'V']
|
||||
|
||||
>>> time.localtime().tm_min - v.tm_min
|
||||
21
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
# Индивидуальное контрольное задание по теме 4
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Определите время начала текущего временного промежутка в секундах.
|
||||
|
||||
Создайте список с двумя элементами: 0.3+7j и -34.6. Создайте второй список с элементами, равными квадратным корням из значений элементов первого списка.
|
||||
|
||||
Определите текущее время, прошедшее с зафиксированного начала временного промежутка.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> v=time.localtime()
|
||||
>>> k=time.mktime(v)
|
||||
>>> k
|
||||
1760088098.0
|
||||
|
||||
|
||||
>>> spisok1 = [0.3+7j, -34.6]
|
||||
>>> spisok2= [cmath.sqrt(x) for x in spisok1]
|
||||
>>> spisok2
|
||||
[(1.9113379636057752+1.8311779845554805j), 5.882176467941097j]
|
||||
|
||||
>>> (time.mktime(time.localtime())-k)/60
|
||||
1.2
|
||||
|
После Ширина: | Высота: | Размер: 38 KiB |
|
После Ширина: | Высота: | Размер: 18 KiB |
@ -0,0 +1,360 @@
|
||||
# Отчет по теме 5
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>>import os
|
||||
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA5')
|
||||
|
||||
Управляющие инструкции, как и в других языках программирования, используются в Python для разветвления линий потока. Их применение имеет как сходство, так и заметные отличия по сравнению с другими языками программирования. В программах на Python они применяются по следующей общей схеме: <Управляющая инструкция>: <отступы><Блок инструкций>
|
||||
|
||||
Здесь управляющая инструкция начинается зарезервированными словами, такими как if, while, for… и дополняется логическим выражением, со значением True или False. Блок инструкций – это совокупность инструкций на языке Python, возможно, включающая вложенные управляющие инструкции. Относительно управляющей инструкции блок инструкций сдвигается вправо с использованием одинаковых отступов, задаваемых либо некоторым числом пробелов, либо одной или несколькими табуляциями.
|
||||
|
||||
# 2 Изучение блока ЕСЛИ
|
||||
|
||||
Были изучены и применены различные конструкции блоков с использованием условия if. Рассмотрены также elif и else. Изучены блоки условий, записываемые в одну строку.
|
||||
|
||||
Общее правило написания: if <условие>: <отступы><Блок инструкций, выполняемый, если условие истинно> [elif <условие2>: <отступы><Блок инструкций2, выполняемый, если условие2 истинно> ] [else: < отступы><Блок инструкций3, выполняемый, если условие ложно> ]
|
||||
|
||||
Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Отступы во всех строках блока должны быть одинаковыми по отношению к первому символу управляющей инструкции. Если имеется вложенная управляющая инструкция, то она вводится с таким же отступом, а все строки ее блоков – отступают по отношению к ее первому символу. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки. Если в Блоке инструкций только одна инструкция, её можно записывать без отступов сразу за знаком «:».
|
||||
|
||||
>>> porog = 35
|
||||
>>> rashod1 = 21
|
||||
>>> rashod2 = 15
|
||||
>>> 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
|
||||
...
|
||||
>>> dohod
|
||||
-8
|
||||
|
||||
В конструкции if-elif-else всегда выполняется только одна ветвь. Даже если условие в elif также истинно, оно не будет проверено и, соответственно, не выполнится, если до этого уже выполнился блок if. Это связано с тем, что после выполнения любого блока инструкции (будь то if, elif или else) остальные части конструкции игнорируются.
|
||||
|
||||
>>> if porog==3:
|
||||
... dohod=1
|
||||
... elif porog==4:
|
||||
... dohod=2
|
||||
... elif porog==5:
|
||||
... dohod=3
|
||||
... else:
|
||||
... dohod=0
|
||||
...
|
||||
>>> dohod
|
||||
0
|
||||
|
||||
Условные инструкции могут записываться также в одну строку в операторе присваивания по следующей схеме: <Объект>=<значение 1> if <условие> else <значение 2> или ещё: if <условие>: <инструкция1>[;<инструкция2>….]
|
||||
|
||||
>>> dohod=2 if porog>=4 else 0
|
||||
>>> dohod
|
||||
2
|
||||
>>> if porog>=5 : rashod1=6; rashod2=0
|
||||
...
|
||||
>>> rashod1;rashod2
|
||||
6
|
||||
0
|
||||
|
||||
# 3 Изучение блока For
|
||||
|
||||
Был изучен и применен блок for, разобрана простая конструкция и несколько сложных.
|
||||
|
||||
Общее правило написания: for <Объект-переменная цикла> in <объект>: <отступы><Блок инструкций 1 – тело цикла> [else: < отступы ><Блок инструкций 2 – если в цикле не сработал break>]
|
||||
|
||||
Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break. Если в Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием.
|
||||
|
||||
# 3.1 Изучение простого цикла for
|
||||
|
||||
Был применен простой цикл for, который перебирает числа из сгенерированной последовательности и каждый раз увеличивает заданное значение на это число.
|
||||
|
||||
>>> temperatura=5
|
||||
>>> for i in range(3,18,3):
|
||||
... temperatura+=i
|
||||
...
|
||||
...
|
||||
>>> temperatura
|
||||
50
|
||||
|
||||
# 3.2 Изучение первого сложного цикла for
|
||||
|
||||
Был применен цикл for, который приписывает к списку первый его элемент каждую итерацию, до тех пор, пока длина списка не будет равна или больше 10. Испробованы два способа передачи списка - как изменяемый список и как неизменяемую копию.
|
||||
|
||||
>>> 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]
|
||||
|
||||
Как видно, в конец цикла добавляется двойка до тех пор, пока длина не превысит 10. sps - это объект, по которому проходит k, и объект, изменяющийся внутри цикла. Если список изменяется во время цикла, это влияет на последующие итерации. (При этом else в данном случае относится к if, а не к for)
|
||||
|
||||
>>> sps=[2,15,14,8]
|
||||
>>> for k in sps[:]:
|
||||
... if len(sps)<=10:sps.append(sps[0]) #В этом варианте список итерируется по копии, то есть исходному списку, чья длина всегда равна 4. Цикл выполняется 4 раза, так как список имеет 4 элемента.
|
||||
... else:break
|
||||
...
|
||||
>>> sps
|
||||
[2, 15, 14, 8, 2, 2, 2, 2]
|
||||
|
||||
# 3.3 Изучение второго сложного цикла for
|
||||
|
||||
Был приненен цикл for, в котором при каждой итерации для i от 0 до 9, созданный пустой список пополняется значением от 1 до 100 и подсчитывается сумма чисел в списке. При достижении суммы числа более 500, итерация прерывается. Если же итерации успевают закончиться естественным образом и сумма получается значением менее 500, по сумма печатается на экран.
|
||||
|
||||
>>> 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)
|
||||
...
|
||||
>>> ss # Значение не было выведено автоматически из-за того что значение превышает 500
|
||||
545
|
||||
|
||||
Повтор операций:
|
||||
|
||||
>>> ss=0
|
||||
>>> sps5=[]
|
||||
>>> for i in range(10):
|
||||
... sps5.append(rn.randint(1,100))
|
||||
... ss=sum(sps5)
|
||||
... if ss>500: break
|
||||
... else:
|
||||
... print(ss)
|
||||
...
|
||||
...
|
||||
458 # В данном случае сумма не превышает 500, поэтому она вывелась автоматически
|
||||
|
||||
# 3.4 Изучение цикла с символьной строкой
|
||||
|
||||
Был применен цикл, который перебирает каждый символ из stroka и дополняет им ранее созданную пустую строку stroka1.
|
||||
|
||||
>>> stroka='Это – автоматизированная система'
|
||||
>>> stroka1=""
|
||||
>>> for ss in stroka:
|
||||
... stroka1+=" "+ss
|
||||
...
|
||||
...
|
||||
>>> stroka1
|
||||
' Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а'
|
||||
>>> ss
|
||||
'а'
|
||||
|
||||
Переменная ss проходит по всему строковому объекту, на каждой итерации принимая значение одного знака. Этот знак с предшествующим пробелом дописывается в конец другой, изначально пустой строки. Цикл закончится, когда закончится исходная строка.
|
||||
|
||||
# 3.5 Изучение записи цикла в строке
|
||||
|
||||
Был использован цикл для создания сигналов (цикл создает список из чисел, вычесленных по определенному выражению, в которое входит i, изменяемое в ходе итераций от 0 до 99). А также построоен график отображения сигналов.
|
||||
|
||||
>>> import math
|
||||
>>> sps2=[math.sin(i*math.pi/5+2) for i in range(100)]
|
||||
>>> import pylab
|
||||
>>> pylab.plot(range(100), sps2)
|
||||
[<matplotlib.lines.Line2D object at 0x00000272256E6490>]
|
||||
>>> pylab.title("Сигналы")
|
||||
Text(0.5, 1.0, 'Сигналы')
|
||||
>>> pylab.show()
|
||||
|
||||
Здесь используется конструкция list comprehention (генератор списков). В общем виде она выглядит так: <итоговый список> = [<выражение> for <элемент> in <исходный объект> if <условие>]
|
||||
|
||||

|
||||
|
||||
# 4 Изучение цикла While
|
||||
|
||||
Были изучены и применены различные варианты циклов с использованием блоков while.
|
||||
|
||||
Общее правило написания: while <Условие>: <отступы><Блок инструкций 1 – тело цикла> [else: <отступы><Блок инструкций 2 – если в цикле не сработал break>] Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или не равно 0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться. Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) условия.
|
||||
|
||||
# 4.1 Изучение цикла while со счетчиком
|
||||
|
||||
Был применен цикл while, который уменьшает значение rashod на 50 единиц. Здесь rashod = True до тех пор пока его значение положительное. Когда rashod становится равным 0, цикл прерывается. На каждой итерации печатается значение rashod.
|
||||
|
||||
>>> rashod=300
|
||||
>>> while rashod:
|
||||
... print("Расход=",rashod)
|
||||
... rashod-=50
|
||||
...
|
||||
Расход= 300
|
||||
Расход= 250
|
||||
Расход= 200
|
||||
Расход= 150
|
||||
Расход= 100
|
||||
Расход= 50
|
||||
|
||||
# 4.2 Изучение цикла while с символьной строкой
|
||||
|
||||
Был применен цикл while, который для каждой i, что изменяется от 0 до длины строки stroka, вычисляет значение r, используя выражение, в которое входит i, и формирует из этих значений список. Далее по значениям из списка был построен график.
|
||||
|
||||
>>>import math
|
||||
>>> stroka='Расчет процесса в объекте регулирования'
|
||||
>>> i=0
|
||||
>>> sps2=[]
|
||||
>>> while i<len(stroka):
|
||||
... r=1-2/(1+math.exp(0.1*i))
|
||||
... sps2.append(r)
|
||||
... print('Значение в момент',i,"=",r)
|
||||
... i+=1
|
||||
...
|
||||
Значение в момент 0 = 0.0
|
||||
Значение в момент 1 = 0.049958374957880025
|
||||
Значение в момент 2 = 0.09966799462495568
|
||||
Значение в момент 3 = 0.14888503362331795
|
||||
Значение в момент 4 = 0.197375320224904
|
||||
Значение в момент 5 = 0.2449186624037092
|
||||
Значение в момент 6 = 0.2913126124515909
|
||||
Значение в момент 7 = 0.3363755443363322
|
||||
Значение в момент 8 = 0.3799489622552249
|
||||
Значение в момент 9 = 0.421899005250008
|
||||
Значение в момент 10 = 0.4621171572600098
|
||||
Значение в момент 11 = 0.5005202111902354
|
||||
Значение в момент 12 = 0.5370495669980353
|
||||
Значение в момент 13 = 0.5716699660851172
|
||||
Значение в момент 14 = 0.6043677771171636
|
||||
Значение в момент 15 = 0.6351489523872873
|
||||
Значение в момент 16 = 0.6640367702678489
|
||||
Значение в момент 17 = 0.6910694698329307
|
||||
Значение в момент 18 = 0.7162978701990245
|
||||
Значение в момент 19 = 0.7397830512740043
|
||||
Значение в момент 20 = 0.7615941559557649
|
||||
Значение в момент 21 = 0.7818063576087741
|
||||
Значение в момент 22 = 0.8004990217606297
|
||||
Значение в момент 23 = 0.8177540779702878
|
||||
Значение в момент 24 = 0.8336546070121553
|
||||
Значение в момент 25 = 0.8482836399575129
|
||||
Значение в момент 26 = 0.8617231593133063
|
||||
Значение в момент 27 = 0.874053287886007
|
||||
Значение в момент 28 = 0.8853516482022625
|
||||
Значение в момент 29 = 0.8956928738431645
|
||||
Значение в момент 30 = 0.9051482536448664
|
||||
Значение в момент 31 = 0.9137854901178277
|
||||
Значение в момент 32 = 0.9216685544064713
|
||||
Значение в момент 33 = 0.9288576214547277
|
||||
Значение в момент 34 = 0.935409070603099
|
||||
Значение в момент 35 = 0.9413755384972874
|
||||
Значение в момент 36 = 0.9468060128462683
|
||||
Значение в момент 37 = 0.9517459571646616
|
||||
Значение в момент 38 = 0.9562374581277391
|
||||
>>> pylab.plot(range(len(stroka)), sps2)
|
||||
[<matplotlib.lines.Line2D object at 0x00000272272AB610>]
|
||||
>>> pylab.title("процесс регульрования")
|
||||
Text(0.5, 1.0, 'процесс регульрования')
|
||||
>>> pylab.show()
|
||||
|
||||

|
||||
|
||||
# 4.3 Изучения блока while для проверки числа на свойство простого числа
|
||||
|
||||
Был применен цикл while, который проверяет остаток от деления заданного числа, на все числа начиная от половины собственного значения до 2, при этом если хоть раз этот остаток равен 0, то выводится надпись о том, что число имеет множитель и цикл прерывается. Если же остаток никогда не равен 0, то цикл выполняется до тех пор, пока делитель не будет равен единице и после этого будет выведена надпись, что число является простым.
|
||||
|
||||
>>> chislo=267 #Проверяемое число
|
||||
>>> kandidat =chislo // 2 # Для значений chislo > 1
|
||||
>>> while kandidat > 1:
|
||||
... if chislo%kandidat == 0: # Остаток от деления
|
||||
... print(chislo, ' имеет множитель ', kandidat)
|
||||
... break # else выполняться не будет
|
||||
... kandidat -= 1
|
||||
... else: # При завершении цикла без break
|
||||
... print(chislo, ' является простым!')
|
||||
...
|
||||
...
|
||||
267 имеет множитель 89
|
||||
|
||||
Также предыдущий код был изменен таким образом, что был добавлен цикл for, который еще перебирает числа от 250 до 300 включительно и выполняет вышеописанные операции с каждым числом.
|
||||
|
||||
>>> for chislo in range(250, 301): # Проходим по диапазону чисел
|
||||
... kandidat = chislo // 2 # Для значений chislo > 1
|
||||
... while kandidat > 1:
|
||||
... if chislo % kandidat == 0: # Остаток от деления
|
||||
... print(chislo, ' имеет множитель ', kandidat)
|
||||
... break # else выполняться не будет
|
||||
... kandidat -= 1
|
||||
... else: # При завершении цикла while без break
|
||||
... print(chislo, ' является простым!')
|
||||
...
|
||||
...
|
||||
250 имеет множитель 125
|
||||
251 является простым!
|
||||
252 имеет множитель 126
|
||||
253 имеет множитель 23
|
||||
254 имеет множитель 127
|
||||
255 имеет множитель 85
|
||||
256 имеет множитель 128
|
||||
257 является простым!
|
||||
258 имеет множитель 129
|
||||
259 имеет множитель 37
|
||||
260 имеет множитель 130
|
||||
261 имеет множитель 87
|
||||
262 имеет множитель 131
|
||||
263 является простым!
|
||||
264 имеет множитель 132
|
||||
265 имеет множитель 53
|
||||
266 имеет множитель 133
|
||||
267 имеет множитель 89
|
||||
268 имеет множитель 134
|
||||
269 является простым!
|
||||
270 имеет множитель 135
|
||||
271 является простым!
|
||||
272 имеет множитель 136
|
||||
273 имеет множитель 91
|
||||
274 имеет множитель 137
|
||||
275 имеет множитель 55
|
||||
276 имеет множитель 138
|
||||
277 является простым!
|
||||
278 имеет множитель 139
|
||||
279 имеет множитель 93
|
||||
280 имеет множитель 140
|
||||
281 является простым!
|
||||
282 имеет множитель 141
|
||||
283 является простым!
|
||||
284 имеет множитель 142
|
||||
285 имеет множитель 95
|
||||
286 имеет множитель 143
|
||||
287 имеет множитель 41
|
||||
288 имеет множитель 144
|
||||
289 имеет множитель 17
|
||||
290 имеет множитель 145
|
||||
291 имеет множитель 97
|
||||
292 имеет множитель 146
|
||||
293 является простым!
|
||||
294 имеет множитель 147
|
||||
295 имеет множитель 59
|
||||
296 имеет множитель 148
|
||||
297 имеет множитель 99
|
||||
298 имеет множитель 149
|
||||
299 имеет множитель 23
|
||||
300 имеет множитель 150
|
||||
|
||||
# 5 Завершение работы в IDLE
|
||||
|
||||
Был завершен сеанс в среде IDLE.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,89 @@
|
||||
# Общее контрольное задание по теме 5
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
|
||||
|
||||
• Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
|
||||
|
||||
• Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
|
||||
|
||||
• Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> import string
|
||||
>>> text = "hello my friend"
|
||||
>>> for char in text:
|
||||
... if char in string.ascii_lowercase: #string.ascii_lowercase - это строка, содержащая все строчные буквы английского алфавита: 'abcdefghijklmnopqrstuvwxyz'
|
||||
... order = string.ascii_lowercase.index(char) + 1 #получение порядкого номера в английском алфавите.
|
||||
... print(char, "=", order)
|
||||
... else:
|
||||
... print("это не буква")
|
||||
...
|
||||
...
|
||||
h = 8
|
||||
e = 5
|
||||
l = 12
|
||||
l = 12
|
||||
o = 15
|
||||
это не буква
|
||||
m = 13
|
||||
y = 25
|
||||
это не буква
|
||||
f = 6
|
||||
r = 18
|
||||
i = 9
|
||||
e = 5
|
||||
n = 14
|
||||
d = 4
|
||||
|
||||
|
||||
>>> Str = "Создайте список со словами из задания данного пункта"
|
||||
>>> L=list(Str.split())
|
||||
>>> L
|
||||
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта']
|
||||
>>> slovo = 'список'
|
||||
>>> if slovo in L:
|
||||
... print("Это слово есть в тексте")
|
||||
... else: print("Этого слова нет в тексте")
|
||||
...
|
||||
Это слово есть в тексте
|
||||
|
||||
>>> slovo='авадакедабра'
|
||||
>>> if slovo in L:
|
||||
... print("Это слово есть в тексте")
|
||||
... else: print("Этого слова нет в тексте")
|
||||
...
|
||||
Этого слова нет в тексте
|
||||
|
||||
|
||||
>>> students = ["Goloshchapov", "Ivanov", "Filippov", "Terechov"]
|
||||
>>> leto = [4, 5, 3, 5]
|
||||
>>> students2= ["Ivanov","Goloshchapov", "Terechov", "Filippov"]
|
||||
>>> zima=[3, 5, 4, 4]
|
||||
>>> name=input("Введите фамилию студента: ")
|
||||
Введите фамилию студента: Goloshchapov
|
||||
>>> if name in students and name in students2:
|
||||
... leto_grade = leto[students.index(name)]
|
||||
... zima_grade = zima[students2.index(name)]
|
||||
... print("Студент:", name, ". Летняя:", leto_grade, ", Зимняя:", zima_grade)
|
||||
... else:
|
||||
... print("Студент", name, "не найден.")
|
||||
...
|
||||
Студент: Goloshchapov . Летняя: 4 , Зимняя: 5
|
||||
>>> name=input("Введите фамилию студента: ")
|
||||
Введите фамилию студента: liga
|
||||
>>> if name in students and name in students2:
|
||||
... leto_grade = leto[students.index(name)]
|
||||
... zima_grade = zima[students2.index(name)]
|
||||
... print("Студент:", name, ". Летняя:", leto_grade, ", Зимняя:", zima_grade)
|
||||
... else:
|
||||
... print("Студент", name, "не найден.")
|
||||
...
|
||||
...
|
||||
Студент liga не найден.
|
||||
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
# Индивидуальное контрольное задание по теме 5
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Создайте символьную строку с произвольным набором латинских символов и цифр. Напишите инструкции, обеспечивающие создание списка, в котором значениями являются комбинации цифр из символьной строки, находящиеся между идущими подряд латинскими символами.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> text = "ajsh6086gdlfbal53293jdl"
|
||||
>>> numbers = ""
|
||||
>>> result = []
|
||||
>>> for char in text:
|
||||
... if char in "0123456789":
|
||||
... numbers += char
|
||||
... else:
|
||||
... if numbers: # Если символ не цифра и у нас есть накопленные цифры
|
||||
... result.append(numbers) # Сохраняем найденное число в список
|
||||
... numbers = ""
|
||||
...
|
||||
>>> print("Цифры:", result)
|
||||
Цифры: ['6086', '53293']
|
||||
|
||||
|
После Ширина: | Высота: | Размер: 37 KiB |
|
После Ширина: | Высота: | Размер: 19 KiB |
|
После Ширина: | Высота: | Размер: 6.1 KiB |
|
После Ширина: | Высота: | Размер: 6.3 KiB |
|
После Ширина: | Высота: | Размер: 7.1 KiB |
|
После Ширина: | Высота: | Размер: 7.3 KiB |
|
После Ширина: | Высота: | Размер: 6.2 KiB |
|
После Ширина: | Высота: | Размер: 4.9 KiB |
@ -0,0 +1 @@
|
||||
запись строки в файл
|
||||
@ -0,0 +1,433 @@
|
||||
# Отчет по теме 6
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1 Подготовка к началу работы
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>>import os
|
||||
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6')
|
||||
|
||||
# 2 Изучение вывода данных на экран дисплея
|
||||
|
||||
Были изучены и применены различные способы вывода данных на экран.
|
||||
|
||||
# 2.1 Изучение эхо-вывода
|
||||
|
||||
>>> stroka='Автоматизированная система управления'
|
||||
>>> stroka
|
||||
'Автоматизированная система управления'
|
||||
|
||||
# 2.2 Изучение вывода данных с помощью печати
|
||||
|
||||
Была изучена функция print для вывода текста. Текст был выведен в одну строку, далее в две строки с использованием экранированных последовательностей, далее был выведен текст с дописанным в конце текстом, используя аргумент end. И также был выведен текст в три строки, используя троиные кавычки.
|
||||
|
||||
>>>fff=234.5;gg='Значение температуры = '
|
||||
>>>print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции
|
||||
Значение температуры = 234.5
|
||||
|
||||
По умолчанию выводимые объекты разделяются одним пробелом. Если нужен другой разделитель его можно указать в отдельном аргументе sep:
|
||||
|
||||
>>>print(gg, fff, sep="\n")
|
||||
|
||||
Значение температуры =
|
||||
234.5
|
||||
|
||||
После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, то следует использовать еще один аргумент:
|
||||
|
||||
>>>print(gg, fff,sep='\n',end='***'); print('____')
|
||||
|
||||
Значение температуры =
|
||||
234.5***____
|
||||
|
||||
После end= надо указать какими символами должна закончиться выводимая строка или указать пустую строку. Если в какой-то момент требуется просто перейти на новую строку, можно использовать следующее обращение к функции:
|
||||
|
||||
>>>print()
|
||||
|
||||
Оператор вывода может располагаться на нескольких строках с использованием тройных кавычек:
|
||||
|
||||
>>>print(""" Здесь может выводиться
|
||||
большой текст,
|
||||
занимающий несколько строк""") #В этом варианте текст выводится в три отдельные строки как и при вводе команды, благодаря тройным кавычкам.
|
||||
|
||||
Здесь может выводиться
|
||||
большой текст,
|
||||
занимающий несколько строк
|
||||
>>>print("Здесь может выводиться",
|
||||
"большой текст,",
|
||||
"занимающий несколько строк") #В данном случае текст выводится подрят в одну строку.
|
||||
|
||||
Здесь может выводиться большой текст, занимающий несколько строк
|
||||
|
||||
Разница в двух случаях состоит в том, что в первом случае тройные кавычки воспроизводят текст ровно так, как он был введен. Во втором случае три выводимых объекта-строки перечислены через запятую и выведены как три объекта, разделённые пробелом.
|
||||
|
||||
# 2.3 Изучение вывода данных с помощью функции write
|
||||
|
||||
Был импортирован модуль sys, и использована функция write, которая записывает и выводит текст, а так же возвращается количество байтов, записанных в строку.
|
||||
|
||||
>>> import sys
|
||||
>>> sys.stdout.write('Функция write')
|
||||
Функция write13
|
||||
>>> sys.stdout.write('Функция write\n')
|
||||
Функция write
|
||||
14
|
||||
|
||||
# 3 Изучение ввода данных с клавиатуры
|
||||
|
||||
С помощью функции input был произведен вывод текста, введенного с клавиатуры.
|
||||
|
||||
Так же был создан цикл, который просит пользователя ввести значение до тех пор, пока оно не будет удовлетворять определенному интервалу, а потом выводит это значение на дисплей.
|
||||
|
||||
Также с помощью функции eval Была создана команда, благодаря которой выражение, введенное пользователем с консоли исполняется, и выдается результат расчета.
|
||||
|
||||
>>> psw=input('Введите пароль:')
|
||||
Введите пароль:398fhg
|
||||
>>> psw
|
||||
'398fhg'
|
||||
>>> type(psw)
|
||||
<class 'str'>
|
||||
|
||||
input() всегда возвращает строку. Если нужна не строка, то input надо поместить внутрь функции, изменяющей тип данных.
|
||||
|
||||
>>> while True:
|
||||
... znach=float(input('Задайте коэф.усиления = '))
|
||||
... if znach<17.5 or znach>23.8:
|
||||
... print('Ошибка!')
|
||||
... else:
|
||||
... break
|
||||
...
|
||||
...
|
||||
Задайте коэф.усиления = 15.4
|
||||
Ошибка!
|
||||
Задайте коэф.усиления = 21.6
|
||||
>>> znach
|
||||
21.6
|
||||
|
||||
|
||||
>>> import math
|
||||
>>> print(eval(input('введите выражение для расчета = ')))
|
||||
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
|
||||
1.34504378689765
|
||||
|
||||
Введенная строка преобразуется в исполнительные инструкции с помощью eval(), далее они выполняются и результат выводится на экран. Строка имеет тип, соответствующий результату вычислений. В данном случае - float.
|
||||
|
||||
# 4 Изучение различных способов чтения данных из файла и записи в файл
|
||||
|
||||
Были изучены и применены разные способы чтения и записи данных.
|
||||
|
||||
## 4.1 Изучение модуля os для работы с путями к файлам
|
||||
|
||||
Был просмотрен текущий рабочий каталог, занесен в переменную g. После этого совершен переход в другой рабочий католог.
|
||||
|
||||
Были самостоятельно изучены и применены методы из модуля os и подмодуля os.path:
|
||||
|
||||
mkdir - создает папку в рабочем каталоге (в приложенном фото видно, что в каталоге появилвсь папка);
|
||||
|
||||
>>> os.mkdir("new_folder")
|
||||
|
||||

|
||||
|
||||
rmdir - удаляет из каталога пустую папку;
|
||||
|
||||

|
||||
|
||||
listdir - возвращает список имен файлов/папок в указанном каталоге (или если аргумент не указан, то в текущем каталоге);
|
||||
|
||||
>>>os.listdir(g)
|
||||
['.gitkeep', 'report.txt', 'Ris1.png', 'Ris2.png']
|
||||
|
||||
path.isdir - возвращает true, если папка является существующей в каталоге.
|
||||
|
||||
Далее была создана переменная, содержащая строку - путь к файлу report и имя данного файла. Используя эту переменную, с помощью функций модуля os была создана строка содержащая только путь, потом только имя, а потом применена функция, которая разделяет в одну переменную - путь, в другую - имя файла.
|
||||
|
||||
Далее было проверено существование определенного пути, и существование определенного файла с указаном каталоге.
|
||||
|
||||
>>> os.getcwd()
|
||||
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6'
|
||||
>>> g = str(os.getcwd())
|
||||
>>> g
|
||||
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6'
|
||||
|
||||
>>> os.path.isdir("new_folder")
|
||||
False
|
||||
|
||||
Функция преобразования пути, переданного в качестве аргумента, в абсолютный путь - os.path.abspath(). Абсолютный путь — это полный путь к файлу или каталогу, начиная от корневого каталога системы, а не относительный путь (который зависит от текущего рабочего каталога).
|
||||
|
||||
>>> fil=os.path.abspath("report.txt")
|
||||
>>> fil
|
||||
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6\\report.txt'
|
||||
|
||||
Функции отделения из абсолютного пути только каталога/только имени файла - dirname/basename:
|
||||
|
||||
>>> drkt=os.path.dirname(fil)
|
||||
>>> drkt
|
||||
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6'
|
||||
>>> name = os.path.basename(fil)
|
||||
>>> name
|
||||
'report.txt'
|
||||
|
||||
Функция разделения на кортеж из пути и из имени файла - split:
|
||||
|
||||
>>> os.path.split(os.path.abspath("report.txt"))
|
||||
('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6, 'report.txt')
|
||||
>>> type(os.path.split(os.path.abspath("report.txt")))
|
||||
<class 'tuple'>
|
||||
|
||||
Функция проверки существования пути, заданного в символьной строке - exists:
|
||||
|
||||
>>> os.path.exists(g)
|
||||
True
|
||||
>>> os.path.exists('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA7')
|
||||
True
|
||||
>>> os.path.exists('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA11')
|
||||
False
|
||||
|
||||
Функция проверки существования файла - isfile:
|
||||
|
||||
>>> os.path.isfile('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6\\report.txt') # Такой файл есть
|
||||
True
|
||||
>>> os.path.isfile('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6\\figure_1.png") # Такого файла нет
|
||||
False
|
||||
|
||||
# 4.2 Изучение обобщенного процесса работы с файлами
|
||||
|
||||
Было определено, что для обмена данными с файлами необходимо:
|
||||
|
||||
• Открыть файла с указанием его имени и цели;
|
||||
• Выполнить операции обмена данными с файлом;
|
||||
• Закрыть файл.
|
||||
|
||||
# 4.3 Изучение функции open для открытия файлов с разной целью
|
||||
|
||||
Была применена команда open с различным написанием аргументов, создан файловый обьект. Выведен тип и список атрибутов этого обьекта.
|
||||
|
||||
>>>fp=open(file=drkt+'\\zapis1.txt',mode='w')
|
||||
|
||||
>>>fp=open(drkt+'\\zapis1.txt','w') #если имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать
|
||||
|
||||
>>>fp=open('zapis1.txt','w') #путь в переменной drkt совпадает с рабочим каталогом, значит его можно опустить, оставив только имя открываемого файла
|
||||
|
||||
>>> type(fp)
|
||||
<class '_io.TextIOWrapper'>
|
||||
|
||||
fp – это файловый объект. Он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя открытого файла.
|
||||
|
||||
>>> dir(fp)
|
||||
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__',
|
||||
'__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__',
|
||||
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer',
|
||||
'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure',
|
||||
'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']
|
||||
|
||||
Если требуются другие операции с открываемым файлом, то для второго аргумента «mode=…» могут быть заданы следующие значения: w – запись с созданием нового файла или перезапись существующего файла, w+ - чтение и запись/перезапись файла, r – только чтение (это значение - по умолчанию), r+ - чтение и/или запись в существующий файл, a – запись в конец существующего файла или, если его нет, запись с созданием файла, a+ - то же, что и в «a», но с возможностью чтения из файла.
|
||||
|
||||
Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ «b»:
|
||||
|
||||
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
|
||||
|
||||
# 4.4 Изучение закрытия файла
|
||||
|
||||
Файл был закрыт.
|
||||
|
||||
>>> fp.close()
|
||||
>>> fp1.close()
|
||||
|
||||
# 4.5 Изучение функции write для записи данных в текст
|
||||
|
||||
Был создан список из 12 элементов и поочередно в файл записаны числа из списка в три строки.
|
||||
|
||||
>>> sps=list(range(1,13))
|
||||
>>> sps
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
||||
>>> fp2=open('zapis3.txt','w')
|
||||
>>> fp2.write(str(sps[:4])+'\n')
|
||||
13
|
||||
>>> fp2.write(str(sps[4:8])+'\n')
|
||||
13
|
||||
>>> fp2.write(str(sps[8:])+'\n')
|
||||
16
|
||||
>>> fp2.close()
|
||||
|
||||
Метод выполняет действия по записи данных в файл, но возвращает количество записанных символов.
|
||||
|
||||

|
||||
|
||||
Далее был создан список из трех списков и с помощью цикла for все элементы списка были вписаны в файл в одну строку.
|
||||
|
||||
>>> sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]]
|
||||
>>> sps3
|
||||
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
|
||||
>>> fp3=open('zapis4.txt','w')
|
||||
>>> for i in range(len(sps3)):
|
||||
... stroka4=sps3[i][0]+' '+str(sps3[i][1])
|
||||
... fp3.write(stroka4)
|
||||
...
|
||||
...
|
||||
11
|
||||
11
|
||||
12
|
||||
>>> fp3.close()
|
||||
|
||||

|
||||
|
||||
Далее с помощью цикла for три списка из общего списка были вписаны в файл поочередно в три строки.
|
||||
Запись цикла была сжата в одну строку, и проверено, что при написании той же инструкции в одну строку, содержимое файла не изменяется, относительно предыдущего метода с этими же инструкциями.
|
||||
|
||||
>>>gh=open('zapis5.txt','w')
|
||||
|
||||
>>>for r in sps3:
|
||||
gh.write(r[0]+' '+str(r[1])+'\n')
|
||||
|
||||
12
|
||||
12
|
||||
13
|
||||
>>>gh.close()
|
||||
|
||||

|
||||
|
||||
>>> gh=open('zapis6.txt','w')
|
||||
>>> for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n')
|
||||
...
|
||||
12
|
||||
12
|
||||
13
|
||||
>>>gh.close()
|
||||
|
||||

|
||||
|
||||
# 4.6 Изучение одного из способов чтения данных из файла с помощью цикла for
|
||||
|
||||
С помощью open был открыт файл для чтения, и из его символов был сконструирован список, состоящий из символов. После символы в списке были преобразованы в числа, и список стал идентичен тому, который создавался ранее и записывался в файл.
|
||||
|
||||
>>> sps1=[]
|
||||
>>> fp=open('zapis3.txt')
|
||||
>>> for stroka in fp:
|
||||
... stroka=stroka.rstrip('\n')
|
||||
... stroka=stroka.replace('[','')
|
||||
... stroka=stroka.replace(']','')
|
||||
... sps1=sps1+stroka.split(',')
|
||||
...
|
||||
...
|
||||
>>> fp.close()
|
||||
>>> sps
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
||||
>>> sps1
|
||||
['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12']
|
||||
|
||||
Здесь, перед занесением строки в список с помощью метода rstrip, из неё удаляется символ конца строки (если не задавать аргументов, он удалит любые пробелы (пробел, табуляция, символы новой строки и т.п.) с конца строки.), а с помощью метода replace – скобки. Видно, что полученный список отличается от исходного sps типом данных, а также не убраны некоторые пробелы. Исправим это:
|
||||
|
||||
>>> sps2 = [int(i.strip()) for i in sps1]
|
||||
>>> sps2
|
||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
||||
|
||||
Это list comprehension, который у каждого элемента sps1 убирает лишние пробелы с обеих сторон (в этом отличие rstrip от strip). Затем полученная строка конвертируется в число.
|
||||
|
||||
# 4.7 Изучение способа чтения данных из файла с помощью функции read
|
||||
|
||||
Был открыт текстовый файл и с помощью функции read из него сначала было прочитано и отображено 12 символов, а потом прочитаны остальные символы с помощью функции read без указания аргумента.
|
||||
|
||||
>>> fp=open('zapis3.txt')
|
||||
>>> stroka1=fp.read(12)
|
||||
>>> stroka2=fp.read()
|
||||
>>> fp.close()
|
||||
>>> stroka1
|
||||
'[1, 2, 3, 4]'
|
||||
>>> stroka2
|
||||
'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n'
|
||||
|
||||
# 4.8 Изучение чтения данных из файла по строкам
|
||||
|
||||
Самостоятельно были изучены и применены функции: readline - которая читает одну строку, начиная с указателя текущей позиции, и функция readlines, которая по такому же принципу читает все строки и возвращает их в виде списка.
|
||||
|
||||
>>> fp=open('zapis3.txt')
|
||||
>>> s1 = fp.readline()
|
||||
>>> s2=fp.readline()
|
||||
>>> s1
|
||||
'[1, 2, 3, 4]\n'
|
||||
>>> s2
|
||||
'[5, 6, 7, 8]\n'
|
||||
>>> fp.close()
|
||||
>>> fp=open('zapis3.txt')
|
||||
...
|
||||
>>> s3 = fp.readlines()
|
||||
>>> s3
|
||||
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
|
||||
|
||||
# 4.9 Изучение работы с бинарными файлами с помощью модуля pickle
|
||||
|
||||
С помощью модуля pickle созданное множество было вписано в бинарный файл, а потом данные прочитаны из этого файла.
|
||||
|
||||
>>>import pickle
|
||||
>>>mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
|
||||
>>>fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
|
||||
>>>pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
|
||||
>>>fp.close()
|
||||
|
||||

|
||||
|
||||
>>>fp=open('zapis6.mnz','rb')
|
||||
>>>mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
|
||||
>>>fp.close()
|
||||
>>>mnoz2 #Результат не такой как при вводе множества mnoz1, так как множество не имеет повторений и порядка элементов, поэтому автоматически множество обьединило повторяющиеся слова.
|
||||
{'pen', 'iPhone', 'book', 'table'}
|
||||
>>>mnoz1 == mnoz2
|
||||
True
|
||||
|
||||
Также в файл было записано два обьекта и прочитано поочередно с помощью load.
|
||||
|
||||
>>>fp=open('zapis7.2ob','wb')
|
||||
>>>pickle.dump(mnoz1,fp)
|
||||
>>>pickle.dump(sps3,fp)
|
||||
>>>fp.close()
|
||||
>>>fp=open('zapis7.2ob','rb')
|
||||
>>>obj1=pickle.load(fp) #Первое обращение к load читает первый объект
|
||||
>>>obj2=pickle.load(fp) #Второе – читает второй
|
||||
>>>fp.close()
|
||||
>>>obj1
|
||||
{'pen', 'iPhone', 'book', 'table'}
|
||||
>>>mnoz1
|
||||
{'pen', 'book', 'iPhone', 'table'}
|
||||
>>>obj2
|
||||
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
|
||||
>>>sps3
|
||||
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
|
||||
|
||||
# 5 Перенаправление потоков ввода и вывода данных.
|
||||
|
||||
Был создан текстовый файл, куда с помощью модуля sys и методы stdout был перенаправлен поток вывода, и в нем был напечатан текст. Далее поток вывода был перенаправлен обратно и проведена проверка с помощью print.
|
||||
|
||||
>>>import sys
|
||||
>>>vr_out=sys.stdout #Запоминаем текущий поток вывода
|
||||
>>>fc=open('Stroka.txt','w') #Откроем файл вывода
|
||||
>>>sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
|
||||
>>>print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
|
||||
>>>sys.stdout=vr_out #Восстановление текущего потока
|
||||
>>>print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
|
||||
запись строки на экран
|
||||
>>>fc.close()
|
||||
|
||||

|
||||
|
||||
Также был перенаправлен ввод на файл, и реализован цикл, в котором считывается текст из файла и печатается на экран.
|
||||
|
||||
>>>tmp_in = sys.stdin #Запоминаем текущий поток ввода
|
||||
>>>fd = open("Stroka.txt", "r") #Открываем файл для ввода (чтения)
|
||||
>>>sys.stdin = fd #Перенацеливаем ввод на файл вместо клавиатуры
|
||||
>>>sys.stdin
|
||||
<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'>
|
||||
>>>while True:
|
||||
try:
|
||||
line = input () #Считываем из файла строку
|
||||
print(line) # Отображаем считанное
|
||||
except EOFError:
|
||||
break
|
||||
|
||||
|
||||
запись строки в файл
|
||||
>>>fd.close()
|
||||
>>>sys.stdin=tmp_in #Не забыть вернуть стандартное назначение для потока ввода
|
||||
|
||||
# 6 Завершение работы в IDLE
|
||||
|
||||
Был завершен сеанс в среде IDLE
|
||||
@ -0,0 +1,70 @@
|
||||
# Общее контрольное задание по теме 6
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
|
||||
|
||||
• Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
|
||||
|
||||
• Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
|
||||
|
||||
• Записывается кортеж в бинарный файл.
|
||||
|
||||
• Записывается в этот же файл список и закрывается файл.
|
||||
|
||||
• Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
|
||||
|
||||
• Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
|
||||
|
||||
• Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> import random
|
||||
>>> tpl= tuple(str(random.randint(6, 56)) for x in range(125))
|
||||
>>> tpl
|
||||
('51', '16', '55', '38', '10', '26', '47', '26', '50', '31', '55', '39', '40', '54', '41', '14', '42', '19', '33', '28', '22', '38', '19', '34', '8', '50', '19', '24', '8', '18', '23', '19', '54', '32', '6', '6', '9', '22', '36', '54', '15', '35', '48', '45', '10', '30', '43', '21', '42', '11', '53', '10', '39', '12', '10', '36', '27', '24', '53', '14', '16', '54', '18', '15', '42', '49', '53', '25', '11', '21', '12', '41', '43', '36', '38', '54', '50', '14', '24', '33', '9', '37', '6', '15', '39', '48', '48', '24', '43', '54', '19', '32', '48', '14', '23', '35', '29', '20', '26', '38', '30', '43', '15', '54', '21', '21', '12', '22', '46', '23', '42', '47', '31', '40', '40', '28', '31', '29', '7', '16', '27', '9', '32', '30', '45')
|
||||
|
||||
>>> L_fam = ["Goloshchapov", "Filipov", "Ivanov", "Tabolin", "Lazarev"]
|
||||
|
||||
|
||||
>>> import os
|
||||
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA6')
|
||||
>>> f = open('bin.mnz', 'wb')
|
||||
>>> import pickle
|
||||
>>> pickle.dump(tpl, f)
|
||||
>>> pickle.dump(L_fam, f)
|
||||
>>> f.close()
|
||||
|
||||
|
||||
>>> f = open('bin.mnz', 'rb')
|
||||
>>> obj1 = pickle.load(f)
|
||||
>>> obj2_spis = pickle.load(f)
|
||||
>>> obj1
|
||||
('51', '16', '55', '38', '10', '26', '47', '26', '50', '31', '55', '39', '40', '54', '41', '14', '42', '19', '33', '28', '22', '38', '19', '34', '8', '50', '19', '24', '8', '18', '23', '19', '54', '32', '6', '6', '9', '22', '36', '54', '15', '35', '48', '45', '10', '30', '43', '21', '42', '11', '53', '10', '39', '12', '10', '36', '27', '24', '53', '14', '16', '54', '18', '15', '42', '49', '53', '25', '11', '21', '12', '41', '43', '36', '38', '54', '50', '14', '24', '33', '9', '37', '6', '15', '39', '48', '48', '24', '43', '54', '19', '32', '48', '14', '23', '35', '29', '20', '26', '38', '30', '43', '15', '54', '21', '21', '12', '22', '46', '23', '42', '47', '31', '40', '40', '28', '31', '29', '7', '16', '27', '9', '32', '30', '45')
|
||||
>>> obj2_spis
|
||||
['Goloshchapov', 'Filipov', 'Ivanov', 'Tabolin', 'Lazarev']
|
||||
|
||||
|
||||
>>> if obj1 == tpl:
|
||||
... print("обьекты кортежа совпадают")
|
||||
... else: print("обьекты кортежа не совпадают")
|
||||
...
|
||||
обьекты кортежа совпадают
|
||||
>>> if obj2_spis == L_fam:
|
||||
print("обьекты списка совпадают")
|
||||
else: print("обьекты списка не совпадают")
|
||||
|
||||
обьекты списка совпадают
|
||||
|
||||
>>> for i in range(0, 125, 5):
|
||||
... exec('list' + str(i//5+1) + ' = ' + str(list(obj1[i:i+5])))
|
||||
...
|
||||
...
|
||||
>>> list1
|
||||
['51', '16', '55', '38', '10']
|
||||
>>> list2
|
||||
['26', '47', '26', '50', '31']
|
||||
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
# Выполнение модульного задания 2
|
||||
|
||||
Голощапов Д.Е.,А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
M2_7
|
||||
|
||||
1) С помощью текстового редактора создайте текстовый файл с некоторым именем, в котором будет 4 строки и на каждой строке будет по 3 числа, разделенных запятыми.
|
||||
|
||||
2) Запросите у пользователя и введите имя файла с данными для обработки. Обеспечьте вывод сообщения при вводе пустой строки и повторный ввод.
|
||||
|
||||
3) Введите данные из указанного файла и представьте их в виде списка.
|
||||
|
||||
4) Рассчитайте по введенным данным среднее значение синусов элементов списка.
|
||||
|
||||
5) Выведите рассчитанное значение на экран по шаблону: " По <число элементов в списке> элементам среднее синусов = <рассчитанное среднее>". При этом значение среднего должно быть округлено до двух знаков после точки.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> import math
|
||||
>>> import os
|
||||
>>> os.chdir("C:\\Users\\u115-12\\Desktop\\python-labs\\TEMA6")
|
||||
>>> fname = input("Введите имя файла: ")
|
||||
Введите имя файла: module.txt
|
||||
>>> while fname == "":
|
||||
... print("Имя не должно быть пустым.")
|
||||
... fname = input('Введите имя файла: ')
|
||||
...
|
||||
...
|
||||
>>> with open(fname, 'r') as f:
|
||||
... list = []
|
||||
... for line in f:
|
||||
... numbers = line.strip().split(',') #убрал пробелы и переносы в начале и конце строки, и разбил строку на части по запятым
|
||||
... list.extend([float(x) for x in numbers]) #добавил числа в общий список
|
||||
...
|
||||
...
|
||||
>>>
|
||||
>>> list
|
||||
[1.0, 4.0, 5.0, 2.0, 7.0, 8.0, 2.0, 6.0, 4.0, 8.0, 9.0, 10.0]
|
||||
>>> sin_sum = sum(math.sin(x) for x in list)
|
||||
>>> sin_sum
|
||||
2.4119215412992787
|
||||
>>> average=sin_sum/len(list)
|
||||
>>> average
|
||||
0.2009934617749399
|
||||
>>> print("По", len(list), "элементам среднее синусов =", round(average, 2))
|
||||
По 12 элементам среднее синусов = 0.2
|
||||
@ -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
|
||||
@ -0,0 +1,3 @@
|
||||
Иванов И. 1
|
||||
Петров П. 2
|
||||
Сидоров С. 3
|
||||
|
После Ширина: | Высота: | Размер: 15 KiB |
|
После Ширина: | Высота: | Размер: 13 KiB |
@ -0,0 +1,593 @@
|
||||
# Отчёт по теме 7: Создание пользовательских функций
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# 1. Запуск интерактивной оболочки IDLE
|
||||
|
||||
Запуск оболочки IDLE и установка рабочего каталога
|
||||
|
||||
>>>import os
|
||||
>>>os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA7')
|
||||
|
||||
Пользовательская функция – это совокупность инструкций, которая выполняется при обращении к функции из любого места программы. Аргументы функции – это ссылки на объекты-источники данных, которые используются при её выполнении. Возвращаемые данные – это результаты вычисления функции, передаваемые в ту часть программы, из которой была вызвана функция.
|
||||
|
||||
# 2. Создание пользовательской функции
|
||||
|
||||
Создание функции предполагает выполнение трех операций: формирование функции, ее сохранение и использование.
|
||||
|
||||
В общем виде функция в языке Python представляется так:
|
||||
def <Имя функции>([<Список аргументов >]):
|
||||
[<отступы>"""<Комментарий по назначению функции>"""]
|
||||
<отступы><Блок инструкций – тело функции>
|
||||
[<отступы>return <Значение или вычисляемое выражение>]
|
||||
|
||||
Функция считается оконченной, если в очередной строке нет отступов или их число меньше, чем в отступах в функции. Если при выполнении функции будет выполнена инструкция return, то выполнение функции прекращается с возвратом значения, следующего за этой инструкцией. Если функция не содержит оператора return, она автоматически возвращает значение
|
||||
None.
|
||||
|
||||
# 2.1 Функция без аргументов
|
||||
|
||||
>>> def uspeh():
|
||||
... """Подтверждение успеха операции"""
|
||||
... print('Выполнено успешно!')
|
||||
...
|
||||
...
|
||||
>>> uspeh()
|
||||
Выполнено успешно!
|
||||
>>> type(uspeh)
|
||||
<class 'function'> # Функция является объектом класса function.
|
||||
>>> dir() # Имя функции появилось в пространстве имён
|
||||
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os', 'uspeh']
|
||||
>>> help(uspeh)
|
||||
Help on function uspeh in module __main__:
|
||||
|
||||
uspeh()
|
||||
Подтверждение успеха операции
|
||||
|
||||
help вывело справку по функции uspeh в модуле main. Далее выведена документационная строка функции (то описание, которое было указано в тройных кавычках при её определении). Документационная строка позволяет кратко и понятно описывать назначение функции.
|
||||
|
||||
|
||||
## 2.2 Функция с аргументами
|
||||
|
||||
>>> 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
|
||||
|
||||
Функция работает с любыми данными, которые можно сравнить. Если нельзя сравнить, вернется TypeError.
|
||||
|
||||
>>> n,m='aaa', 'bbbb';sravnenie(n,m)
|
||||
aaa меньше bbbb
|
||||
|
||||
Сравнение строк происходит по алфавиту, так же значение имеет регистр букв (заглавные меньше строчных), более короткая строка считается меньшей ("abc" < "abcd"), но "hi">"hello"
|
||||
|
||||
|
||||
## 2.3 Функция, содержащая return
|
||||
|
||||
>>> def logistfun(b,a):
|
||||
... """Вычисление логистической функции"""
|
||||
... import math
|
||||
... return a/(1+math.exp(-b))
|
||||
...
|
||||
>>> v,w=1,0.7;z=logistfun(w,v)
|
||||
>>> z
|
||||
0.6681877721681662
|
||||
|
||||
Модуль импортированный внутри функции будет доступен только внутри этой же функции.
|
||||
|
||||
|
||||
## 2.4 Сложение для разных типов аргументов
|
||||
|
||||
>>> def slozh(a1,a2,a3,a4):
|
||||
... """ Сложение значений четырех аргументов"""
|
||||
... return a1+a2+a3+a4
|
||||
...
|
||||
...
|
||||
>>> slozh(1,2,3,4) # Сложение чисел
|
||||
10
|
||||
|
||||
>>> slozh('1','2','3','4') # Сложение строк
|
||||
'1234'
|
||||
|
||||
>>> b1=[1,2];b2=[-1,-2];b3=[0,2];b4=[-1,-1]
|
||||
>>> q=slozh(b1,b2,b3,b4) #Сложение списков
|
||||
>>> q
|
||||
[1, 2, -1, -2, 0, 2, -1, -1]
|
||||
|
||||
>>> c1=(1,2); c2=(-1,-2); c3= (0,2); c4=(-1,-1)
|
||||
>>> q=slozh(c1,c2,c3,c4) #Сложение кортежей
|
||||
>>> q
|
||||
(1, 2, -1, -2, 0, 2, -1, -1)
|
||||
|
||||
q = slozh({1,1}, {2,2}, {"abc"}, {3,3}) # Сложение множеств
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#36>", line 1, in <module>
|
||||
q = slozh({1,1}, {2,2}, {"abc"}, {3,3})
|
||||
File "<pyshell#26>", line 3, in slozh
|
||||
return a1+a2+a3+a4
|
||||
TypeError: unsupported operand type(s) for +: 'set' and 'set'
|
||||
|
||||
>>> dict1 = {'a': 1}; dict2 = {'b': 2}; dict3 = {'c': 3}; dict4 = {'d': 4}
|
||||
>>> slozh(dict1, dict2, dict3, dict4) # Сложение словарей
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#38>", line 1, in <module>
|
||||
slozh(dict1, dict2, dict3, dict4)
|
||||
File "<pyshell#26>", line 3, in slozh
|
||||
return a1+a2+a3+a4
|
||||
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
|
||||
|
||||
slozh(1, "а", 2, "b") # Сложение числа и строки
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#39>", line 1, in <module>
|
||||
slozh(1, "а", 2, "b")
|
||||
File "<pyshell#26>", line 3, in slozh
|
||||
return a1+a2+a3+a4
|
||||
TypeError: unsupported operand type(s) for +: 'int' and 'str'
|
||||
|
||||
Как видно сложение для множеств и словарей не применимо. Также нельзя складывать числа и строки, но можно складывать числа и логический тип.
|
||||
|
||||
## 2.5 Функция, реализующая модель некоторого устройства, на вход которого в текущий момент поступает сигнал х, на выходе получается сигнал y:
|
||||
|
||||
>>> def inerz(x,T,ypred):
|
||||
... """ Модель устройства с памятью:
|
||||
... x- текущее значение вх.сигнала,
|
||||
... T -постоянная времени,
|
||||
... ypred - предыдущее значение выхода устройства"""
|
||||
... y=(x+T*ypred)/(T+1)
|
||||
... return y
|
||||
...
|
||||
>>> sps=[0]+[1]*100 # Список с измерениями значений входного сигнала – в виде «ступеньки»
|
||||
>>> spsy=[] #Заготовили список для значений выхода
|
||||
>>> TT=20 #Постоянная времени
|
||||
>>> yy=0 #Нулевое начальное условие
|
||||
>>> for xx in sps:
|
||||
... yy=inerz(xx,TT,yy)
|
||||
... spsy.append(yy)
|
||||
>>> import pylab as plt
|
||||
>>> plt.plot(spsy, label = "Выходной сигнал")
|
||||
[<matplotlib.lines.Line2D object at 0x000002AC6E77CB90>]
|
||||
>>> plt.show()
|
||||
|
||||

|
||||
|
||||
|
||||
# 3. Функции как объекты
|
||||
|
||||
## 3.1 Получение списка атрибутов объекта-функции
|
||||
|
||||
>>> dir(inerz)
|
||||
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
|
||||
>>> inerz.__doc__
|
||||
'Модель устройства с памятью:\n x- текущее значение вх.сигнала,\nT -постоянная времени,\nypred - предыдущее значение выхода устройства'
|
||||
>>> help(inerz)
|
||||
Help on function inerz in module __main__:
|
||||
|
||||
inerz(x, T, ypred)
|
||||
Модель устройства с памятью:
|
||||
x- текущее значение вх.сигнала,
|
||||
T -постоянная времени,
|
||||
ypred - предыдущее значение выхода устройства
|
||||
|
||||
Атрибут __doc__ содержит значение docstring, если при инициализации функции он был задан. Если не был, то inerz.__doc__ будет иметь значение None.
|
||||
|
||||
## 3.2 Сохранение ссылки на объект-функции в другой переменной
|
||||
|
||||
>>> fnkt=sravnenie
|
||||
>>> v=16
|
||||
>>> fnkt(v,23)
|
||||
16 меньше 23
|
||||
|
||||
Функции можно передавать в переменные, как и любые другие объекты. После этого переменная fnkt ссылается на ту же самую функцию, что и sravnenie.
|
||||
|
||||
## 3.3 Возможность альтернативного определения функции в программе
|
||||
|
||||
>>> typ_fun=8
|
||||
>>> if typ_fun==1:
|
||||
... def func():
|
||||
... print('Функция 1')
|
||||
... else:
|
||||
... def func():
|
||||
... print('Функция 2')
|
||||
...
|
||||
>>> func()
|
||||
Функция 2
|
||||
|
||||
Программа выводит сообщение "Функция 2", потому что переменная typ_fun не равна 1, и
|
||||
выполняется блок else, в котором функция func определена как выводящая "Функция 2".
|
||||
|
||||
# 4. Аргументы функции
|
||||
|
||||
## 4.1 Возможность использования функции в качестве аргумента другой функции
|
||||
|
||||
>>> def fun_arg(fff,a,b,c):
|
||||
... """fff-имя функции, используемой
|
||||
... в качестве аргумента функции fun_arg"""
|
||||
... return a+fff(c,b)
|
||||
...
|
||||
>>> zz=fun_arg(logistfun,-3,1,0.7)
|
||||
>>> zz
|
||||
-2.3318122278318336
|
||||
|
||||
Python передаёт ссылку на объект функции logistfun в переменную fff. Внутри функции выполняется заданная операция.
|
||||
|
||||
## 4.2 Обязательные и необязательные аргументы
|
||||
|
||||
>>> def logistfun(a,b=1): #Аргумент b – необязательный; значение по умолчанию=1
|
||||
... """Вычисление логистической функции"""
|
||||
... import math
|
||||
... return b/(1+math.exp(-a))
|
||||
...
|
||||
...
|
||||
>>> logistfun(0.7) #Вычисление со значением b по умолчанию
|
||||
0.6681877721681662
|
||||
>>> logistfun(0.7,2) #Вычисление с заданным значением b
|
||||
1.3363755443363323
|
||||
|
||||
## 4.3 Возможность обращения к функции с произвольным (непозиционным) расположением аргументов.
|
||||
|
||||
При этом надо в обращении к функции указывать имена аргументов.
|
||||
|
||||
>>> logistfun(b=0.5,a=0.8) # Ссылки на аргументы поменялись местами
|
||||
0.34498724056380625
|
||||
|
||||
## 4.4 Пример со значениями аргументов функции, содержащимися в списке или кортеже
|
||||
|
||||
>>> b1234=[b1,b2,b3,b4] # Список списков из п.2.4
|
||||
>>> b1234
|
||||
[[1, 2], [-1, -2], [0, 2], [-1, -1]]
|
||||
>>> qq=slozh(*b1234) #Перед ссылкой на список или кортеж надо ставить звездочку
|
||||
>>> qq
|
||||
[1, 2, -1, -2, 0, 2, -1, -1]
|
||||
|
||||
Со звёздочкой коллекции передаются как набор аргументов функции. * - "оператор распаковки". Это было бы эквивалентно записи slozh(b1,b2,b3,b4).
|
||||
|
||||
## 4.5 Пример со значениями аргументов функции, содержащимися в словаре
|
||||
|
||||
>>> dic4={"a1":1,"a2":2,"a3":3,"a4":4}
|
||||
>>> qqq=slozh(**dic4) #Перед ссылкой на словарь надо ставить две звездочки
|
||||
>>> qqq
|
||||
10
|
||||
>>> slozh(*dic4)
|
||||
'a1a2a3a4'
|
||||
|
||||
Ключи на входе функции воспринимаются как значения позиционных переменных, а значения, как значения. Если поставить только одну звездочку, python попытается интерпретировать
|
||||
ключи, а не значения словаря как позиционные аргументы.
|
||||
|
||||
## 4.6 Смешанные ссылки
|
||||
|
||||
>>> e1=(-1,6);dd2={'a3':3,'a4':9}
|
||||
>>> qqqq=slozh(*e1,**dd2)
|
||||
>>> qqqq
|
||||
17
|
||||
|
||||
## 4.7 Переменное число аргументов у функции
|
||||
|
||||
>>> def func4(*kort7):
|
||||
... """Произвольное число аргументов в составе кортежа"""
|
||||
... smm=0
|
||||
... for elt in kort7:
|
||||
... smm+=elt
|
||||
... return smm
|
||||
...
|
||||
>>> func4(-1,2) #Обращение к функции с 2 аргументами
|
||||
1
|
||||
>>> func4(-1,2,0,3,6) #Обращение к функции с 5 аргументами
|
||||
10
|
||||
|
||||
## 4.8 Комбинация аргументов
|
||||
|
||||
>>> def func4(a,b=7,*kort7): #Аргументы: a-позиционный, b- по умолчанию + кортеж
|
||||
... """Кортеж - сборка аргументов - должен быть последним!"""
|
||||
... smm=0
|
||||
... for elt in kort7:
|
||||
... smm+=elt
|
||||
... return a*smm+b
|
||||
...
|
||||
>>> func4(-1,2,0,3,6)
|
||||
-7
|
||||
|
||||
Если мы не хотим передавать b, придется переопределить функцию так, чтобы именованный параметр b был в конце, а позиционный кортеж - перед ним.
|
||||
|
||||
Подобным же образом в списке аргументов функции также можно использовать словарь, предварив его имя двумя звездочками.
|
||||
|
||||
>>> def func4(a,b=7,**dct1): #Аргументы: a-позиционный, b- по умолчанию + словарь
|
||||
... """Словарь - сборка аргументов - должен быть последним!"""
|
||||
... smm=0
|
||||
... smm = sum (dct1.values())
|
||||
... return a*smm + b
|
||||
...
|
||||
>>> func4(-1,2, x=3, y=4, z=5)
|
||||
-10
|
||||
|
||||
*args и **kwargs - способы передать не уточненное заранее число элементов:
|
||||
*args — переменное количество позиционных аргументов. Переданные с одной звездочкой аргументы собираются в кортеж.
|
||||
**kwargs — переменное количество именованных аргументов. Все переданные аргументы, которые указываются по имени, собираются в словарь.
|
||||
|
||||
*args всегда должно идти перед **kwargs.
|
||||
|
||||
## 4.9 Изменение значений объектов, используемых в качестве аргументов функции.
|
||||
|
||||
Такое изменение возможно только у объектов изменяемого типа
|
||||
|
||||
>>> a=90 # Числовой объект – не изменяемый тип
|
||||
>>> def func3(b):
|
||||
... b=5*b+67
|
||||
...
|
||||
>>> func3(a)
|
||||
>>> a
|
||||
90
|
||||
|
||||
Поскольку функция ничего не возвращает то вычисленное значение b = 5*b+67 существует только локально внутри нее и не выносится в глобальную область видимости.
|
||||
|
||||
Пример со списком:
|
||||
|
||||
>>> sps1=[1,2,3,4] #Список – изменяемый тип объекта
|
||||
>>> def func2(sps):
|
||||
... sps[1]=99
|
||||
...
|
||||
>>> func2(sps1)
|
||||
>>> print(sps1)
|
||||
[1, 99, 3, 4]
|
||||
|
||||
Список передается по ссылке, а не по значению, поэтому изменяется именно тот объект, который был передан.
|
||||
|
||||
Пример с кортежем:
|
||||
|
||||
kort = (1,2,3,4)
|
||||
func2(kort)
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#113>", line 1, in <module>
|
||||
func2(kort)
|
||||
File "<pyshell#109>", line 2, in func2
|
||||
sps[1]=99
|
||||
TypeError: 'tuple' object does not support item assignment
|
||||
|
||||
Кортеж - неизменяемая коллекция, так что переназначение в таком виде не работает.
|
||||
|
||||
# 5. Специальные типы пользовательских функций
|
||||
|
||||
## 5.1 Анонимные функции
|
||||
|
||||
Анонимные функции или по-другому их называют лямбда-функциями – это функции без имени, определяемые по следующей схеме:
|
||||
lambda [<Аргумент1>[,<Аргумент2>,…]]:<Возвращаемое значение или выражение>
|
||||
|
||||
Анонимная функция возвращает ссылку на объект-функцию, которую можно присвоить другому объекту.
|
||||
|
||||
>>> import math
|
||||
>>> anfun1=lambda: 1.5+math.log10(17.23) #Анонимная функция без аргументов
|
||||
>>> anfun1() # Обращение к объекту-функции
|
||||
2.7362852774480286
|
||||
>>> anfun2=lambda a,b : a+math.log10(b) #Анонимная функция с 2 аргументами
|
||||
>>> anfun2(17,234)
|
||||
19.369215857410143
|
||||
>>> anfun3=lambda a,b=234: a+math.log10(b) #Функция с необязательным вторым аргументом
|
||||
>>> anfun3(100)
|
||||
102.36921585741014
|
||||
|
||||
Вызов лямбда-функции создает объект класса "функция". Внутри лямбда-функции не могут использоваться многострочные выражения, нельзя использовать if-else.
|
||||
|
||||
## 5.2 Функции-генераторы
|
||||
|
||||
Это – такие функции, которые используются в итерационных процессах, позволяя на каждой итерации получать одно из значений. Для этого в функцию включают инструкцию yield приостанавливающую её выполнение и возвращающую очередное значение.
|
||||
Данный оператор в отличие от return не останавливает полностью выполнение программы. Когда выполнение функции возобновляется после yield, оно продолжается с того места, где было
|
||||
приостановлено, до следующего оператора yield (или до конца функции).
|
||||
|
||||
>>> 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
|
||||
|
||||
Здесь при каждом обращении к функции будет генерироваться только одно очередное значение.
|
||||
При программировании задач у таких функций часто используют метод __next__, активирующий очередную итерацию выполнения функции.
|
||||
|
||||
>>> alp=func5(7,3)
|
||||
...
|
||||
>>> print(alp.__next__())
|
||||
1
|
||||
>>> print(alp.__next__())
|
||||
4
|
||||
>>> print(alp.__next__())
|
||||
7
|
||||
>>> print(alp.__next__())
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#131>", line 1, in <module>
|
||||
print(alp.__next__())
|
||||
StopIteration
|
||||
|
||||
__next__ помогает вывести значение, которое yield передает на каждой итерации цикла. Если функция отработала последнюю итерацию, но мы попытаемся сделать вызов, вернется ошибка.
|
||||
|
||||
В отличии от функций, которые возвращают список со значениями итераций, функции - генераторы генерируют значения по одному, не храня всё в памяти; а функция, возвращающая список создаёт весь список в памяти. Также генератор можно использовать только один раз - после прохождения всех значений он "опустошается" и больше не производит элементов.
|
||||
|
||||
# 6. Локализация объектов в функциях
|
||||
|
||||
По отношению к функции все объекты подразделяются на локальные и глобальные. Локальными являются объекты, которые создаются в функциях присваиванием им некоторых значений. Глобальные – это те объекты, значения которых заданы вне функции.
|
||||
Локализация может быть переопределена путем прямого объявления объектов как глобальных с помощью дескриптора global.
|
||||
|
||||
## 6.1 Примеры на локализацию объектов
|
||||
|
||||
Пример 1. Одноименные локальный и глобальный объекты:
|
||||
|
||||
>>> glb=10
|
||||
>>> def func7(arg):
|
||||
... loc1=15
|
||||
... glb=8
|
||||
... return loc1*arg
|
||||
...
|
||||
>>> res=func7(glb)
|
||||
>>> res
|
||||
150
|
||||
>>> glb
|
||||
10
|
||||
|
||||
Внутри функции glb принял значение 8, но глобальная переменная при этом после выполнения
|
||||
функции значения не поменяла. Это происходит потому, что локальный glb и глобальный glb - это два разных объекта.
|
||||
|
||||
Пример 2. Ошибка в использовании локального объекта.
|
||||
|
||||
>>> def func8(arg):
|
||||
... loc1=15
|
||||
... print(glb)
|
||||
... glb=8
|
||||
... return loc1*arg
|
||||
...
|
||||
...
|
||||
>>> res=func8(glb)
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#9>", line 1, in <module>
|
||||
res=func8(glb)
|
||||
File "<pyshell#8>", line 3, in func8
|
||||
print(glb)
|
||||
UnboundLocalError: cannot access local variable 'glb' where it is not associated with a value
|
||||
|
||||
|
||||
Переменной glb присваивается значение внутри функции. Поэтому python решает, что glb - это локальная переменная для всей функции. Но когда выполнение доходит до строки 3 print(glb), локальная переменная glb еще не была инициализирована (это происходит только в строке 4), поэтому выходит ошибка.
|
||||
|
||||
Пример 3. Переопределение локализации объекта.
|
||||
|
||||
>>> glb=11
|
||||
>>> def func7(arg):
|
||||
... loc1=15
|
||||
... global glb
|
||||
... print(glb)
|
||||
... glb=8
|
||||
... return loc1*arg
|
||||
...
|
||||
...
|
||||
>>> res=func7(glb)
|
||||
11
|
||||
>>> glb
|
||||
8
|
||||
|
||||
Здесь мы явно указали, что в функции используем глобальную переменную, поэтому она изменилась.
|
||||
|
||||
## 6.2 Выявление локализации объекта с помощью функций locals() и globals() из builtins
|
||||
|
||||
Эти функции возвращают словари, ключами в которых будут имена объектов, являющихся, соответственно, локальными или глобальными на уровне вызова этих функций.
|
||||
|
||||
>>> globals().keys() #Перечень глобальных объектов
|
||||
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8'])
|
||||
>>> locals().keys() #Перечень локальных объектов
|
||||
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8'])
|
||||
|
||||
Сейчас различий нет, потому что эти методы возвращают объекты на уровне вызова этих функций. Сейчас мы работаем в самом рабочем пространстве, где локальная и глобальная области видимости совпадают.
|
||||
|
||||
>>> def func8(arg):
|
||||
... loc1=15
|
||||
... glb=8
|
||||
... print(globals().keys()) #Перечень глобальных объектов «изнутри» функции
|
||||
... print(locals().keys()) #Перечень локальных объектов «изнутри» функции
|
||||
... return loc1*arg
|
||||
...
|
||||
>>> hh=func8(glb)
|
||||
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8']) # Глобальное glb
|
||||
dict_keys(['arg', 'loc1', 'glb']) # Локальное glb
|
||||
>>> 'glb' in globals().keys() # Глобально glb
|
||||
True
|
||||
|
||||
## 6.3 Локализация объектов при использовании вложенных функций
|
||||
|
||||
>>> def func9(arg2,arg3):
|
||||
... def func9_1(arg1):
|
||||
... loc1=15
|
||||
... glb1=8
|
||||
... print('glob_func9_1:',globals().keys())
|
||||
... print('locl_func9_1:',locals().keys())
|
||||
... return loc1*arg1
|
||||
... loc1=5
|
||||
... glb=func9_1(loc1)
|
||||
... print('loc_func9:',locals().keys())
|
||||
... print('glob_func9:',globals().keys())
|
||||
... return arg2+arg3*glb
|
||||
...
|
||||
...
|
||||
>>> kk=func9(10,1)
|
||||
glob_func9_1: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
|
||||
locl_func9_1: dict_keys(['arg1', 'loc1', 'glb1']) # # Содержит только объекты, определенные внутри func9_1, а также объект, переданный как аргумент функции
|
||||
loc_func9: dict_keys(['arg2', 'arg3', 'func9_1', 'loc1', 'glb']) # # Содержит все то же, что и locl_func9_1, но еще и arg3, переданный func9, и саму func9_1
|
||||
glob_func9: dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'os', 'glb', 'func7', 'res', 'func8', 'hh', 'func9'])
|
||||
|
||||
## 6.4 Моделирование системы
|
||||
|
||||
Моделирование системы, состоящей из последовательного соединения реального двигателя, охваченного отрицательной обратной связью с тахогенератором в ней, и нелинейного звена типа «зона нечувствительности», при подаче на неё синусоидального входного сигнала.
|
||||
Реальный двигатель: последовательное соединение усилителя с коэффициентом усиления k1,интегратора: y(t)=x(t)+y(t-1), и инерционного звена: y(t)=(x(t)+T*y(t-1)) / (T+1) с постоянной времени Т.
|
||||
Тахогенератор: последовательное соединение усилителя с коэффициентом усиления k2 и интегратора: y(t)=x(t)+y(t-1).
|
||||
Нелинейное звено типа «зона нечувствительности»: y=0 при -xm≤ x ≤xm, y=x-xm при x>xm, y=x+xm при x<-xm.
|
||||
Таким образом, система характеризуется параметрами: k1, T, k2, xm. Входной сигнал характеризуется параметрами: A (амплитуда синусоиды) и F (период синусоиды).
|
||||
Еще один параметр задачи : N – время (число тактов) подачи сигнала.
|
||||
|
||||
Решение задачи:
|
||||
|
||||
>>> znach=input('k1,T,k2,Xm,A,F,N=').split(',') # Запрос и введение параметров задачи
|
||||
k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000
|
||||
>>> k1=float(znach[0]) # Распаковка значений из списка в отдельные объекты
|
||||
>>> T=float(znach[1])
|
||||
>>> k2=float(znach[2])
|
||||
>>> Xm=float(znach[3])
|
||||
>>> A=float(znach[4])
|
||||
>>> F=float(znach[5])
|
||||
>>> N=int(znach[6])
|
||||
>>> import math
|
||||
>>> vhod=[]
|
||||
>>> for i in range(N):
|
||||
... vhod.append(A*math.sin((2*i*math.pi)/F)) # Создание реализации входного сигнала
|
||||
...
|
||||
>>> vhod
|
||||
[0.0, -9.797174393178826e-16, -1.959434878635765e-15, -2.9391523179536475e-15, -3.91886975727153e-15, -4.898587196589413e-15, -5.878304635907295e-15, -6.858022075225178e-15, -7.83773951454306e-15, -8.817456953860943e-15, -9.797174393178826e-15, -3.919860126290071e-14, -1.175660927181459e-14, 1.5685382719271533e-14, -1.3716044150450356e-14, -4.3117471020172244e-14, -1.567547902908612e-14, 1.1766512962000004e-14, -1.7634913907721887e-14, ...]
|
||||
|
||||
Создание функций реализующие компоненты системы
|
||||
|
||||
>>> def realdvig(xtt,kk1,TT,yti1,ytin1):
|
||||
... #Модель реального двигателя
|
||||
... yp=kk1*xtt #усилитель
|
||||
... yti1=yp+yti1 #Интегратор
|
||||
... ytin1=(yti1+TT*ytin1)/(TT+1)
|
||||
... return [yti1,ytin1]
|
||||
...
|
||||
>>> def tahogen(xtt,kk2,yti2):
|
||||
... #Модель тахогенератора
|
||||
... yp=kk2*xtt #усилитель
|
||||
... yti2=yp+yti2 #интегратор
|
||||
... return yti2
|
||||
...
|
||||
>>> def nechus(xtt,gran):
|
||||
... #зона нечувствит
|
||||
... if xtt<gran and xtt>(-gran):
|
||||
... ytt=0
|
||||
... elif xtt>=gran:
|
||||
... ytt=xtt-gran
|
||||
... elif xtt<=(-gran):
|
||||
... ytt=xtt+gran
|
||||
... return ytt
|
||||
...
|
||||
|
||||
Реализуем соединение компонент в соответствии с заданием
|
||||
|
||||
>>> yi1=0;yin1=0;yi2=0
|
||||
>>> vyhod=[]
|
||||
>>> for xt in vhod:
|
||||
... xt1=xt-yi2 #отрицательная обратная связь
|
||||
... [yi1,yin1]=realdvig(xt1,k1,T,yi1,yin1)
|
||||
... yi2=tahogen(yin1,k2,yi2)
|
||||
... yt=nechus(yin1,Xm)
|
||||
... vyhod.append(yt)
|
||||
...
|
||||
>>> print('y=',vyhod)
|
||||
y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, ...]
|
||||
|
||||
# 7. Завершение сеанса работы с IDLE
|
||||
|
||||
@ -0,0 +1,83 @@
|
||||
# Общее контрольное задание по теме 7
|
||||
|
||||
Голощапов Дмитрий, А-01-23
|
||||
|
||||
# Задание:
|
||||
|
||||
1. Разработайте и проверьте функцию, реализующую для момента времени t расчет выхода y(t) для устройства задержки: на вход поступает сигнал, а на выходе повторяется этот сигнал с задержкой на заданное время Т.
|
||||
|
||||
2. Разработайте и проверьте функцию, реализующую расчет гистограммы по выборке случайной величины с каким-то распределением. Гистограмма при выводе на экран представляется в виде таблицы: границы интервала, число элементов выборки в интервале. Аргументы функции: выборка, число интервалов разбиения диапазона изменения случайной величины. Возвращаемый результат функции: список с числами элементов выборки в интервалах разбиения.
|
||||
|
||||
3. Разработайте и проверьте анонимную функцию, вычисляющую значение оценки отклика Y линейной регрессии при значении переменной Х Y=b1+b2*X и имеющую аргументы b1, b2 и X.
|
||||
|
||||
# Решение
|
||||
|
||||
## 1.
|
||||
|
||||
>>> def delay_signal (signal, T):
|
||||
... """"Расчёт выхода y(t) для устройства задержки"""
|
||||
... output=[]
|
||||
... for i in range(len(signal)):
|
||||
if i < T:
|
||||
output.append(0)
|
||||
else:
|
||||
... output.append(signal[i-T])
|
||||
... return output
|
||||
...
|
||||
...
|
||||
>>> x=[1,0.5,3.6,4.5,1,2,0.5] # Входной сигнал
|
||||
>>> y= delay_signal (x, 2)
|
||||
>>> y
|
||||
[0, 0, 1, 0.5, 3.6, 4.5, 1]
|
||||
|
||||
## 2.
|
||||
|
||||
>>> import random
|
||||
>>> import matplotlib.pyplot as plt
|
||||
>>> def histogram (sample, number):
|
||||
... min_1=min(sample)
|
||||
... max_1=max(sample)
|
||||
... bins=(max_1-min_1)/number # Ширина одного интервала
|
||||
... rows = [0]*number # Создание списка для подсчёта элементов в каждом интервале
|
||||
... intervals = [] # Список для хранения границ интервалов
|
||||
... for i in range(number):
|
||||
... lower = min_1 + i * bins
|
||||
... upper = min_1 + (i+1) * bins
|
||||
... intervals.append((lower, upper))
|
||||
...
|
||||
... for x in sample:
|
||||
... i = int((x-min_1)/bins) # Вычисление номера интервала для текущего элемента
|
||||
... if i == number:
|
||||
... i=number-1
|
||||
... rows [i] +=1
|
||||
... print("Границы интервала | Число элементов")
|
||||
... for i in range(number):
|
||||
... lower, upper = intervals[i]
|
||||
... print(lower, "-", upper, " |", rows[i])
|
||||
... plt.hist(sample, number)
|
||||
... plt.xlabel('Значения выборки')
|
||||
... plt.ylabel('Число элементов')
|
||||
... plt.title('Гистограмма выборки')
|
||||
... plt.show()
|
||||
... return rows
|
||||
...
|
||||
>>> data = [random.gauss(1, 20) for _ in range(10)]
|
||||
>>> histogram (data, 3)
|
||||
Границы интервала | Число элементов
|
||||
-23.534334630492655 - -11.561019750784087 | 3
|
||||
-11.561019750784087 - 0.4122951289244803 | 2
|
||||
0.4122951289244803 - 12.385610008633048 | 5
|
||||
[3, 2, 5]
|
||||
|
||||

|
||||
|
||||
## 3.
|
||||
|
||||
>>> linear_regression = lambda b1, b2, x: b1+b2 * x
|
||||
>>> result = linear_regression (2,3,5)
|
||||
>>> result
|
||||
17
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
# Выполнение индивидуального контрольного задания по теме 7
|
||||
|
||||
Голощапов Д.Е.,А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Разработайте анонимную функцию с 3 аргументами: х, a, b, вычисляющую значение exp(-(x-a)2/b)/(2*π*b)1/2. Рассчитайте значения функции в диапазоне значений х от a-3*b1/2 до a+3*b1/2 с шагом 0.2*b1/2 и запишите эти значения в текстовый файл по два значения на строке, разделенных запятыми.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> import os
|
||||
>>> os.chdir('C:\\Users\\u115-07\\Desktop\\python-labs\\TEMA7')
|
||||
>>> normal= lambda x, a, b: math.exp(-(x-a)**2/b) / math.sqrt(2 * math.pi * b)
|
||||
>>> def test_normal():
|
||||
... a, b = 0, 1
|
||||
... std_dev = math.sqrt(b)
|
||||
... start = a - 3 * std_dev
|
||||
... end = a + 3 * std_dev
|
||||
... step = 0.2 * std_dev
|
||||
... x_values = []
|
||||
... current = start
|
||||
... while current <= end:
|
||||
... x_values.append(current)
|
||||
... current += step
|
||||
... function_values = []
|
||||
... for x in x_values:
|
||||
... y = normal_pdf(x, a, b)
|
||||
... function_values.append(y)
|
||||
... file = open('ikz.txt', 'w')
|
||||
... for i in range(0, len(function_values), 2):
|
||||
... if i + 1 < len(function_values):
|
||||
... file.write(str(function_values[i])+','+str(function_values[i+1])+'\n')
|
||||
... else:
|
||||
... file.write(str(function_values[i])+',0\n')
|
||||
...
|
||||
...
|
||||
>>> test_normal()
|
||||
|
||||
4.9233388666234e-05,0.0001570512248023814
|
||||
0.00046246553014536756,0.0012571116468828324
|
||||
0.0031544581746000837,0.007306882745280797
|
||||
0.015624133620192436,0.03084012943829092
|
||||
0.05619437965598666,0.09452050033904612
|
||||
0.14676266317374007,0.21035924208613316
|
||||
0.2783325845048708,0.33995618640009767
|
||||
0.3832995298410415,0.3989422804014327
|
||||
0.3832995298410414,0.33995618640009745
|
||||
0.27833258450487053,0.21035924208613285
|
||||
0.1467626631737398,0.09452050033904591
|
||||
0.056194379655986504,0.030840129438290835
|
||||
0.01562413362019238,0.007306882745280764
|
||||
0.0031544581746000672,0.0012571116468828236
|
||||
0.0004624655301453643,0.00015705122480238025
|
||||
|
||||
|
||||
@ -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,7 @@
|
||||
def read (file):
|
||||
""""Чтение данных из файла"""
|
||||
nums = []
|
||||
with open(file, 'r') as file: # Открытие файла для чтения
|
||||
for line in file:
|
||||
nums.extend(map(float, line.split())) # Добавление всех элементов в список
|
||||
return nums
|
||||
@ -0,0 +1,16 @@
|
||||
def correlation(list1, list2):
|
||||
"""Расчёт коэффициента корреляции"""
|
||||
n = min(len(list1), len(list2)) # Общая длина
|
||||
list1 = list1[:n]
|
||||
list2 = list2[:n]
|
||||
mean1 = sum(list1) / n
|
||||
mean2 = sum(list2) / n
|
||||
chislitel = sum((list1[i] - mean1) * (list2[i] - mean2) for i in range(n))
|
||||
#Числитель формулы корреляции
|
||||
znamenatel1 = sum((x - mean1) ** 2 for x in list1) # Знаменатель формулы корреляции
|
||||
znamenatel2 = sum((y - mean2) ** 2 for y in list2)
|
||||
|
||||
if znamenatel1 == 0 or znamenatel2 == 0: # Проверка деления на 0
|
||||
return 0
|
||||
|
||||
return chislitel/(znamenatel1 * znamenatel2) ** 0.5
|
||||
@ -0,0 +1,8 @@
|
||||
import Modul1
|
||||
import Modul2
|
||||
file1 = input("Введите имя первого файла: ")
|
||||
file2 = input("Введите имя второго файла: ")
|
||||
list1 = Modul1.read(file1)
|
||||
list2 = Modul1.read(file2)
|
||||
corr = Modul2.correlation(list1, list2)
|
||||
print(f"Коэффициент корреляции: {corr:.3f}")
|
||||
@ -0,0 +1,4 @@
|
||||
1 2 3
|
||||
4 5
|
||||
6 7 8
|
||||
9
|
||||
@ -0,0 +1,3 @@
|
||||
2 4 6
|
||||
8
|
||||
10 11
|
||||
@ -0,0 +1,101 @@
|
||||
xi yi
|
||||
3.670624845040832 0
|
||||
-0.3521658782544006 0
|
||||
8.474868613693486 3.974868613693486
|
||||
-1.2523156239267281 0
|
||||
-3.7587096811346328 0
|
||||
7.812468585140991 3.3124685851409907
|
||||
-6.0856889627564446 -1.5856889627564446
|
||||
-5.724951279110531 -1.224951279110531
|
||||
-7.209307783131958 -2.7093077831319583
|
||||
-0.03177225581110221 0
|
||||
0.7262377096028143 0
|
||||
-2.1451811018035256 0
|
||||
0.682492352684937 0
|
||||
-7.974098743623873 -3.4740987436238733
|
||||
-4.739894789384625 -0.23989478938462483
|
||||
0.5785673884962104 0
|
||||
2.7900552540834824 0
|
||||
-2.9878254998277147 0
|
||||
8.68266903601552 4.18266903601552
|
||||
0.6358011132082179 0
|
||||
-1.581248665373875 0
|
||||
-7.714241862469274 -3.214241862469274
|
||||
4.191086710659071 0
|
||||
-5.8603083872222115 -1.3603083872222115
|
||||
6.6401090127726645 2.1401090127726645
|
||||
2.260239806764301 0
|
||||
-1.6714707105856204 0
|
||||
2.11512773242201 0
|
||||
-5.1120638328556165 -0.6120638328556165
|
||||
-10.945281168071894 -6.445281168071894
|
||||
2.8366672115699614 0
|
||||
1.4086809273229965 0
|
||||
-2.1496484779110046 0
|
||||
-2.204188117632971 0
|
||||
5.109718373038055 0.6097183730380547
|
||||
-0.8627148245032066 0
|
||||
-3.940717361293867 0
|
||||
-6.317208582843859 -1.8172085828438593
|
||||
4.161315157870332 0
|
||||
3.7381890083293237 0
|
||||
3.509751762296771 0
|
||||
-5.112977704740069 -0.6129777047400689
|
||||
1.3712601808556377 0
|
||||
-4.511100221705535 -0.011100221705534707
|
||||
5.187248298870852 0.6872482988708519
|
||||
7.526201082555464 3.026201082555464
|
||||
0.943215636501155 0
|
||||
-1.6731422501170918 0
|
||||
-3.6509712338126468 0
|
||||
-8.970988280742628 -4.4709882807426276
|
||||
-3.7178510417802197 0
|
||||
-9.181348116863681 -4.681348116863681
|
||||
-7.096909208628782 -2.596909208628782
|
||||
-6.356674467305581 -1.8566744673055808
|
||||
12.362835482493008 7.862835482493008
|
||||
-3.829821255664842 0
|
||||
3.863254268939434 0
|
||||
-7.361058739291252 -2.861058739291252
|
||||
2.647441327077496 0
|
||||
-0.2463332543002399 0
|
||||
-6.43345466288511 -1.9334546628851097
|
||||
1.0010663991036108 0
|
||||
4.891543232391817 0.3915432323918173
|
||||
3.217395947085928 0
|
||||
7.24856212261116 2.74856212261116
|
||||
0.03268157666206739 0
|
||||
2.361643183782607 0
|
||||
2.7565941347292853 0
|
||||
6.614328614660419 2.114328614660419
|
||||
-4.522306819553961 -0.022306819553961077
|
||||
-2.417360799898943 0
|
||||
1.438340972480404 0
|
||||
-10.538183665090727 -6.0381836650907275
|
||||
2.3976210633141606 0
|
||||
-7.884528665296656 -3.3845286652966564
|
||||
-3.7426936627274277 0
|
||||
4.2656325795417 0
|
||||
8.00340261637121 3.5034026163712095
|
||||
3.0203739276410437 0
|
||||
2.239032949899291 0
|
||||
-5.4012053050140345 -0.9012053050140345
|
||||
-0.5456659941079272 0
|
||||
-3.3423758989922203 0
|
||||
0.6911815315164658 0
|
||||
4.499821505200004 0
|
||||
-2.7737597404880163 0
|
||||
0.9093545223215143 0
|
||||
4.045688327501273 0
|
||||
3.417507437526962 0
|
||||
2.287170277997463 0
|
||||
12.444224815662537 7.944224815662537
|
||||
-2.3029729728150645 0
|
||||
7.5434316730659905 3.0434316730659905
|
||||
0.875475942768364 0
|
||||
-1.0441288330619352 0
|
||||
-1.9188907056958815 0
|
||||
-5.4887311611961715 -0.9887311611961715
|
||||
7.893972719410864 3.393972719410864
|
||||
-7.404570078842247 -2.904570078842247
|
||||
-2.066644631987605 0
|
||||
@ -0,0 +1,16 @@
|
||||
import random
|
||||
import math
|
||||
from transform_module import transform_signal
|
||||
|
||||
def main():
|
||||
x = [random.gauss(0.5, 5) for i in range(100)]
|
||||
# 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
|
||||
y = transform_signal(x, 4.5)
|
||||
|
||||
with open('file.txt', 'w') as f:
|
||||
f.write("xi yi\n")
|
||||
for xi, yi in zip(x, y):
|
||||
f.write(f"{xi} {yi}\n")
|
||||
# вывод в файле file.txt
|
||||
|
||||
main()
|
||||
@ -0,0 +1,390 @@
|
||||
# Отчёт по теме 8: Модули и структурирование программы
|
||||
|
||||
Голощапов Д.Е., А-01-23
|
||||
|
||||
|
||||
# 1. Запуск интерактивной оболочки IDLE
|
||||
|
||||
>>> import os,sys,importlib #Импорт трёх важных вспомогательных модулей
|
||||
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8')
|
||||
>>> os.getcwd()
|
||||
'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8'
|
||||
|
||||
# 2. Создание и использование модулей в среде Python
|
||||
|
||||
Большие программы делятся на части-модули, записываемые в отдельные файлы. Это делается для удобства отладки, обеспечения возможности коллективной разработки, создания возможности повторного использования программ.
|
||||
Модулем в среде Python называется любая часть программного кода на этом языке, записанная в отдельном файле.
|
||||
|
||||
## 2.1 Запуск модуля на выполнение путём его импорта
|
||||
|
||||
После импорта модуль становится объектом в пространстве имен той части программы, где осуществлен импорт. Модуль получает имя или псевдоним, заданные в инструкции импорта, а также набор атрибутов. При этом появляется возможность использования всех приемов, применяемых при работе с модулями.
|
||||
Создадим и откроем в текущем каталоге файл с именем Mod1.py, который будет содержать следующее:
|
||||
|
||||
perm1=input('Mod1:Введите значение = ')
|
||||
print('Mod1:Значение perm1=',perm1)
|
||||
|
||||
Пока введённый или изменённый текст в окне редактора с текстом модуля не сохранён в файле, в заголовке перед именем файла будет стоять символ "*".
|
||||
|
||||
|
||||
>>> import Mod1 # Запуск модуля
|
||||
Mod1:Введите значение = 5
|
||||
Mod1:Значение perm1= 5
|
||||
>>> type(Mod1) # Модуль имеет класс объекта типа модуль
|
||||
<class 'module'>
|
||||
>>> dir(Mod1)
|
||||
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
|
||||
>>> Mod1.perm1 # Получим доступ к значению объекта, созданного в модуле
|
||||
'5'
|
||||
|
||||
|
||||
При импорте модуля управление передаётся от модуля ```__main__``` к модулю Mod1, который ищется в рабочем каталоге. Если бы данного модуля там не было, то при импорте пришлось бы ещё указать каталог, где он находится.
|
||||
|
||||
При повторном импорте модуля, запуска программы не происходит. Чтобы это исправить, применим функцию reload из модуля importlib:
|
||||
|
||||
>>> importlib.reload(Mod1)
|
||||
Mod1:Введите значение = 3
|
||||
Mod1:Значение perm1= 3
|
||||
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
|
||||
>>> Mod1.perm1
|
||||
'3'
|
||||
|
||||
## 2.2 Импортированные модули заносятся в словарь - значение атрибута sys.modules
|
||||
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'i dlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'tok en', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
|
||||
Для повторного импорта модуля и выполнения программы, удалим модуль из этого словаря. Затем снова повторим импорт и убедимся в выполнении программы.
|
||||
|
||||
>>> sys.modules.pop('Mod1')
|
||||
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.d ebugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'to kenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
>>> import Mod1
|
||||
Mod1:Введите значение = 5
|
||||
Mod1:Значение perm1= 5
|
||||
>>> sys.modules.pop('Mod1')
|
||||
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
|
||||
|
||||
|
||||
Отличие importlib.reload() от sys.modules.pop() заключается в том, что importlib.reload() перезагружает модуль, выполняя его код заново, но не удаляет модуль из словаря. Он имеет тот же адрес в памяти и все зависимости от него остаются в силе. sys.modules.pop() убирает модуль из словаря, при повторном импорте он уже будет иметь другой адрес.
|
||||
|
||||
|
||||
## 2.3 Запуск модуля на выполнение с помощью функции exec()
|
||||
|
||||
Здесь модуль не требуется импортировать. Функция exec действует так, как будто на месте обращения к ней в программу вставлен код из объекта-аргумента функции. Но объект-модуль при этом не создается. Созданные при выполнении модуля объекты становятся объектами главной программы.
|
||||
|
||||
>>> exec(open('Mod1.py').read())
|
||||
Mod1:Введите значение = 5
|
||||
Mod1:Значение perm1= 5
|
||||
# Здесь наблюдается проблема с кодировкой символов, файл был сохранён в одной кодировке, а Python хочет его прочитать в другой. Поэтому укажем явно кодировку
|
||||
>>> exec(open('Mod1.py', encoding='utf-8').read())
|
||||
Mod1:Введите значение = 5
|
||||
Mod1:Значение perm1= 5
|
||||
>>> exec(open('Mod1.py', encoding='utf-8').read())
|
||||
Mod1:Введите значение = 1
|
||||
Mod1:Значение perm1= 1
|
||||
>>> exec(open('Mod1.py', encoding='utf-8').read())
|
||||
Mod1:Введите значение = 9
|
||||
Mod1:Значение perm1= 9
|
||||
>>> perm1
|
||||
'9'
|
||||
|
||||
## 2.4 Использование инструкции from ... import ...
|
||||
|
||||
В одном модуле может содержаться несколько функций или пользовательских объектов. Тогда можно осуществлять импорт модуля не целиком, а только часть содержащихся в нем объектов.
|
||||
|
||||
Пример 1:
|
||||
|
||||
>>> from Mod1 import perm1
|
||||
Mod1:Введите значение = 5
|
||||
Mod1:Значение perm1= 5
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'i dlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'tok en', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
>>> perm1
|
||||
'5'
|
||||
>>> from Mod1 import perm1
|
||||
|
||||
Объект Mod1 появился в памяти, программа на выполнение вызвалась, аналогично использованию import. При последующем повторении команды ничего не происходит. Python хранит загруженные модули в sys.modules, при первом импорте выполняется весь код модуля, при повторном импорте Python просто берёт модуль из кэша.
|
||||
|
||||
Пример2:
|
||||
|
||||
С помощью текстового редактора создадим ещё один модуль Mod2, содержащий две функции:
|
||||
|
||||
def alpha():
|
||||
print('****ALPHA****')
|
||||
t=input('Значение t=')
|
||||
return t
|
||||
|
||||
def beta(q):
|
||||
import math
|
||||
expi=q*math.pi
|
||||
return math.exp(expi)
|
||||
|
||||
Импортируем из этого модуля только функцию beta:
|
||||
|
||||
>>> from Mod2 import beta
|
||||
>>> g=beta(2)
|
||||
>>> g
|
||||
535.4916555247646
|
||||
>>> print(sorted(sys.modules.keys()))
|
||||
['Mod2', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'i dlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'tok en', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
|
||||
>>> alpha()
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#6>", line 1, in <module>
|
||||
alpha()
|
||||
NameError: name 'alpha' is not defined
|
||||
|
||||
Модуль Mod2 появился в списке. Функция alpha не была импортирована, поэтому и вышла ошибка.
|
||||
Теперь импортируем только функцию alpha, используя для неё псевдоним al:
|
||||
|
||||
>>> from Mod2 import alpha as al
|
||||
>>> al()
|
||||
****ALPHA****
|
||||
Значение t=5
|
||||
'5'
|
||||
>>> del al,beta # Удаление импортированных объектов
|
||||
|
||||
>>> from Mod2 import alpha as al, beta as bt # Импорт двух функций одной инструкцией
|
||||
>>> sys.modules.pop('Mod1') # Удаление импортированных объектов
|
||||
<module 'Mod1' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod1.py'>
|
||||
>>> sys.modules.pop('Mod2')
|
||||
<module 'Mod2' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA8\\Mod2.py'>
|
||||
>>> from Mod2 import * # Импорт всего содержимого модуля
|
||||
>>> tt=alpha()
|
||||
****ALPHA****
|
||||
Значение t=0.12
|
||||
>>> uu=beta(float(tt))
|
||||
>>> uu
|
||||
1.4578913609506803
|
||||
|
||||
# 3. Создание многомодульных программ
|
||||
|
||||
## 3.1 Пример простой многомодульной программы
|
||||
|
||||
Создадим модуль Mod0 со следующим содержанием:
|
||||
|
||||
#Модуль Mod0
|
||||
import Mod1
|
||||
print('perm1=',Mod1.perm1)
|
||||
from Mod2 import alpha as al
|
||||
tt=al()
|
||||
print('tt=',tt)
|
||||
from Mod2 import beta
|
||||
qq=beta(float(tt))
|
||||
print('qq=',qq)
|
||||
|
||||
Данный модуль содержит программу, вызывающую на выполнение ранее созданные модули Mod1, Mod2. Теперь программа будет состоять из 5 частей: главная программа, которой является командная строка IDLE и из которой будет вызываться модуль Mod0, и 3 модуля, вызываемых из модуля Mod0.
|
||||
|
||||
>>> import Mod0
|
||||
Mod1:Введите значение = 3
|
||||
Mod1:Значение perm1= 3
|
||||
perm1= 3
|
||||
****ALPHA****
|
||||
Значение t=10
|
||||
tt= 10
|
||||
qq= 44031505860631.98
|
||||
>>> Mod0.tt;Mod0.qq;Mod0.Mod1.perm1
|
||||
'10'
|
||||
44031505860631.98
|
||||
'3'
|
||||
|
||||
Переменная perm1 находится в пространстве имен модуля Mod1, а не модуля Mod0. Поэтому пришлось указывать не только имя модуля Mod0, но и имя модуля Mod1, в котором локализован объект.
|
||||
|
||||
## 3.2 Пример
|
||||
|
||||
Создадим модуль MM1, включив в него разработанные при выполнении предыдущей темы функции, реализующие усилитель, реальный двигатель, тахогенератор и нелинейное звено типа «зона нечувствительности». Затем создадим модуль ММ2, включив в него инструкции, обеспечивающие ввод параметров задачи, формирование входного сигнала, импорт модуля ММ1 и реализацию модели при расчете выходного сигнала.
|
||||
|
||||
Модуль MM1:
|
||||
|
||||
def realdvig(xtt,kk1,TT,yti1,ytin1):
|
||||
#Модель реального двигателя
|
||||
yp = kk1 * xtt #усилитель
|
||||
yti1 = yp + yti1 #Интегратор
|
||||
ytin1 = (yti1+TT*ytin1)/(TT+1)
|
||||
return [yti1, ytin1]
|
||||
|
||||
def tahogen(xtt,kk2,yti2):
|
||||
#Модель тахогенератора
|
||||
yp = kk2 * xtt #усилитель
|
||||
yti2 = yp + yti2 #интегратор
|
||||
return yti2
|
||||
|
||||
def nechus(xtt,gran):
|
||||
if (xtt < gran) and (xtt > (-gran)):
|
||||
ytt = 0
|
||||
elif xtt >= gran:
|
||||
ytt = xtt - gran
|
||||
elif xtt <= (-gran):
|
||||
ytt = xtt + gran
|
||||
return ytt
|
||||
|
||||
Модуль MM2:
|
||||
|
||||
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)
|
||||
|
||||
Теперь создадим главную программу - модуль MM0, которая запускает на выполнение модуль MM2 и выводит полученный выходной сигнал:
|
||||
|
||||
import MM2
|
||||
print('y=',MM2.vyhod)
|
||||
|
||||
Запустим модуль MM0:
|
||||
|
||||
>>> import MM0
|
||||
k1,T,k2,Xm,A,F,N=8,5,3,10,2,0.5,1000
|
||||
y=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0183086292055208, 0, 26.39885775889784, -36.65029553691161, -34.19982663883278, 196.29963397615063, -151.6919482160481, -388.32493988337274, 1057.8073200868555, -308.3186572590445, -2798.051869998873, 5004.749701095182, 1362.331454336744, ...]
|
||||
|
||||
## 3.3 Области действия объектов в модулях
|
||||
|
||||
В ранее созданных модулях вводятся и используются следующие объекты:
|
||||
|
||||
Mod1: perm1
|
||||
|
||||
Mod2: функции alpha, beta; переменные t, expi
|
||||
|
||||
Mod0: переменные tt,qq
|
||||
|
||||
Исходя из примеров, приведенных ниже, можно сказать, что объекты входящие в один модуль будут локализованы в этом модуле и доступны в нем. К переменным из другого модуля, даже импортированного в главный (выполняемый) модуль, прямого доступа не будет.
|
||||
|
||||
## 3.3.1 Добавление в функцию alpha обращение к функции beta и, наоборот, из beta – к alpha.
|
||||
|
||||
Изменим содержание файла Mod2.py:
|
||||
|
||||
def alpha():
|
||||
print('****ALPHA****')
|
||||
t=input('Значение t=')
|
||||
beta(int(t))
|
||||
return t
|
||||
|
||||
def beta(q):
|
||||
import math
|
||||
expi=q*math.pi
|
||||
return math.exp(expi)
|
||||
|
||||
Запустим программу:
|
||||
|
||||
>>> from Mod2 import *
|
||||
>>> alpha()
|
||||
****ALPHA****
|
||||
Значение t=5
|
||||
153552935.39544657
|
||||
'5'
|
||||
|
||||
Теперь добавим в функцию beta вызов функции alpha():
|
||||
|
||||
def alpha():
|
||||
print('****ALPHA****')
|
||||
t=input('Значение t=')
|
||||
return t
|
||||
|
||||
def beta(q):
|
||||
import math
|
||||
expi=q*math.pi
|
||||
alpha()
|
||||
return math.exp(expi)
|
||||
|
||||
Протестируем выполнение:
|
||||
|
||||
>>> beta(6)
|
||||
****ALPHA****
|
||||
Значение t=5
|
||||
153552935.39544657
|
||||
|
||||
## 3.3.2 Отобразим на экране в модуле Mod0 значения объектов t и expi
|
||||
|
||||
Изменим содержание Mod0:
|
||||
|
||||
#Модуль Mod0
|
||||
import Mod1
|
||||
print('perm1=',Mod1.perm1)
|
||||
from Mod2 import alpha as al
|
||||
tt=al()
|
||||
print('tt=',tt)
|
||||
from Mod2 import beta
|
||||
qq=beta(float(tt))
|
||||
print('qq=',qq)
|
||||
print(t, expi)
|
||||
|
||||
Запустим на выполнение:
|
||||
|
||||
>>> import Mod0
|
||||
perm1= 5
|
||||
****ALPHA****
|
||||
Значение t=10
|
||||
tt= 10
|
||||
qq= 44031505860631.98
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#47>", line 1, in <module>
|
||||
import Mod0
|
||||
File "C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA8\Mod0.py", line 10, in <module>
|
||||
print(t, expi)
|
||||
NameError: name 't' is not defined. Did you mean: 'tt'?
|
||||
|
||||
Выходит ошибка, потому что переменные t и expi определены в разных областях видимости и не доступны в модуле Mod0. В модуле Mod2: t - это локальная переменная функции alpha(), expi - это локальная переменная функции beta(). В модуле Mod0: мы пытаемся обратиться к переменным t и expi, которые никогда не были объявлены в этом модуле.
|
||||
|
||||
## 3.3.3 Увеличение в модуле Mod0 в 3 раза значение объекта perm1 и отобразить его после этого на экране.
|
||||
|
||||
Изменим содержание Mod0:
|
||||
|
||||
#Модуль Mod0
|
||||
import Mod1
|
||||
print('perm1=',Mod1.perm1)
|
||||
Mod1.perm1 = str(int(Mod1.perm1)*3)
|
||||
print('Увеличение perm1 в 3 раза:', Mod1.perm1)
|
||||
from Mod2 import alpha as al
|
||||
tt=al()
|
||||
print('tt=',tt)
|
||||
from Mod2 import beta
|
||||
qq=beta(float(tt))
|
||||
print('qq=',qq)
|
||||
|
||||
Тестирование программы:
|
||||
|
||||
>>> import Mod0
|
||||
perm1= 30
|
||||
Увеличение perm1 в 3 раза: 90
|
||||
****ALPHA****
|
||||
Значение t=10
|
||||
tt= 10
|
||||
qq= 44031505860631.98
|
||||
|
||||
## 3.3.4 В командной строке необходимо увеличить в 2 раза значения объектов perm1, tt, qq
|
||||
|
||||
>>> import Mod0
|
||||
perm1= 5
|
||||
****ALPHA****
|
||||
Значение t=10
|
||||
tt= 10
|
||||
qq= 44031505860631.98
|
||||
>>> Mod0.Mod1.perm1=str(int(Mod0.Mod1.perm1)*2)
|
||||
>>> Mod0.Mod1.perm1
|
||||
'10'
|
||||
>>> Mod0.tt=str(int(Mod0.tt)*2)
|
||||
>>> Mod0.tt
|
||||
'20'
|
||||
>>> Mod0.qq=Mod0.qq*2
|
||||
>>> Mod0.qq
|
||||
88063011721263.95
|
||||
|
||||
# 4. Завершение сеанса работы с IDLE
|
||||
@ -0,0 +1,67 @@
|
||||
# ОБЩЕЕ КОНТРОЛЬНОЕ ЗАДАНИЕ по Теме 8
|
||||
|
||||
Выполнил: Голощапов Д.Е.
|
||||
|
||||
## Задание
|
||||
|
||||
Разработайте программу, состоящую из трех модулей:
|
||||
|
||||
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Полученный список должен возвращаться в вызывающую программу.
|
||||
|
||||
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
||||
|
||||
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. Затем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
|
||||
|
||||
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
||||
|
||||
# Решение
|
||||
|
||||
## 1. Модуль 1 - Чтение данных из файла
|
||||
|
||||
def read (file):
|
||||
""""Чтение данных из файла"""
|
||||
nums = []
|
||||
with open(file, 'r') as file: # Открытие файла для чтения
|
||||
for line in file:
|
||||
nums.extend(map(float, line.split())) # Добавление всех элементов в список
|
||||
return nums
|
||||
|
||||
## 2. Модуль 2 - Расчёт коэффициента корреляции
|
||||
|
||||
def correlation(list1, list2):
|
||||
"""Расчёт коэффициента корреляции"""
|
||||
n = min(len(list1), len(list2)) # Общая длина
|
||||
list1 = list1[:n]
|
||||
list2 = list2[:n]
|
||||
mean1 = sum(list1) / n
|
||||
mean2 = sum(list2) / n
|
||||
chislitel = sum((list1[i] - mean1) * (list2[i] - mean2) for i in range(n))
|
||||
#Числитель формулы корреляции
|
||||
znamenatel1 = sum((x - mean1) ** 2 for x in list1) # Знаменатель формулы корреляции
|
||||
znamenatel2 = sum((y - mean2) ** 2 for y in list2)
|
||||
|
||||
if znamenatel1 == 0 or znamenatel2 == 0: # Проверка деления на 0
|
||||
return 0
|
||||
|
||||
return chislitel/(znamenatel1 * znamenatel2) ** 0.5
|
||||
|
||||
## 3. Модуль 3 - Запрос у пользователя и ввод имён файлов с исходными данными
|
||||
|
||||
import Modul1
|
||||
import Modul2
|
||||
file1 = input("Введите имя первого файла: ")
|
||||
file2 = input("Введите имя второго файла: ")
|
||||
list1 = Modul1.read(file1)
|
||||
list2 = Modul1.read(file2)
|
||||
corr = Modul2.correlation(list1, list2)
|
||||
print(f"Коэффициент корреляции: {corr:.3f}")
|
||||
|
||||
Были подготовлены два файла с данными data1.txt и data2.txt
|
||||
|
||||
## 4. Тестирование
|
||||
|
||||
>>> import Modul3
|
||||
Введите имя первого файла: data1.txt
|
||||
Введите имя второго файла: data2.txt
|
||||
Коэффициент корреляции: 0.996
|
||||
|
||||
@ -0,0 +1,157 @@
|
||||
# Выполнение индивидуального контрольного задания по теме 8
|
||||
|
||||
Голощапов Д.Е.,А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Разработайте функцию с 2 аргументами: x и В, реализующую преобразование входного сигнала x по формуле: y=0 при -B≤x≤B, y=x - B при x>B, y=x+B при x<-B. Создайте список со 100 значениями входного сигнала х – случайными, нормально распределенными числами с математическим ожиданием 0.5 и дисперсией 25. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при В=4.5. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
|
||||
|
||||
# Решение
|
||||
|
||||
Функция для линейно-кусочного преобразования transform_signal находится в модуле transformation_module.py
|
||||
|
||||
Код представлен ниже:
|
||||
|
||||
def transform_signal(x, B):
|
||||
"""
|
||||
Кусочно-линейное преобразование:
|
||||
y = 0 при -B <= xi <= B
|
||||
y = xi - B при xi > B
|
||||
y = xi + B при xi < -B
|
||||
|
||||
x - список входных значений
|
||||
"""
|
||||
y = []
|
||||
for xi in x:
|
||||
if -B <= xi <= B:
|
||||
y.append(0)
|
||||
elif xi > B:
|
||||
y.append(xi - B)
|
||||
else:
|
||||
y.append(xi + B)
|
||||
return y
|
||||
|
||||
|
||||
Код основного модуля:
|
||||
|
||||
import random
|
||||
import math
|
||||
from transform_module import transform_signal
|
||||
|
||||
def main():
|
||||
x = [random.gauss(0.5, 5) for i in range(100)]
|
||||
# 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
|
||||
y = transform_signal(x, 4.5)
|
||||
|
||||
with open('file.txt', 'w') as f:
|
||||
f.write("xi yi\n")
|
||||
for xi, yi in zip(x, y):
|
||||
f.write(f"{xi} {yi}\n")
|
||||
|
||||
# вывод в файле file.txt
|
||||
|
||||
main()
|
||||
|
||||
Содержимое файла file.txt:
|
||||
|
||||
xi yi
|
||||
3.670624845040832 0
|
||||
-0.3521658782544006 0
|
||||
8.474868613693486 3.974868613693486
|
||||
-1.2523156239267281 0
|
||||
-3.7587096811346328 0
|
||||
7.812468585140991 3.3124685851409907
|
||||
-6.0856889627564446 -1.5856889627564446
|
||||
-5.724951279110531 -1.224951279110531
|
||||
-7.209307783131958 -2.7093077831319583
|
||||
-0.03177225581110221 0
|
||||
0.7262377096028143 0
|
||||
-2.1451811018035256 0
|
||||
0.682492352684937 0
|
||||
-7.974098743623873 -3.4740987436238733
|
||||
-4.739894789384625 -0.23989478938462483
|
||||
0.5785673884962104 0
|
||||
2.7900552540834824 0
|
||||
-2.9878254998277147 0
|
||||
8.68266903601552 4.18266903601552
|
||||
0.6358011132082179 0
|
||||
-1.581248665373875 0
|
||||
-7.714241862469274 -3.214241862469274
|
||||
4.191086710659071 0
|
||||
-5.8603083872222115 -1.3603083872222115
|
||||
6.6401090127726645 2.1401090127726645
|
||||
2.260239806764301 0
|
||||
-1.6714707105856204 0
|
||||
2.11512773242201 0
|
||||
-5.1120638328556165 -0.6120638328556165
|
||||
-10.945281168071894 -6.445281168071894
|
||||
2.8366672115699614 0
|
||||
1.4086809273229965 0
|
||||
-2.1496484779110046 0
|
||||
-2.204188117632971 0
|
||||
5.109718373038055 0.6097183730380547
|
||||
-0.8627148245032066 0
|
||||
-3.940717361293867 0
|
||||
-6.317208582843859 -1.8172085828438593
|
||||
4.161315157870332 0
|
||||
3.7381890083293237 0
|
||||
3.509751762296771 0
|
||||
-5.112977704740069 -0.6129777047400689
|
||||
1.3712601808556377 0
|
||||
-4.511100221705535 -0.011100221705534707
|
||||
5.187248298870852 0.6872482988708519
|
||||
7.526201082555464 3.026201082555464
|
||||
0.943215636501155 0
|
||||
-1.6731422501170918 0
|
||||
-3.6509712338126468 0
|
||||
-8.970988280742628 -4.4709882807426276
|
||||
-3.7178510417802197 0
|
||||
-9.181348116863681 -4.681348116863681
|
||||
-7.096909208628782 -2.596909208628782
|
||||
-6.356674467305581 -1.8566744673055808
|
||||
12.362835482493008 7.862835482493008
|
||||
-3.829821255664842 0
|
||||
3.863254268939434 0
|
||||
-7.361058739291252 -2.861058739291252
|
||||
2.647441327077496 0
|
||||
-0.2463332543002399 0
|
||||
-6.43345466288511 -1.9334546628851097
|
||||
1.0010663991036108 0
|
||||
4.891543232391817 0.3915432323918173
|
||||
3.217395947085928 0
|
||||
7.24856212261116 2.74856212261116
|
||||
0.03268157666206739 0
|
||||
2.361643183782607 0
|
||||
2.7565941347292853 0
|
||||
6.614328614660419 2.114328614660419
|
||||
-4.522306819553961 -0.022306819553961077
|
||||
-2.417360799898943 0
|
||||
1.438340972480404 0
|
||||
-10.538183665090727 -6.0381836650907275
|
||||
2.3976210633141606 0
|
||||
-7.884528665296656 -3.3845286652966564
|
||||
-3.7426936627274277 0
|
||||
4.2656325795417 0
|
||||
8.00340261637121 3.5034026163712095
|
||||
3.0203739276410437 0
|
||||
2.239032949899291 0
|
||||
-5.4012053050140345 -0.9012053050140345
|
||||
-0.5456659941079272 0
|
||||
-3.3423758989922203 0
|
||||
0.6911815315164658 0
|
||||
4.499821505200004 0
|
||||
-2.7737597404880163 0
|
||||
0.9093545223215143 0
|
||||
4.045688327501273 0
|
||||
3.417507437526962 0
|
||||
2.287170277997463 0
|
||||
12.444224815662537 7.944224815662537
|
||||
-2.3029729728150645 0
|
||||
7.5434316730659905 3.0434316730659905
|
||||
0.875475942768364 0
|
||||
-1.0441288330619352 0
|
||||
-1.9188907056958815 0
|
||||
-5.4887311611961715 -0.9887311611961715
|
||||
7.893972719410864 3.393972719410864
|
||||
-7.404570078842247 -2.904570078842247
|
||||
-2.066644631987605 0
|
||||
@ -0,0 +1,157 @@
|
||||
# Выполнение индивидуального контрольного задания по теме 8
|
||||
|
||||
Голощапов Д.Е.,А-01-23
|
||||
|
||||
# Задание
|
||||
|
||||
Разработайте функцию с 2 аргументами: x и В, реализующую преобразование входного сигнала x по формуле: y=0 при -B≤x≤B, y=x - B при x>B, y=x+B при x<-B. Создайте список со 100 значениями входного сигнала х – случайными, нормально распределенными числами с математическим ожиданием 0.5 и дисперсией 25. Для элементов списка с помощью функции рассчитайте список со значениями выходного сигнала y при В=4.5. Записать результаты в текстовый файл в виде двух столбцов: хi, yi.
|
||||
|
||||
# Решение
|
||||
|
||||
Функция для линейно-кусочного преобразования transform_signal находится в модуле transformation_module.py
|
||||
|
||||
Код представлен ниже:
|
||||
|
||||
def transform_signal(x, B):
|
||||
"""
|
||||
Кусочно-линейное преобразование:
|
||||
y = 0 при -B <= xi <= B
|
||||
y = xi - B при xi > B
|
||||
y = xi + B при xi < -B
|
||||
|
||||
x - список входных значений
|
||||
"""
|
||||
y = []
|
||||
for xi in x:
|
||||
if -B <= xi <= B:
|
||||
y.append(0)
|
||||
elif xi > B:
|
||||
y.append(xi - B)
|
||||
else:
|
||||
y.append(xi + B)
|
||||
return y
|
||||
|
||||
|
||||
Код основного модуля:
|
||||
|
||||
import random
|
||||
import math
|
||||
from transform_module import transform_signal
|
||||
|
||||
def main():
|
||||
x = [random.gauss(0.5, 5) for i in range(100)]
|
||||
# 0.5 - мат ожидание, 5 - СКО = корень из 25 (дисперсия = 25)
|
||||
y = transform_signal(x, 4.5)
|
||||
|
||||
with open('file.txt', 'w') as f:
|
||||
f.write("xi yi\n")
|
||||
for xi, yi in zip(x, y):
|
||||
f.write(f"{xi} {yi}\n")
|
||||
|
||||
# вывод в файле file.txt
|
||||
|
||||
main()
|
||||
|
||||
Содержимое файла file.txt:
|
||||
|
||||
xi yi
|
||||
3.670624845040832 0
|
||||
-0.3521658782544006 0
|
||||
8.474868613693486 3.974868613693486
|
||||
-1.2523156239267281 0
|
||||
-3.7587096811346328 0
|
||||
7.812468585140991 3.3124685851409907
|
||||
-6.0856889627564446 -1.5856889627564446
|
||||
-5.724951279110531 -1.224951279110531
|
||||
-7.209307783131958 -2.7093077831319583
|
||||
-0.03177225581110221 0
|
||||
0.7262377096028143 0
|
||||
-2.1451811018035256 0
|
||||
0.682492352684937 0
|
||||
-7.974098743623873 -3.4740987436238733
|
||||
-4.739894789384625 -0.23989478938462483
|
||||
0.5785673884962104 0
|
||||
2.7900552540834824 0
|
||||
-2.9878254998277147 0
|
||||
8.68266903601552 4.18266903601552
|
||||
0.6358011132082179 0
|
||||
-1.581248665373875 0
|
||||
-7.714241862469274 -3.214241862469274
|
||||
4.191086710659071 0
|
||||
-5.8603083872222115 -1.3603083872222115
|
||||
6.6401090127726645 2.1401090127726645
|
||||
2.260239806764301 0
|
||||
-1.6714707105856204 0
|
||||
2.11512773242201 0
|
||||
-5.1120638328556165 -0.6120638328556165
|
||||
-10.945281168071894 -6.445281168071894
|
||||
2.8366672115699614 0
|
||||
1.4086809273229965 0
|
||||
-2.1496484779110046 0
|
||||
-2.204188117632971 0
|
||||
5.109718373038055 0.6097183730380547
|
||||
-0.8627148245032066 0
|
||||
-3.940717361293867 0
|
||||
-6.317208582843859 -1.8172085828438593
|
||||
4.161315157870332 0
|
||||
3.7381890083293237 0
|
||||
3.509751762296771 0
|
||||
-5.112977704740069 -0.6129777047400689
|
||||
1.3712601808556377 0
|
||||
-4.511100221705535 -0.011100221705534707
|
||||
5.187248298870852 0.6872482988708519
|
||||
7.526201082555464 3.026201082555464
|
||||
0.943215636501155 0
|
||||
-1.6731422501170918 0
|
||||
-3.6509712338126468 0
|
||||
-8.970988280742628 -4.4709882807426276
|
||||
-3.7178510417802197 0
|
||||
-9.181348116863681 -4.681348116863681
|
||||
-7.096909208628782 -2.596909208628782
|
||||
-6.356674467305581 -1.8566744673055808
|
||||
12.362835482493008 7.862835482493008
|
||||
-3.829821255664842 0
|
||||
3.863254268939434 0
|
||||
-7.361058739291252 -2.861058739291252
|
||||
2.647441327077496 0
|
||||
-0.2463332543002399 0
|
||||
-6.43345466288511 -1.9334546628851097
|
||||
1.0010663991036108 0
|
||||
4.891543232391817 0.3915432323918173
|
||||
3.217395947085928 0
|
||||
7.24856212261116 2.74856212261116
|
||||
0.03268157666206739 0
|
||||
2.361643183782607 0
|
||||
2.7565941347292853 0
|
||||
6.614328614660419 2.114328614660419
|
||||
-4.522306819553961 -0.022306819553961077
|
||||
-2.417360799898943 0
|
||||
1.438340972480404 0
|
||||
-10.538183665090727 -6.0381836650907275
|
||||
2.3976210633141606 0
|
||||
-7.884528665296656 -3.3845286652966564
|
||||
-3.7426936627274277 0
|
||||
4.2656325795417 0
|
||||
8.00340261637121 3.5034026163712095
|
||||
3.0203739276410437 0
|
||||
2.239032949899291 0
|
||||
-5.4012053050140345 -0.9012053050140345
|
||||
-0.5456659941079272 0
|
||||
-3.3423758989922203 0
|
||||
0.6911815315164658 0
|
||||
4.499821505200004 0
|
||||
-2.7737597404880163 0
|
||||
0.9093545223215143 0
|
||||
4.045688327501273 0
|
||||
3.417507437526962 0
|
||||
2.287170277997463 0
|
||||
12.444224815662537 7.944224815662537
|
||||
-2.3029729728150645 0
|
||||
7.5434316730659905 3.0434316730659905
|
||||
0.875475942768364 0
|
||||
-1.0441288330619352 0
|
||||
-1.9188907056958815 0
|
||||
-5.4887311611961715 -0.9887311611961715
|
||||
7.893972719410864 3.393972719410864
|
||||
-7.404570078842247 -2.904570078842247
|
||||
-2.066644631987605 0
|
||||
@ -0,0 +1,18 @@
|
||||
def transform_signal(x, B):
|
||||
"""
|
||||
Кусочно-линейное преобразование:
|
||||
y = 0 при -B <= xi <= B
|
||||
y = xi - B при xi > B
|
||||
y = xi + B при xi < -B
|
||||
|
||||
x - список входных значений
|
||||
"""
|
||||
y = []
|
||||
for xi in x:
|
||||
if -B <= xi <= B:
|
||||
y.append(0)
|
||||
elif xi > B:
|
||||
y.append(xi - B)
|
||||
else:
|
||||
y.append(xi + B)
|
||||
return y
|
||||
|
После Ширина: | Высота: | Размер: 80 KiB |
|
После Ширина: | Высота: | Размер: 79 KiB |
|
После Ширина: | Высота: | Размер: 14 KiB |
@ -0,0 +1,27 @@
|
||||
import pylab
|
||||
from M2 import run_M2
|
||||
|
||||
def main():
|
||||
X, X1 = run_M2()
|
||||
|
||||
# Построение графиков
|
||||
pylab.figure(figsize=(10, 5))
|
||||
pylab.subplot(1, 2, 1)
|
||||
pylab.plot(X, label='Исходный сигнал')
|
||||
pylab.title("Исходный сигнал")
|
||||
pylab.xlabel("Отсчёты")
|
||||
pylab.ylabel("Значение")
|
||||
pylab.grid(True)
|
||||
|
||||
pylab.subplot(1, 2, 2)
|
||||
pylab.plot(X1, label='Исправленный сигнал', color='orange')
|
||||
pylab.title("Исправленный сигнал")
|
||||
pylab.xlabel("Отсчёты")
|
||||
pylab.ylabel("Значение")
|
||||
pylab.grid(True)
|
||||
|
||||
pylab.tight_layout()
|
||||
pylab.show()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,19 @@
|
||||
def find_anomalous_indices(X, M1, M2):
|
||||
|
||||
indices = []
|
||||
for i in range(1, len(X)):
|
||||
diff = X[i] - X[i-1]
|
||||
if diff < M1 or diff > M2:
|
||||
indices.append(i)
|
||||
return tuple(indices)
|
||||
|
||||
|
||||
def correct_anomalies(X, K):
|
||||
|
||||
X1 = X.copy()
|
||||
for idx in K:
|
||||
if idx == len(X) - 1:
|
||||
X1[idx] = X1[idx - 1]
|
||||
else:
|
||||
X1[idx] = 0.5 * (X1[idx - 1] + X1[idx + 1])
|
||||
return X1
|
||||
@ -0,0 +1,51 @@
|
||||
# M2.py
|
||||
import os
|
||||
import sys
|
||||
import pickle
|
||||
|
||||
def run_M2():
|
||||
|
||||
while True:
|
||||
filename = input("Введите имя текстового файла с сигналом: ").strip()
|
||||
if os.path.isfile(filename):
|
||||
break
|
||||
|
||||
|
||||
|
||||
X = []
|
||||
with open(filename, 'r') as f:
|
||||
for line in f:
|
||||
parts = line.strip().split()
|
||||
for p in parts:
|
||||
X.append(float(p))
|
||||
|
||||
|
||||
while True:
|
||||
|
||||
M1 = float(input("Введите M1 (нижняя граница разности): "))
|
||||
M2 = float(input("Введите M2 (верхняя граница разности, M2 > M1): "))
|
||||
if M1 < M2:
|
||||
break
|
||||
else:
|
||||
print("M1 должно быть меньше M2.")
|
||||
|
||||
|
||||
from M1 import find_anomalous_indices, correct_anomalies
|
||||
|
||||
|
||||
K = find_anomalous_indices(X, M1, M2)
|
||||
print(f"Аномальные индексы: {K}")
|
||||
|
||||
|
||||
if K:
|
||||
X1 = correct_anomalies(X, K)
|
||||
print("Исправленный сигнал:", X1)
|
||||
|
||||
|
||||
with open("Res44.bin", "wb") as f:
|
||||
pickle.dump(X1, f)
|
||||
print("Результат записан в Res44.bin")
|
||||
else:
|
||||
print("Аномальных отсчётов не обнаружено.")
|
||||
|
||||
return X, X1 if K else X
|
||||
@ -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,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()
|
||||
@ -0,0 +1,292 @@
|
||||
# Отчёт по теме 9: Создание пользовательских классов и объектов
|
||||
|
||||
Голощапов Д.Е., А-01-23
|
||||
|
||||
# 1. Запуск интерактивной оболочки IDLE
|
||||
|
||||
>>> import os
|
||||
>>> os.chdir('C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA9')
|
||||
|
||||
# 2. Создание классов и их наследников
|
||||
|
||||
Класс - это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Он представляет собой шаблоны, образцы, по которым может быть создано множество объектов-экземпляров класса. У каждого класса есть уникальное имя и некоторый набор специфических для него атрибутов: полей (данных) и методов (функций), которые могут использоваться при работе с экземплярами класса.
|
||||
|
||||
## 2.1 Создание автономного класса
|
||||
|
||||
>>> class Class1: #Объявление класса
|
||||
... def zad_zn(self,znach): #Метод 1 класса1 – задание значения data
|
||||
... self.data=znach # self - ссылка на экземпляр класса
|
||||
... def otobrazh(self): # Метод 2 класса1
|
||||
... print(self.data)#Отображение данных экземпляра класса
|
||||
...
|
||||
|
||||
У этого класса есть два метода: zad_zn (устанавливает значение свойства объекта) и otobrazh (выводит это значение на экран).
|
||||
Еще у него есть один атрибут - data.
|
||||
self — это обязательный первый параметр всех методов в классе, ссылающийся на конкретный
|
||||
экземпляр класса и нужный для определения обращения к атрибутам и методам.
|
||||
|
||||
>>> z1=Class1() #Создаём 1-й экземпляр класса
|
||||
>>> z2=Class1() #Создаём 2-й экземпляр класса
|
||||
>>> z1.zad_zn('экз.класса 1') #Обращение к методу класса у 1-го экз.
|
||||
>>> z2.zad_zn(-632.453) #Обращение к методу класса у 2-го экз.
|
||||
>>> z1.otobrazh() # Обращение ко второму методу класса
|
||||
экз.класса 1
|
||||
>>> z2.otobrazh()
|
||||
-632.453
|
||||
>>> z1.data='Новое значение атрибута у экз.1'
|
||||
>>> z1.otobrazh()
|
||||
Новое значение атрибута у экз.1
|
||||
|
||||
## 2.2 Создание класса-наследника
|
||||
|
||||
>>> class Class2(Class1): #Class2 - наследник класса Class1
|
||||
... def otobrazh(self): # Метод класса Class2 – переопределяет метод родителя
|
||||
... print('значение=',self.data)#Отображение данных экземпляра
|
||||
...
|
||||
...
|
||||
>>> z3=Class2()
|
||||
>>> dir(z3)
|
||||
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'otobrazh', 'zad_zn']
|
||||
|
||||
Объекты с нижними подчеркиваниями - встроенные атрибуты и методы, которые есть у каждого класса. Кроме этого, есть унаследованные от родительского класса методы, один из которых переопределен.
|
||||
При создании дочернего класса атрибуты и методы родительского класса переносятся дочернему. В дочернем классе методы могут быть переопределены. То есть метод с одинаковым именем в разных классах будет вести себя по-разному.
|
||||
|
||||
>>> z3.zad_zn('Совсем новое')
|
||||
>>> z3.otobrazh()
|
||||
значение= Совсем новое
|
||||
>>> z1.otobrazh()
|
||||
Новое значение атрибута у экз.1
|
||||
>>> del z1,z2,z3
|
||||
|
||||
# 3. Использование классов, содержащихся в модулях
|
||||
|
||||
Создадим модуль Mod3 со следующим содержанием:
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
||||
>>> from Mod3 import Class1 #Частичный импорт содержимого модуля
|
||||
>>> z4=Class1()
|
||||
>>> z4.otobrazh()
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#20>", line 1, in <module>
|
||||
z4.otobrazh()
|
||||
File "C:\Users\Дмитрий\OneDrive\Рабочий стол\Goloshchapov\python-labs\TEMA9\Mod3.py", line 5, in otobrazh
|
||||
print(self.data)#Отображение данных экземпляра
|
||||
AttributeError: 'Class1' object has no attribute 'data'
|
||||
|
||||
Ошибка возникла потому, что otobrazh было вызвано раньше, чем метод, инициализирующий атрибут data, то есть мы пытаемся напечатать значение несуществующего объекта.
|
||||
|
||||
|
||||
>>> import sys
|
||||
>>> sys.modules.pop('Mod3')
|
||||
<module 'Mod3' from 'C:\\Users\\Дмитрий\\OneDrive\\Рабочий стол\\Goloshchapov\\python-labs\\TEMA9\\Mod3.py'>
|
||||
>>> from Mod3 import Class1
|
||||
>>> z4=Class1()
|
||||
>>> z4.data='значение данного data у экз.4'
|
||||
>>> z4.otobrazh()
|
||||
значение данного data у экз.4
|
||||
|
||||
Здесь otobrazh - это метод класса Class2 и соответствующего ему экземпляра класса z2. Этот метод не принимает значимых параметров, кроме формального self.
|
||||
|
||||
>>> del z4
|
||||
>>> import Mod3 #Полный импорт содержимого модуля
|
||||
>>> z4=Mod3.Class2()
|
||||
>>> z4.zad_zn('Класс из модуля')
|
||||
>>> z4.otobrazh()
|
||||
значение= Класс из модуля
|
||||
>>> Mod3.otobrazh('Объект')
|
||||
значение объекта= Объект
|
||||
|
||||
|
||||
Здесь otobrazh - это уже просто функция, глобально определенная в модуле mod3. Она определена вне пользовательского класса, поэтому атрибута data в ее зоне доступа нет. Так что эта функция принимает один обязательный параметр - выводимую переменную.
|
||||
|
||||
|
||||
# 4. Использование специальных методов
|
||||
|
||||
Имена специальных методов предваряются одним или двумя подчерками и имеют вид: ```__<имя специального метода>__```
|
||||
|
||||
>>> class Class3(Class2): #Наследник класса Class2, а через него – и класса Class1
|
||||
... def __init__(self,znach): #Конструктор-вызывается при создании нового экземпляра класса
|
||||
... self.data=znach
|
||||
... def __add__(self,drug_zn): #Вызывается, когда экземпляр участвует в операции «+»
|
||||
... return Class3(self.data+drug_zn)
|
||||
... def zad_dr_zn(self,povtor): #А это - обычный метод
|
||||
... self.data*=povtor
|
||||
...
|
||||
|
||||
Метод __add__ - это один из методов, осуществляющих так называемую «перегрузку» операторов.
|
||||
Для иллюстрации работы этих методов создадим экземпляр класса Class3 и отобразим его.
|
||||
|
||||
>>> z5=Class3('abc') #При создании экземпляра срабатывает конструктор
|
||||
>>> z5.otobrazh()
|
||||
значение= abc
|
||||
>>> z6=z5+'def'
|
||||
>>> z6.otobrazh()
|
||||
значение= abcdef
|
||||
>>> z6.zad_dr_zn(3)
|
||||
>>> z6.otobrazh()
|
||||
значение= abcdefabcdefabcdef
|
||||
|
||||
# 5. Присоединение атрибутов к классу
|
||||
|
||||
>>> 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), указаны также атрибуты, относящиеся непосредственно к экземпляру. dir(Class3) показывает атрибуты класса Class3. Это включает методы, свойства, и встроенные специальные методы класса, но не атрибуты конкретных объектов, созданных на основе этого класса.
|
||||
dir(z7) показывает атрибуты объекта z7.
|
||||
|
||||
>>> 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) # При этом у dir(Class3) его нет
|
||||
['__add__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__firstlineno__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__static_attributes__', '__str__', '__subclasshook__', '__weakref__', 'fio', 'otobrazh', 'zad_dr_zn', 'zad_zn']
|
||||
|
||||
|
||||
# 6. Выявление родительских классов
|
||||
|
||||
Такое выявление делается с помощью специального атрибута ```__bases__```.
|
||||
|
||||
>>> Class3.__bases__
|
||||
(<class '__main__.Class2'>,)
|
||||
>>> Class2.__bases__
|
||||
(<class 'Mod3.Class1'>,)
|
||||
>>> Class1.__bases__
|
||||
(<class 'object'>,)
|
||||
>>> object.__bases__
|
||||
()
|
||||
|
||||
Полный порядок наследования:
|
||||
|
||||
>>> Class3.__mro__
|
||||
(<class '__main__.Class3'>, <class '__main__.Class2'>, <class 'Mod3.Class1'>, <class 'object'>)
|
||||
>>> ZeroDivisionError.__mro__
|
||||
(<class 'ZeroDivisionError'>, <class 'ArithmeticError'>, <class 'Exception'>, <class 'BaseException'>, <class 'object'>)
|
||||
|
||||
# 7. Создание свойства класса
|
||||
|
||||
Свойство (property) класса – это особый атрибут класса, с которым можно производить операции чтения или задания его значения, а также удаление значения этого атрибута. Свойства нужны для того, чтобы ограничить прямой доступ к изменению атрибута.
|
||||
|
||||
>>> class Class4:
|
||||
... def __init__(sam,znach):
|
||||
... sam.__prm=znach
|
||||
... def chten(sam):
|
||||
... return sam.__prm
|
||||
... def zapis(sam,znch):
|
||||
... sam.__prm=znch
|
||||
... def stiran(sam):
|
||||
... del sam.__prm
|
||||
... svojstvo=property(chten,zapis,stiran)
|
||||
...
|
||||
...
|
||||
>>> exempl=Class4(12)
|
||||
>>> exempl.svojstvo
|
||||
12
|
||||
>>> exempl.svojstvo=45
|
||||
>>> print(exempl.svojstvo)
|
||||
45
|
||||
>>> del exempl.svojstvo
|
||||
>>> exempl.svojstvo
|
||||
Traceback (most recent call last):
|
||||
File "<pyshell#64>", line 1, in <module>
|
||||
exempl.svojstvo
|
||||
File "<pyshell#58>", line 5, in chten
|
||||
return sam.__prm
|
||||
AttributeError: 'Class4' object has no attribute '_Class4__prm'
|
||||
|
||||
Такой вывод происходит, потому что этот атрибут уже удален.
|
||||
|
||||
# 8. Пример представления в виде класса модели системы автоматического регулирования (САР), состоящей из последовательного соединения усилителя и двух инерционных звеньев, охваченных отрицательной обратной связью с усилителем.
|
||||
|
||||
Создадим модуль SAU.py с классом:
|
||||
```
|
||||
class SAU:
|
||||
def __init__(self,zn_param):
|
||||
self.param=zn_param
|
||||
self.ypr=[0,0]
|
||||
|
||||
def zdn_zn(self,upr):
|
||||
self.x=upr
|
||||
|
||||
def model(self):
|
||||
def inerz(x,T,yy):
|
||||
return (x+T*yy)/(T+1)
|
||||
|
||||
y0=self.x-self.ypr[1]*self.param[3] #Обр.связь с усилителем 2
|
||||
y1=self.param[0]*y0 #Усилитель1
|
||||
y2=inerz(y1,self.param[1],self.ypr[0]) #Инерционное звено1
|
||||
y3=inerz(y2,self.param[2],self.ypr[1]) #Инерционное звено2
|
||||
self.ypr[0]=y2
|
||||
self.ypr[1]=y3
|
||||
|
||||
def otobraz(self):
|
||||
print('y=',self.ypr[1])
|
||||
```
|
||||
|
||||
Тестирование класса произведём с помощью следующей программы, которая находится в модуле main_Sau.py
|
||||
|
||||
```
|
||||
###main_SAU
|
||||
prm=[2.5,4,1.3,0.8] #Параметры модели: коэф.усиления, 2 пост.времени, обратная связь
|
||||
from SAU import *
|
||||
xx=[0]+[1]*20 #Входной сигнал – «ступенька»
|
||||
SAUe=SAU(prm) # Создаём экземпляр класса
|
||||
yt=[]
|
||||
for xt in xx: # Прохождение входного сигнала
|
||||
SAUe.zdn_zn(xt)
|
||||
SAUe.model()
|
||||
SAUe.otobraz()
|
||||
yt.append(SAUe.ypr[1])
|
||||
import pylab
|
||||
pylab.plot(yt)
|
||||
pylab.show()
|
||||
```
|
||||
|
||||
Тестирование программы:
|
||||
```py
|
||||
>>> import main_SAU.py
|
||||
y= 0.0
|
||||
y= 0.2173913043478261
|
||||
y= 0.4763705103969754
|
||||
y= 0.686594887811293
|
||||
y= 0.8199324616478645
|
||||
y= 0.8837201137353929
|
||||
y= 0.8994188484874774
|
||||
y= 0.8892777072047301
|
||||
y= 0.870097963179993
|
||||
y= 0.8518346102696789
|
||||
y= 0.8387499784485772
|
||||
y= 0.8314204114211459
|
||||
y= 0.8286051955249649
|
||||
y= 0.8285656555914835
|
||||
y= 0.8297915186846528
|
||||
y= 0.8312697736438287
|
||||
y= 0.8324765218921963
|
||||
y= 0.8332456979978418
|
||||
y= 0.8336163607592184
|
||||
y= 0.8337101315489143
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
# 9. Завершение сеанса работы с IDLE
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
4.263134009624702 4.067283548723314 4.874920842655541 4.834128754109237 10.405920382638437
|
||||
11.61359628853662 7.593559339199566 8.905524284214025 8.186641831318802 8.638222773625724
|
||||
10.700010550793879 5.937964750303343 14.858886989589493 4.480521770666802 10.21863100240053
|
||||
8.09653182808412 10.833705848935924 9.862509524620615 11.252167038027647 8.640348799010265
|
||||
13.592229845972096 4.883380805635669 7.553625615588027 13.512737353500533 6.7138113007856965
|
||||
11.906386758613547 9.718459182587361 3.71492974457289 4.942941008501308 10.223575151953712
|
||||
12.950645342438829 5.157741827157216 10.346955136422984 12.96777573030182 13.306115816113852
|
||||
8.834837767997525 0.12078079724976654 9.788832403588085 11.490264634495386 5.082665741299458
|
||||
2.17738781613307 8.375021265815336 13.383241973998315 4.689091929318712 15.563525674193436
|
||||
6.592656956033435 23.556310839847484 4.384188136721545 7.622389260732377 11.17003135779134
|
||||
@ -0,0 +1,87 @@
|
||||
# Общее контрольное задание по теме 9
|
||||
|
||||
Голощапов Д.Е., А-01-23
|
||||
|
||||
# Задание:
|
||||
|
||||
Создать и записать в модуль класс, содержащий следующие компоненты:
|
||||
|
||||
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их окладов, некоторые начальные значения;
|
||||
|
||||
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
|
||||
|
||||
- метод для обеспечения перевода сотрудника из одного отдела в другой;
|
||||
|
||||
- метод для изменения должности сотрудника;
|
||||
|
||||
- свойство, содержащее перечень (список) поощрений сотрудника.
|
||||
|
||||
Создать 2 экземпляра класса, задать им некоторые значения атрибутов и свойства. Отобразить эти значения. Попробовать с этими экземплярами операции перевода из отдела в отдел, изменения должности и оклада, объявления благодарности.
|
||||
|
||||
# Решение
|
||||
|
||||
>>> class Employee:
|
||||
... def __init__(self, fio="", otdel="", dolzhnost="", oklad=0):
|
||||
... self.fio = fio
|
||||
... self.otdel = otdel
|
||||
... self.dolzhnost = dolzhnost
|
||||
... self.oklad = oklad
|
||||
... self._pooshchreniya = []
|
||||
...
|
||||
... def povyshenie_oklad(self, summa):
|
||||
... if summa > 0:
|
||||
... self.oklad += summa
|
||||
... return self.oklad
|
||||
... else:
|
||||
... print("Сумма для повышения оклада должна быть больше нуля.")
|
||||
...
|
||||
... def perevod(self, new_otdel):
|
||||
... self.otdel = new_otdel
|
||||
... return self.otdel
|
||||
...
|
||||
... def cmena_dolzhnosty(self, new_dolzhnost):
|
||||
... self.dolzhnost = new_dolzhnost
|
||||
... return self.dolzhnost
|
||||
...
|
||||
... @property
|
||||
... def pooshchrenia(self):
|
||||
... return self._pooshchreniya
|
||||
...
|
||||
... def add_pooshchrenie(self, pooshchrenie):
|
||||
... self._pooshchreniya.append(pooshchrenie)
|
||||
... print(f"Сотрудник {self.fio} теперь имеет поощрение: {pooshchrenie}")
|
||||
...
|
||||
...
|
||||
>>> emp_1=Employee ("Толчеев В.О.", "Кафедра Управления и информационных технологий", "Профессор", 300000)
|
||||
>>> emp_2=Employee ("Бобряков А.В.", "Кафедра Управления и информационных технологий", "Заведующий кафедрой", 1500000)
|
||||
>>> print(f"{emp_1.fio}, {emp_1.otdel}, {emp_1.dolzhnost}, оклад: {emp_1.oklad}")
|
||||
Толчеев В.О., Кафедра Управления и информационных технологий, Профессор, оклад: 300000
|
||||
>>> print(f"{emp_2.fio}, {emp_2.otdel}, {emp_2.dolzhnost}, оклад: {emp_2.oklad}")
|
||||
Бобряков А.В., Кафедра Управления и информационных технологий, Заведующий кафедрой, оклад: 1500000
|
||||
>>> emp_2.perevod("МАИ")
|
||||
'МАИ'
|
||||
>>> emp_1.povyshenie_oklad(20000)
|
||||
320000
|
||||
>>> emp_2.cmena_dolzhnosty("Ассистент")
|
||||
'Ассистент'
|
||||
>>> emp_2.add_pooshchrenie("Выслуга лет")
|
||||
Сотрудник Бобряков А.В. теперь имеет поощрение: Выслуга лет
|
||||
>>> emp_1.add_pooshchrenie("Лучший ")
|
||||
Сотрудник Толчеев В.О. теперь имеет поощрение: Лучший
|
||||
>>> print(f"Поощрения {emp_1.fio}: {emp_1.pooshchrenia}")
|
||||
Поощрения Толчеев В.О.: ['Лучший ']
|
||||
>>> print(f"Поощрения {emp_2.fio}: {emp_2.pooshchrenia}")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,198 @@
|
||||
# Индивидуальное контрольное задание по теме 9
|
||||
|
||||
Голощапов Д.Е., А-01-23
|
||||
|
||||
## Задание
|
||||
|
||||
M3_9
|
||||
1) Создайте модуль М1, содержащий две функции:
|
||||
|
||||
- функция 1: аргументы - список Х с последовательностью отсчетов некоторого сигнала и два числовых параметра:М1 и М2; в функции должен создаваться кортеж К с индексами "аномальных" отсчетов сигнала, для которых выполняются неравенства: X[i]-X[i-1]<M1 или X[i]-X[i-1]>M2.
|
||||
|
||||
- функция 2: аргументы - список Х с отсчетами сигнала и кортеж К с индексами "аномальных" отсчетов; в функции должен создаваться новый список Х1, в котором элементы совпадают с элементами из Х, если те не являются "аномальными", а элементы из списка К заменяются на X[i]=0.5*(X[i-1]+X[i+1]), а если "аномальным" окажется последний элемент, то его значение заменяется на значение предпоследнего элемента.
|
||||
|
||||
2) Создайте еще один модуль М2, в котором должны выполняться операции:
|
||||
|
||||
- запрашивается и вводится имя текстового файла со значениями сигнала; проверяется наличие файла и при отсутствии - повторение запроса;
|
||||
|
||||
- из указанного файла считывается список Х с сигналом, причем в строках файла может быть разное число отсчетов сигнала;
|
||||
|
||||
- запрашиваются и вводятся граничные значения М1 и М2 (с проверкой: М1<M2);
|
||||
|
||||
- с применением функции 1 создается кортеж с индексами "аномальных" отсчетов; результат отображается на экране;
|
||||
|
||||
- если кортеж "аномальных" отсчетов не пустой, то с применением функции 2 создается список Х1 с "исправленным" сигналом, отображается на экране и записывается в бинарный файл Res44.bin; в ином случае выдается сообщение об отсутствии "аномальных" отсчетов.
|
||||
|
||||
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика сигналы Х и Х1.
|
||||
|
||||
4) Подготовьте текстовый файл, в который запишите 50 случайных, нормально распределенных чисел с математическим ожиданием 10 и стандартным отклонением 5. Проведите 2 расчета по программе с использованием этого файла: в первом расчете задайте М1=-2, М2=5, а во втором - М1=-20, М2=50.
|
||||
|
||||
## Решение
|
||||
|
||||
### Модуль 1
|
||||
|
||||
```
|
||||
|
||||
def find_anomalous_indices(X, M1, M2):
|
||||
|
||||
indices = []
|
||||
for i in range(1, len(X)):
|
||||
diff = X[i] - X[i-1]
|
||||
if diff < M1 or diff > M2:
|
||||
indices.append(i)
|
||||
return tuple(indices)
|
||||
|
||||
|
||||
def correct_anomalies(X, K):
|
||||
|
||||
X1 = X.copy()
|
||||
for idx in K:
|
||||
if idx == len(X) - 1:
|
||||
X1[idx] = X1[idx - 1]
|
||||
else:
|
||||
X1[idx] = 0.5 * (X1[idx - 1] + X1[idx + 1])
|
||||
return X1
|
||||
```
|
||||
|
||||
### Модуль 2
|
||||
|
||||
```
|
||||
|
||||
import os
|
||||
import sys
|
||||
import pickle
|
||||
|
||||
def run_M2():
|
||||
|
||||
while True:
|
||||
filename = input("Введите имя текстового файла с сигналом: ").strip()
|
||||
if os.path.isfile(filename):
|
||||
break
|
||||
else:
|
||||
print('Файл не найден, повторите ввод')
|
||||
|
||||
|
||||
X = []
|
||||
with open(filename, 'r') as f:
|
||||
for line in f:
|
||||
parts = line.strip().split()
|
||||
for p in parts:
|
||||
X.append(float(p))
|
||||
|
||||
|
||||
while True:
|
||||
|
||||
M1 = float(input("Введите M1 (нижняя граница разности): "))
|
||||
M2 = float(input("Введите M2 (верхняя граница разности, M2 > M1): "))
|
||||
if M1 < M2:
|
||||
break
|
||||
else:
|
||||
print("M1 должно быть меньше M2.")
|
||||
|
||||
|
||||
from M1 import find_anomalous_indices, correct_anomalies
|
||||
|
||||
|
||||
K = find_anomalous_indices(X, M1, M2)
|
||||
print(f"Аномальные индексы: {K}")
|
||||
|
||||
|
||||
if K:
|
||||
X1 = correct_anomalies(X, K)
|
||||
print("Исправленный сигнал:", X1)
|
||||
|
||||
|
||||
with open("Res44.bin", "wb") as f:
|
||||
pickle.dump(X1, f)
|
||||
print("Результат записан в Res44.bin")
|
||||
else:
|
||||
print("Аномальных отсчётов не обнаружено.")
|
||||
|
||||
return X, X1 if K else X
|
||||
|
||||
```
|
||||
|
||||
### Модуль 0
|
||||
|
||||
```
|
||||
import pylab
|
||||
from M2 import run_M2
|
||||
|
||||
def main():
|
||||
X, X1 = run_M2()
|
||||
|
||||
pylab.figure(figsize=(10, 5))
|
||||
pylab.subplot(1, 2, 1)
|
||||
pylab.plot(X, label='Исходный сигнал')
|
||||
pylab.title("Исходный сигнал")
|
||||
pylab.xlabel("Отсчёты")
|
||||
pylab.ylabel("Значение")
|
||||
pylab.grid(True)
|
||||
|
||||
pylab.subplot(1, 2, 2)
|
||||
pylab.plot(X1, label='Исправленный сигнал', color='orange')
|
||||
pylab.title("Исправленный сигнал")
|
||||
pylab.xlabel("Отсчёты")
|
||||
pylab.ylabel("Значение")
|
||||
pylab.grid(True)
|
||||
|
||||
pylab.tight_layout()
|
||||
pylab.show()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
```
|
||||
"""
|
||||
Создание тестового файла с нормально распределёнными числами.
|
||||
"""
|
||||
import numpy as np
|
||||
|
||||
# Генерация 50 чисел с нормальным распределением
|
||||
|
||||
signal = np.random.normal(loc=10, scale=5, size=50)
|
||||
|
||||
# Запись в файл
|
||||
with open("signal.txt", "w") as f:
|
||||
for i, value in enumerate(signal):
|
||||
f.write(f"{value:.4f}")
|
||||
if (i + 1) % 5 == 0: # 5 значений в строке
|
||||
f.write("\n")
|
||||
else:
|
||||
f.write(" ")
|
||||
|
||||
print(f"Создан файл signal.txt с {len(signal)} значениями")
|
||||
```
|
||||
|
||||
# Результат
|
||||
|
||||
|
||||
## Для -2 и 5:
|
||||
|
||||
```py
|
||||
Введите имя текстового файла с сигналом: signal.txt
|
||||
Введите M1 (нижняя граница разности): -2
|
||||
Введите M2 (верхняя граница разности, M2 > M1): 5
|
||||
Аномальные индексы: (4, 6, 11, 12, 13, 14, 15, 19, 21, 23, 24, 25, 26, 27, 29, 31, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47)
|
||||
Исправленный сигнал: [4.263134009624702, 4.067283548723314, 4.874920842655541, 4.834128754109237, 8.223862521322928, 11.61359628853662, 10.259560286375322, 8.905524284214025, 8.186641831318802, 8.638222773625724, 10.700010550793879, 12.779448770191685, 8.629985270429243, 9.424308136414886, 8.760419982249502, 9.797062915592713, 10.833705848935924, 9.862509524620615, 11.252167038027647, 12.422198441999871, 13.592229845972096, 10.572927730780062, 7.553625615588027, 7.133718458186862, 9.520052608400205, 9.619255895493783, 6.667092820033337, 5.8050169142673225, 4.942941008501308, 8.946793175470068, 12.950645342438829, 11.648800239430907, 12.308287984866364, 12.96777573030182, 13.306115816113852, 6.713448306681809, 8.251140355134947, 9.870702494815166, 11.490264634495386, 6.833826225314228, 7.604423745564782, 10.493832859781548, 7.59146239455013, 11.577494034371783, 9.08507549520261, 16.320693167525047, 10.352440652123295, 8.987414956427836, 7.622389260732377, 11.17003135779134]
|
||||
Результат записан в Res44.bin
|
||||
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
## Для -20 и 50:
|
||||
|
||||
```py
|
||||
|
||||
Введите имя текстового файла с сигналом: signal.txt
|
||||
Введите M1 (нижняя граница разности): -20
|
||||
Введите M2 (верхняя граница разности, M2 > M1): 50
|
||||
Аномальные индексы: ()
|
||||
Аномальных отсчётов не обнаружено.
|
||||
|
||||
```
|
||||
|
||||

|
||||