From fc408cf1439e5528bc5af3804736ddfb5f472641 Mon Sep 17 00:00:00 2001 From: BezhenarAN Date: Sun, 21 Sep 2025 17:32:32 +0300 Subject: [PATCH] new: added report --- TEMA2/figure0.png | Bin 0 -> 31487 bytes TEMA2/report.md | 484 ++++++++++++++++++++++++++++++++++++++++++++++ TEMA2/report.py | 311 +++++++++++++++++++++++++++++ 3 files changed, 795 insertions(+) create mode 100644 TEMA2/figure0.png create mode 100644 TEMA2/report.md create mode 100644 TEMA2/report.py diff --git a/TEMA2/figure0.png b/TEMA2/figure0.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffad535497408e28969b1d3a6b454a8c723fffe GIT binary patch literal 31487 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ⅇ{|CCe7mYOZ>lnl4s>v-N+VdsjwT0mo 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 literal 0 HcmV?d00001 diff --git a/TEMA2/report.md b/TEMA2/report.md new file mode 100644 index 0000000..7b7b489 --- /dev/null +++ b/TEMA2/report.md @@ -0,0 +1,484 @@ +# Отчет по теме 2 + +Беженарь Алёна Николаевна + +#Базовые типы объектов + +##1. Установка рабочего каталога. Создание рабочего протокола. +В оболочке IDLE установила актуальный рабочий каталог, а затем в нём создала рабочий протокол. +![Изменение директории и создание report.py](figure0.png) + +##2. Изучение простых объектов. +Рассмотрим операции присваивания значения объектам-переменным +```py +>>> f1 = 16; f2 = 3 +>>> f1, f2 + (16, 3) +>>> f1; f2 + 16 + 3 +``` +Для того, чтобы узнать, какие объекты существуют в среде Python на данный момент, ипользовала функцию dir(): +```py +>>>dir() +['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'f1', 'f2', 'os'] +``` +Использовала эту же функцию, но уже с объектом f1 в качестве переданного аргумента, чтобы получить его список атрибутов: +```py +>>>dir(f1) +['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes'] +``` +Определила классовую принадлежность объекта f2 с помощью функции type(f2): +```py +>>>type(f2) + +``` +Удалила объекты f1 и f2 из оперативной памяти, а затем проверила их удаление с помощью функции dir(): +```py +>>>del f1,f2 +>>>dir() +['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os'] +``` +Как видно из вывода после команды, f1 и f2 полностью пропали из оперативной памяти. + +##3. Изучение правил наименования объектов в Python. + +Изучила правила наименования объектов на данном примере: +```py +>>>gg1=1.6 #значение в виде вещественного числа +>>>hh1='Строка' #значение в виде символьной строки +>>>73sr=3 #неправильное имя – начинается с цифры - будет диагностика! +SyntaxError: invalid decimal literal +>>>and=7 #недопустимое имя – совпадает с ключевым словом - будет диагностика! +SyntaxError: invalid syntax +``` + +##4 Изучение ключевых слов + +Вывела список ключевых слов с помощью инструкции: +```py +>>>import keyword +>>>keyword.kwlist +['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] +``` +Сохранила его в переменной с именем keywords +```py +>>>keywords = keyword.kwlist +>>> keywords +['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] +``` + +##5. Изучение встроенных идентификаторов. + +Вывела в консоль список встроенных идентификаторов: + +```py +>>>import builtins +>>>dir(builtins) +['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', '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'] +``` +В данном списке содержатся имена некоторых встроенных функций, работа которых, проверена ниже: +```py +>>>abs(-8800555) #Взятие модуля аргумента +8800555 + +>>>len("Test") # Расчет длины объекта +4 + +>>>max(1, 2, 3) # Поиск максимального числа среди аргументов +3 + +>>>min(0, -5, 10) # Поиск минимального числа среди аргументов +-5 + +>>>pow(2, 3) # При передаче 2 аргументов - возведение в степень, 3 - поиск остатка от деления на 3 аргумент. +8 + +>>>pow(2, 3, 3) +2 + +>>>round(2.5987,0) # Округление до количества цифр после запятой, переданного во 2 аргументе +3.0 + +>>>sorted([3, 7, 5, 9, -1]) # Сортировка по возрастанию (при reverse = True - по убыванию) +[-1, 3, 5, 7, 9] + +>>>numbers = [1, 2, 3, 4, 5] +total = sum(numbers) #возвращает сумму всех элементов списка. +total +15 + +>>>list(zip("abcd", [1, 2, 3, 4])) # Попарное объединение элементов +[('a', 1), ('b', 2), ('c', 3), ('d', 4)] +``` +##6. Проверка имён объектов на чувствительность к регистру. +Убедилась, что имена объектов в Python являются регистрочувствительными: +```py +>>>Gg1=45 +>>>gg1;Gg1 +1.6 +45 +``` +##7. Изучение простых типов объектов. + +###7.1 Изучение логического типа (bool). +Пример создания объектов логического типа: +```py +>>>bb1=True;bb2=False +>>>bb1;bb2 +True +False +>>>type(bb1) #функция, показывающая тип (класс) объекта + +``` +###7.2. Изучение остальных простых типов. +Рассмотрела остальные простые типы, такие как int (целые числа), float (вещественные числа) и complex (комплексные числа): +```py +>>>ii1=-1234567890 +>>>ff1=-8.9876e-12 #экспоненциальная форма записи вещественного числа +>>>dv1=0b1101010 #Это – двоичное число. +>>>type(dv1) + +>>.vsm1=0o52765 #Это – восьмеричное число +>>>type(vsm1) + +>>>shest1=0x7109af6 #Это – шестнадцатеричное число +>>>type(shest1) + +>>>cc1=2-3j +>>>a=3.67; b=-0.45 +>>>cc2=complex(a,b) +>>>cc2 +(3.67-0.45j) +``` + +###7.3 Изучение строкового типа (str). +Строки символов можно заключать в одинарные или двойные кавычки: + +```py +>>>ss1='Это - строка символов' +>>>ss1 +'Это - строка символов' +>>>ss1="Это - строка символов" +>>>ss1 +'Это - строка символов' +``` +Внутри строк могут присутствовать экранированные последовательности, начинающиеся со знака "\", что позволяет использовать в строках специальные символы: + +```py +>>>ss1a="Это - \" строка символов \", \n \t выводимая на двух строках" +>>>print(ss1a) +Это - " строка символов ", + выводимая на двух строках +>>>ss1b= 'Меня зовут: \n <Беженарь А.Н.>' +>>>print(ss1b) +Меня зовут: + <Беженарь А.Н.> +``` +С помощью тройных кавыче можно задавать многострочные строки, ввод которых будет продолжаться, пока вновь не будут введены тройные кавычки: +```py +>>>mnogo="""Нетрудно заметить , что в результате операции +над числами разных типов получается число, +имеющее более сложный тип из тех, которые участвуют в операции.""" +>>>print(mnogo) +Нетрудно заметить , что в результате операции +над числами разных типов получается число, +имеющее более сложный тип из тех, которые участвуют в операции. +``` +Символьные строки в Python индексируются, поэтому к определенным сиволам или последовательностям символов внутри них можно обращаться по индексам: +```py +>>>ss1[0] #Это – символ «Э» +'Э' +>>>ss1[8] #А это – символ «р» +'р' +>>>ss1[-2] #А это – символ «о» (при знаке «-»(минус) отсчет от конца строки) +'о' +>>>ss1[6:9] # Это часть строки – символы с 6-го индекса по 8-й +'стр' +>>> ss1[13:] # Это часть строки – с 13-го индекса и до конца +'символов' +>>>ss1[:13] # Это часть строки – с начала и до 12-го индекса включительно +'Это - строка ' +>>>ss1[5:-8] # Это часть строки – с 5-го индекса и до 8-го от конца +' строка ' +>>>ss1[3:17:2] # Часть строки – с 3-го по 16-й индексы с шагом 2 +' тоасм' +>>>ss1[17:3:-2] # Часть строки – с 3-го по 16-й индексы с обратным шагом 2 +'омсаот ' +>>>ss1[-4:3:-2] # Часть строки – с 4-го с конца по 3-й с начала индексы с обратным шагом 2 +'омсаот ' +>>>ss1[4]='=' # Будет диагностика! +Traceback (most recent call last): + File "", line 1, in + ss1[4]='=' # Будет диагностика! +TypeError: 'str' object does not support item assignment +>>>ss1=ss1[:4]+'='+ss1[5:] +>>>print(ss1) +Это = строка символов +``` +Проделаю тоже самое самостоятельно со строкой ss1b: +```py +>>>ss1b +'Меня зовут: \n <Беженарь А.Н.>' +>>>ss1b[3] +'я' +>>>ss1b[3-2] +'е' +>>>ss1b[-3] +'Н' +>>>ss1b[-3:] +'Н.>' +>>>ss1b[0:-1] +'Меня зовут: \n <Беженарь А.Н.' +>>>ss1b[3:-3] +'я зовут: \n <Беженарь А.' +>>>ss1b[-23:0] +'' +>>>ss1b[::-1] +'>.Н.А ьранежеБ< \n :тувоз янеМ' +>>>ss1b[::-3] +'>.ьне :в е' +>>>ss1b=ss1b[0:15]+ss1b[16:29] +>>>ss1b +'Меня зовут: \n <еженарь А.Н.>' +``` +###7.4 Выполняю задание, самостоятельно закрепляю изученные типы переменных. +```py +>>>stringg = '15'+"ab" +>>>type(stringg) + +>>>a = 10 +>>>type(a) + +>>>b = 0.00800 +>>>type(b) + +>>>b = 0.8e-100 +>>>type(b) + +>>>c = 0-1j +>>>type(c) + +>>>var = c/b +>>>type(var) + +>>>b = True +>>>type(b) + +>>>b = None +>>>type(b) + +``` +##8.Изучение сложных типов объектов. +###8.1. Изучение списков. +Рассмотрела такой объект Python, как списки - упорядоченные по местоположению коллекции объектов произвольных типов, размер которых практически не ограничен: +```py +>>>spis1=[111,'Spisok',5-9j] +>>stup=[0,0,1,1,1,1,1,1,1] +>>>spis=[1,2,3,4, + 5,6,7, + 8,9,10] +``` +Списки в Python индексируются так же как и строки: +```py +>>>spis1[-1] # Если индекс отрицательный, то он отсчитывается с конца, но не с 0, а с 1 + (5-9j) +>>> stup[-8::2] # Вывод элементов с 8-го индекса с конца с шагом 2 + [0, 1, 1, 1] +``` +Элементы списков можно изменять: +```py +>>> spis1[1] = "Список" +>>> print(spis1) + [111, 'Список', (5-9j)] +``` +Методы объекта находятся в списке его атрибутов, поэтому для их просмотра нужно опять вводить функцию dir(), а описание какого-либо метода можно получить с помощью функции help(<название метода>): +```py +>>>dir(spis1) +['__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'] +>>>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. +``` +С помощью методов объектов-списков можно добавлять и удалять элементы: +```py +>>>spis1.append('New item') # В конец списка добавлен элемент «New item» +>>>print(spis1) +[111, 'Список', (5-9j), 'New item'] +>>>spis1+['Second New item'] #Конкатенация (исходный список не изменился) +[111, 'Список', (5-9j), 'New item', 'Second New item'] +>>>print(spis1) +[111, 'Список', (5-9j), 'New item'] +>>>spis1.append(ss1b) +>>.print(spis1) +[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n еженарь А.Н.>'] +>>>spis1.pop(1) #Из списка удален элемент с индексом 1 +'Список' +``` +Рассмотрела остальные методы объектов-списков: +```py +>>>list=[1,2,3,4,5] +>>>list.insert(1, 3) # Вставка второго аргумента на индекс, определяемый первым аргументом +>>>print(list) +[1, 3, 2, 3, 4, 5] +>>>list.remove(3) # Удаление первого вхождения элемента, соответствующего переданному аргументу +>>print(list) +[1, 2, 3, 4, 5] +>>>list.extend(list[:2]) # Продление списка +>>>print(list) +[1, 2, 3, 4, 5, 1, 2] +>>>list.sort() # Сортировка элементов списка +>>>print(list) +[1, 1, 2, 2, 3, 4, 5] +>>>list.reverse() # Изменение порядка следования элементов списка на противоположный +>>>print(list) +[5, 4, 3, 2, 2, 1, 1] +>>>list.copy() # Создание копии списка +[5, 4, 3, 2, 2, 1, 1] +>>>list.count(2) # Подсчет вхождений в список для элемента, переданного в качестве аргумента +2 +>>>list.index(3) # Вывод индекса в списке для элемента, соответствующего переданному аргументу +2 +``` +Списки также могут быть вложенными, то есть включать в себя другие списки: +```py +>>>spis2=[spis1,[4,5,6,7]] #здесь элементами являются два списка +>>>print(spis2) +[[111, (5-9j), 'New item', 'Меня зовут: \n еженарь А.Н.>'], [4, 5, 6, 7]] +>>>spis2[0][1] #обращение к элементу списка spis1 +(5-9j) +>>>spis2[0][1]=78 #Значение элемента заменено на 78 +>>>print(spis2) +[[111, 78, 'New item', 'Меня зовут: \n еженарь А.Н.>'], [4, 5, 6, 7]] +>>>print(spis1) +[111, 78, 'New item', 'Меня зовут: \n еженарь А.Н.>'] +``` +Видим, что spis1 тоже изменился. Это происходит потому, что python работает не просто с объектами, а с ссылками на участки памяти. То есть, в Python списки передаются по ссылке, а не по значению.Упоминая spis1 в строке spis2=[spis1,[4,5,6,7]] мы не создаем копию spis1, а сообщаем именно тот список, поэтому его изменения в составе spis2 отображаются на исходном spis1. + +Создание своего списка - объекта: +```py +>>>spis3 = [100, 'Test', True, spis1] +>>>print(spis3) +[100, 'Test', True, [111, 78, 'New item', 'Меня зовут: \n еженарь А.Н.>']] +``` +###8.2. Изучение кортежей. +Объекты-кортежи очень похожи на списки, но их нельзя изменять, также литерал кортежа заключается в круглые скобки, а не в квадратные как у списков. В примере ниже рассмотрены варианты создания кортежей и их 2 основных метода: +```py +>>>kort1=(222,'Kortezh',77+8j) +>>>kort1= kort1+(1,2) +>>>print(kort1) +(222, 'Kortezh', (77+8j), 1, 2) +>>>kort1= kort1+(ss1b,) +>>>print(kort1) +(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n еженарь А.Н.>') +>>>kort2=kort1[:2]+kort1[3:] +>>>print(kort2) +(222, 'Kortezh', 1, 2, 'Меня зовут: \n еженарь А.Н.>') +>>>kort1.index(2) +4 +>>>kort1.count(222) +1 +>>>kort1[2]=90 #Будет получена диагностика о невозможности изменения кортежа +Traceback (most recent call last): + File "", line 1, in + kort1[2]=90 +TypeError: 'tuple' object does not support item assignment +``` +Создала свой объект-кортеж, в котором все элементы разного типа: +```py +>>> kort3 = (123, "Text", [1, 2, 3], (1, 2, 3)) +>>> print(kort3) +(123, 'Text', [1, 2, 3], (1, 2, 3)) +``` +###8.3. Изучение словарей. +Объект-словарь представляет из себя набор пар «ключ-значение», причем в качестве ключей могут использоваться неизменяемые типы объектов, а в виде значений - объекты любых типов: +```py +>>>dic1={'Saratov':145, 'Orel':56, 'Vologda':45} +>>>print(dic1) +{'Saratov': 145, 'Orel': 56, 'Vologda': 45} +>>>dic1["Orel"] # Обращение к элементам словаря осуществляется по ключам, а не по индексам +56 +>>>dic1["Pskov"] = 78 # Добавление нового элемента в словарь +>>>dic1 +{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78} +``` +К ключам словаря можно обратиться с помощью метода keys(), а к значениям - с помощью метода values(): +```py +>>>sorted(dic1.keys()) +['Orel', 'Pskov', 'Saratov', 'Vologda'] +>>>sorted(dic1.values()) +[45, 56, 78, 145] +``` +Элементы словаря также могут быть словарями: +```py +>>>dic2={1:'mean',2:'standart deviation',3:'correlation'} +>>>dic3={'statistics':dic2,'POAS':['base','elementary','programming']} +>>>dic3['statistics'][2] +'standart deviation' +``` +С помощью функции dict() можно создавать словарь из списка с элементами-кортежами: +```py +>>>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 еженарь А.Н.>'} +``` +Также с помощью этой функции и функции zip() можно создавать словари и просто из двух списков: +```py +>>>dic5=dict(zip(['A','B','C','Stroka'],[16,-3,9,ss1b])) +>>>dic5 +{'A': 16, 'B': -3, 'C': 9, 'Stroka': 'Меня зовут: \n еженарь А.Н.>'} +``` +Так как элементы словаря являются парами «ключ-значение», то каждому ключу должно соответствовать своё значение, поэтому, если при создании словаря число ключей не равно числу значений, то словарь создастся с количеством элементов, равным наименьшей из длин списка ключей или списка значений: +```py +>>>cort=(1,2,3,4) +>>>cort=(1,2,3,4,5,6,7) +>>>spisok = ["A", "B", "C", "D", "E"] +>>>dictionary = dict(zip(cort, spisok)) +>>>dictionary +{1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E'} +``` +Пример словаря с описанием состава студентов, обучающихся на АВТИ: +```py +>>>AVTI = {"Курс I" : [22, 23, 17, 24, 30, 29, 28, 25, 23, 0, 4, 31, 30, 33, 18, 12, 27], + "Курс II" : [18, 16, 12, 15, 29, 18, 21, 23, 13, 0, 4, 20, 31, 26, 16], + "Курс III" : [17, 12, 0, 6, 17, 15, 19, 19, 0, 0, 5, 17, 22, 18, 12], + "Курс IV" : [27, 16, 0, 13, 17, 15, 19, 20, 0, 0, 2, 15, 18, 16, 17]} +>>>AVTI["Курс III"][5] +15 +``` +###8.4. Изучение объектов-множеств. +Объекты-множества – это неупорядоченные совокупности неповторяющихся элементов неизменяемых типов. Пример создания такого объекта: +```py +>>>mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'} +>>>mnoz1 +{'двигатель', 'микропроцессор', 'линия связи', 'датчик'} +``` +Некоторые операции с множествами: +```py +>>> len(mnoz1) # Определение числа элементов +4 +>>> "датчик" in mnoz1 # Проверка наличия элемента в множестве +True +>>> mnoz1.add("реле") # Добавление элемента в множество +>>> print(mnoz1) +{'линия связи', 'двигатель', 'микропроцессор', 'реле', 'датчик'} +>>> mnoz1.remove("линия связи") # Удаление элемента из множества +>>> print(mnoz1) +{'двигатель', 'микропроцессор', 'реле', 'датчик'} +``` +Придумала свой объект-множество с элементами разных типов и выполнил над ним некоторые операции: +```py +>>>mnozhestvo = {123, "Text", (1, 2, 3)} +>>>mnozhestvo.add(100) +>>>mnozhestvo +{'Text', 123, (1, 2, 3), 100} +>>>mnozhestvo.remove(123) +>>>mnozhestvo +{'Text', (1, 2, 3), 100} +``` +##9. Завершение работы со средой. +Сохранила файлы отчета в своем рабочем каталоге и закончила сеанс работы с IDLE. \ No newline at end of file diff --git a/TEMA2/report.py b/TEMA2/report.py new file mode 100644 index 0000000..0d7bfb9 --- /dev/null +++ b/TEMA2/report.py @@ -0,0 +1,311 @@ +#Протокол по Теме 2 Беженарь Алёна Николаевна +import os +os.chdir("D:\\ПОАС\\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__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes'] +type(f2) + +del f1,f2 +dir() +['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os'] +gg1 = 1.6 # Значение в виде вещественного числа +hh1 = "Строка" # Значение в виде символьной строки +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'] +keywords = keyword.kwlist +keywords +['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'] +abs(-8800555) +8800555 +abs(-8800555) #Взятие модуля аргумента +8800555 +len("Test") # Расчет длины объекта +4 +max(1, 2, 3) # Поиск максимального числа среди аргументов +3 +min(0, -5, 10) # Поиск минимального числа среди аргументов +-5 +pow(2, 3) # При передаче 2 аргументов - возведение в степень, 3 - поиск остатка от деления на 3 аргумент. +8 +pow(2, 3, 3) +2 +round(2.5987,0) # Округление до количества цифр после запятой, переданного во 2 аргументе +3.0 +sorted([3, 7, 5, 9, -1]) # Сортировка по возрастанию (при reverse = True - по убыванию) +[-1, 3, 5, 7, 9] +numbers = [1, 2, 3, 4, 5] +total = sum(numbers) +total +15 +list(zip("abcd", [1, 2, 3, 4])) # Попарное объединение элементов +[('a', 1), ('b', 2), ('c', 3), ('d', 4)] +Gg1=45 +gg1;Gg1 +1.6 +45 +ii1=-1234567890 +ff1=-8.9876e-12 #экспоненциальная форма записи вещественного числа +dv1=0b1101010 #Это – двоичное число. +type(dv1) + +vsm1=0o52765 #Это – восьмеричное число +type(vsm1) + +shest1=0x7109af6 #Это – шестнадцатеричное число +type(shest1) + +cc1=2-3j +a=3.67; b=-0.45 +cc2=complex(a,b) +cc2 +(3.67-0.45j) +ss1='Это - строка символов' +ss1 +'Это - строка символов' +ss1="Это - строка символов" +ss1 +'Это - строка символов' +ss1a="Это - \" строка символов \", \n \t выводимая на двух строках" +print(ss1a) +Это - " строка символов ", + выводимая на двух строках +ss1b= 'Меня зовут: \n <Беженарь А.Н.>' +print(ss1b) +Меня зовут: + <Беженарь А.Н.> +mnogo="""Нетрудно заметить , что в результате операции +над числами разных типов получается число, +имеющее более сложный тип из тех, которые участвуют в операции.""" +print(mnogo) +Нетрудно заметить , что в результате операции +над числами разных типов получается число, +имеющее более сложный тип из тех, которые участвуют в операции. +ss1[0] #Это – символ «Э» +'Э' +ss1[8] #А это – символ «р» +'р' +ss1[-2] #А это – символ «о» (при знаке «-»(минус) отсчет от конца строки) +'о' +ss1[6:9] # Это часть строки – символы с 6-го индекса по 8-й +'стр' +ss1[13:] # Это часть строки – с 13-го индекса и до конца +'символов' +ss1[:13] # Это часть строки – с начала и до 12-го индекса включительно +'Это - строка ' +ss1[5:-8] # Это часть строки – с 5-го индекса и до 8-го от конца +' строка ' +ss1[3:17:2] # Часть строки – с 3-го по 16-й индексы с шагом 2 +' тоасм' +ss1[17:3:-2] # Часть строки – с 3-го по 16-й индексы с обратным шагом 2 +'омсаот ' +ss1[-4:3:-2] # Часть строки – с 4-го с конца по 3-й с начала индексы с обратным шагом 2 +'омсаот ' +ss1[4]='=' # Будет диагностика! +Traceback (most recent call last): + File "", line 1, in + ss1[4]='=' # Будет диагностика! +TypeError: 'str' object does not support item assignment +ss1=ss1[:4]+'='+ss1[5:] +print(ss1) +Это = строка символов +ss1b +'Меня зовут: \n <Беженарь А.Н.>' +ss1b[3] +'я' +ss1b[3-2] +'е' +ss1b[-3] +'Н' +ss1b[-3:] +'Н.>' +ss1b[0:-1] +'Меня зовут: \n <Беженарь А.Н.' +ss1b[3:-3] +'я зовут: \n <Беженарь А.' +ss1b[-23:0] +'' +ss1b[::-1] +'>.Н.А ьранежеБ< \n :тувоз янеМ' +ss1b[::-3] +'>.ьне :в е' +ss1b=ss1b[0:15]+ss1b[16:29] +ss1b +'Меня зовут: \n <еженарь А.Н.>' +ss1b=ss1b[0:14]+ss1b[15:29] +stringg = '15'+"ab" +type(stringg) + +a = 10 +type(a) + +b = 0.00800 +type(b) + +b = 0.8e-100 +type(b) + +c = 0-1j +type(c) + +var = c/b +type(var) + +b = True +type(b) + +b = None +type(b) + +spis1=[111,'Spisok',5-9j] +stup=[0,0,1,1,1,1,1,1,1] +spis=[1,2,3,4, + 5,6,7, + 8,9,10] +spis1[-1] # Если индекс отрицательный, то он отсчитывается с конца, но не с 0, а с 1 +(5-9j) +stup[-8::2] +[0, 1, 1, 1] +spis1[1] = "Список" +print(spis1) +[111, 'Список', (5-9j)] +dir(spis1) +['__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'] +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') # В конец списка добавлен элемент «New item» +print(spis1) +[111, 'Список', (5-9j), 'New item'] +spis1+['Second New item'] #Конкатенация (исходный список не изменился) +[111, 'Список', (5-9j), 'New item', 'Second New item'] +print(spis1) +[111, 'Список', (5-9j), 'New item'] +spis1.append(ss1b) +print(spis1) +[111, 'Список', (5-9j), 'New item', 'Меня зовут: \n еженарь А.Н.>'] +spis1.pop(1) #Из списка удален элемент с индексом 1 +'Список' +list=[1,2,3,4,5] +list.insert(1, 3) # Вставка второго аргумента на индекс, определяемый первым аргументом +print(list) +[1, 3, 2, 3, 4, 5] +list.remove(3) # Удаление первого вхождения элемента, соответствующего переданному аргументу +print(list) +[1, 2, 3, 4, 5] +list.extend(list[:2]) # Продление списка +print(list) +[1, 2, 3, 4, 5, 1, 2] +list.sort() # Сортировка элементов списка +print(list) +[1, 1, 2, 2, 3, 4, 5] +list.reverse() # Изменение порядка следования элементов списка на противоположный +print(list) +[5, 4, 3, 2, 2, 1, 1] +list.copy() # Создание копии списка +[5, 4, 3, 2, 2, 1, 1] +list.count(2) # Подсчет вхождений в список для элемента, переданного в качестве аргумента +2 +list.index(3) # Вывод индекса в списке для элемента, соответствующего переданному аргументу +2 +spis2=[spis1,[4,5,6,7]] #здесь элементами являются два списка +print(spis2) +[[111, (5-9j), 'New item', 'Меня зовут: \n еженарь А.Н.>'], [4, 5, 6, 7]] +spis2[0][1] #обращение к элементу списка spis1 +(5-9j) +spis2[0][1]=78 #Значение элемента заменено на 78 +print(spis2) +[[111, 78, 'New item', 'Меня зовут: \n еженарь А.Н.>'], [4, 5, 6, 7]] +kort1=(222,'Kortezh',77+8j) +kort1= kort1+(1,2) +print(kort1) +(222, 'Kortezh', (77+8j), 1, 2) +kort1= kort1+(ss1b,) +print(kort1) +(222, 'Kortezh', (77+8j), 1, 2, 'Меня зовут: \n еженарь А.Н.>') +kort2=kort1[:2]+kort1[3:] +print(kort2) +(222, 'Kortezh', 1, 2, 'Меня зовут: \n еженарь А.Н.>') +kort1.index(2) +4 +kort1.count(222) +1 +kort1[2]=90 +Traceback (most recent call last): + File "", line 1, in + kort1[2]=90 +TypeError: 'tuple' object does not support item assignment +kort3 = (123, "Text", [1, 2, 3], (1, 2, 3)) +print(kort3) +(123, 'Text', [1, 2, 3], (1, 2, 3)) +dic1={'Saratov':145, 'Orel':56, 'Vologda':45} +print(dic1) +{'Saratov': 145, 'Orel': 56, 'Vologda': 45} +dic1["Orel"] # Обращение к элементам словаря осуществляется по ключам, а не по индексам +56 +dic1["Pskov"] = 78 # Добавление нового элемента в словарь +dic1 +{'Saratov': 145, 'Orel': 56, 'Vologda': 45, 'Pskov': 78} +sorted(dic1.keys()) +['Orel', 'Pskov', 'Saratov', 'Vologda'] +sorted(dic1.values()) +[45, 56, 78, 145] +dic2={1:'mean',2:'standart deviation',3:'correlation'} +dic3={'statistics':dic2,'POAS':['base','elementary','programming']} +dic3['statistics'][2] +'standart deviation' +dic4=dict([(1,['A','B','C']),(2,[4,5]),('Q','Prim'),('Stroka',ss1b)]) +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 еженарь А.Н.>'} +cort=(1,2,3,4) +cort=(1,2,3,4,5,6,7) +spisok = ["A", "B", "C", "D", "E"] +dictionary = dict(zip(cort, spisok)) +dictionary +{1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E'} +AVTI = {"Курс I" : [22, 23, 17, 24, 30, 29, 28, 25, 23, 0, 4, 31, 30, 33, 18, 12, 27], + "Курс II" : [18, 16, 12, 15, 29, 18, 21, 23, 13, 0, 4, 20, 31, 26, 16], + "Курс III" : [17, 12, 0, 6, 17, 15, 19, 19, 0, 0, 5, 17, 22, 18, 12], + "Курс IV" : [27, 16, 0, 13, 17, 15, 19, 20, 0, 0, 2, 15, 18, 16, 17]} +AVTI["Курс III"][5] +15 +mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'} +mnoz1 +{'двигатель', 'микропроцессор', 'линия связи', 'датчик'} +len(mnoz1) # Определение числа элементов +4 +"датчик" in mnoz1 # Проверка наличия элемента в множестве +True +mnoz1.add("реле") # Добавление элемента в множество +mnoz1 +{'микропроцессор', 'датчик', 'реле', 'двигатель', 'линия связи'} +mnoz1.remove("линия связи") # Удаление элемента из множества +mnoz1 +{'микропроцессор', 'датчик', 'реле', 'двигатель'} +mnozhestvo = {123, "Text", (1, 2, 3)} +mnozhestvo.add(100) +mnozhestvo +{'Text', 123, (1, 2, 3), 100} +mnozhestvo.remove(123) +mnozhestvo +{'Text', (1, 2, 3), 100}