Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

20 KiB

Отчет по теме 2

Володин Денис, А-02-23

Пункт 1

Рабочая среда настроена на нахождение в нужной директории:

>>> import os
>>> os.chdir(r'C:\Users\denvo\OneDrive\Рабочий стол\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__', '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

Правила именования объектов:

>>> gg1 = 1.6
>>> hh1 = 'example'
>>> 73sr = 3
SyntaxError: invalid syntax  --- ошибка, т.к. имя не может начинаться с числа
>>> and = 7
SyntaxError: invalid syntax  --- ошибка, т.к. имя не может совпадать с ключевым словом языка

Пункт 4

Можно просмотреть все ключевые слова:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', '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']

>>> keyWordList = keyword.kwlist
>>> keyWordList
['False', 'None', 'True', 'and', 'as', 'assert', '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

>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError',
 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError',
 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',
 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',
 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt',
 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented',
 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError',
 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration',
 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError',
 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',
 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__',
 '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', '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(-10)
10

Длина объекта

>>> len([1, 2, 3])
3

Максимум значений:

>>> max(15, 14)
15

Минимум значений:

>>> min (15,10)
10

Возведение в степень:

>>> 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]

>>> sorted ([3, 7, 9, 75, 0, -1], reverse = True)
[75, 9, 7, 3, 0, -1]

Объединение объектов в кортеж:

>>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]
>>> zip (list1, list2)
<zip object at 0x0000000002C42E88>

>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]

Пункт 6

Питон - язык, чувствительный к регистрам

>>> Gg1 = 45
>>> gg1, Gg1
(1.6, 45)
>>> gg1 == Gg1
False

Пункт 7

Изучим базовые типы объектов

Логический тип:

>>> 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(bb1)
<class 'bool'>

Восьмеричное число:

>>> 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)
Нетрудно заметить , что в результате операции
над числами разных типов получается число,
имеющее более сложный тип из тех, которые участвуют в операции.

Обратимся к отдельным элементам с помощью квадратных кавычек:

>>> mnogo[3]
'р'
>>> ss1b[-1]
'.'

Срезы:

>>> ss1[6:9]
'стр'
>>> ss1[3:17:2]
'  тоасм'
>>> ss1[5:-8]
' строка '
>>> ss1[::-1]
'воловмис акортс - отЭ'
>>> ss1[17:3:-2]
'омсаот '
>>> ss1[-4:3:-2]
'омсаот '

Строка - неизменяемый тип данных:

>>> ss1[4] = "="
Traceback (most recent call last):
  File "<pyshell#108>", line 1, in <module>
    ss1[4] = "="
TypeError: 'str' object does not support item assignment

Но если возникает необходимость изменить строку, то можно пересобрать ее из исходной строки:

>>> ss1=ss1[:4]+'='+ss1[5:]
>>> ss1
'Это = строка символов'

Собственное создание разных типов данных:

>>> 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]
'дячй'
>>> 

Пункт 8

Список list - изменяемый тип данных. Это упорядоченная последовательность из элементов одного или разных типов.

>>> 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

Методы списков:

  1. Добавление в конец:
>>> 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']
  1. Сложение строк:
>>> 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 Володин Д.В.']
  1. Удаление элемента по индексу:
>>> spis1.pop(1)
'Список'
>>> spis1
[111, (5-9j), 'New item', 'Меня зовут: \n Володин Д.В.']
>>> spis1.pop(7)
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    spis1.pop(7)
IndexError: pop index out of range
  1. Вставка элемента в определенное место по индексу:
>>> 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
[(5-9j), 'hello', 'New item', 'Меня зовут: \n Володин Д.В.', 'test']
  1. Удаление элемента по значению:
>>> 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 Володин Д.В.']
>>> spis1.remove('kitten')
Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    spis1.remove('kitten')
  1. Добавление элементов объекта в конец другого объекта:
>>> 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)]
  1. Полное очищение списка:
>>> help(spis1.clear)
Help on built-in function clear:

clear() method of builtins.list instance
    Remove all items from list.

>>> end1.clear()
>>> end1
[]
  1. Сортировка списка БЕЗ создания нового объекта:
>>> 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]

При этом некоторые key's не применимы для некоторых типов (у string нет abs, у complex нет длины и т.д.)

  1. Создание копии списка:
>>> 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]
  1. Поиск индекса по значению:
>>> 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#71>", line 1, in <module>
    endcopy.index("lalala")
ValueError: 'lalala' is not in list
  1. Подсчет количества элементов по значению:
>>> 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.

Кортеж - последовательность как список, но неизменяемая как строка.

>>> 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#91>", 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'>
>>> 

Словарь (dictionary) - содержит в себе совокупность пар "ключ (key) (неизменяемый)": "значение (value) (любого типа)"

>>> dic1={'Saratov':145, 'Orel':56, 'Vologda':45}
>>> dic1
{'Saratov': 145, 'Orel': 56, 'Vologda': 45}
>>> dic1[1]
Traceback (most recent call last):
  File "<pyshell#99>", 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'}

Как видно, в итоговом словаре пять объектов. Это связано с работой функции zip: длина итогового объекта будет соответствовать минимальной длине составляющего объекта.

Словари: состоят из Неповторяющихся неизменяемых элементов

>>> mnoz1={'двигатель','датчик','линия связи','датчик','микропроцессор','двигатель'}
>>> mnoz1
{'двигатель', 'линия связи', 'датчик', 'микропроцессор'}
>>> len(mnoz1)
4
>>> 'датчик' in mnoz1
True
>>> mnoz1.add('реле')
>>> mnoz1.remove('линия связи')
>>> mnoz1
{'реле', 'микропроцессор', 'датчик', 'двигатель'}