"Более удобный способ заключается в использовании функции [isclose() модуля math](https://docs.python.org/3/library/math.html#math.isclose)."
]
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
...
...
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
# Python
# Python
## Типы данных
## Типы данных
### Раздел 1. Идентификаторы и ключевые слова
### Раздел 1. Идентификаторы и ключевые слова
Когда мы создаем элемент данных (объект), мы можем либо присвоить его переменной, либо поместить в коллекцию. Присваивание по сути своей означает связывание ссылки на этот объектом и какой-либо переменной. Имена, которые мы даем своим ссылкам на объекты, называются *идентификаторами* или просто *именами*.
Когда мы создаем элемент данных (объект), мы можем либо присвоить его переменной, либо поместить в коллекцию. Присваивание по сути своей означает связывание ссылки на этот объектом и какой-либо переменной. Имена, которые мы даем своим ссылкам на объекты, называются *идентификаторами* или просто *именами*.
Валидным идентификатором в Python является непустая последовательность любой длины, состоящая из символов. При этом особо выделяется первый символ в этой последовательности: это может быть любой символ, который считается буквой в Юникоде (в том числе, но не только, буквы таблицы ASCII: 'A', 'B', ..., 'Z', 'a', 'b', ..., 'z'), или символ подчеркивания ('\_'). [Допускается](https://www.python.org/dev/peps/pep-3131/) использование символов национальных языков в качестве первого или любого другого символа в идентификаторах. Продолжающими символами в идентификаторах могут быть практически любой непробельный символ Юникода, например, любая буква или цифра. Идентификаторы в Python чувствительны к регистру.
Валидным идентификатором в Python является непустая последовательность любой длины, состоящая из символов. При этом особо выделяется первый символ в этой последовательности: это может быть любой символ, который считается буквой в Юникоде (в том числе, но не только, буквы таблицы ASCII: 'A', 'B', ..., 'Z', 'a', 'b', ..., 'z'), или символ подчеркивания ('\_'). [Допускается](https://www.python.org/dev/peps/pep-3131/) использование символов национальных языков в качестве первого или любого другого символа в идентификаторах. Продолжающими символами в идентификаторах могут быть практически любой непробельный символ Юникода, например, любая буква или цифра. Идентификаторы в Python чувствительны к регистру.
Второе правило относительно идентификаторов гласит, что определяемый идентификатор не должен совпадать ни с одним из ключевых слов языка Python. Вот их список:
Второе правило относительно идентификаторов гласит, что определяемый идентификатор не должен совпадать ни с одним из ключевых слов языка Python. Вот их список:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
importkeyword
importkeyword
keyword.kwlist
keyword.kwlist
```
```
%% Output
%% Output
['False',
['False',
'None',
'None',
'True',
'True',
'and',
'and',
'as',
'as',
'assert',
'assert',
'break',
'break',
'class',
'class',
'continue',
'continue',
'def',
'def',
'del',
'del',
'elif',
'elif',
'else',
'else',
'except',
'except',
'finally',
'finally',
'for',
'for',
'from',
'from',
'global',
'global',
'if',
'if',
'import',
'import',
'in',
'in',
'is',
'is',
'lambda',
'lambda',
'nonlocal',
'nonlocal',
'not',
'not',
'or',
'or',
'pass',
'pass',
'raise',
'raise',
'return',
'return',
'try',
'try',
'while',
'while',
'with',
'with',
'yield']
'yield']
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Первое соглашение касается предопределенных идентификаторов Python: их не следует переопределять в качестве собственных идентификаторов. Т.е. не следует вводить свой идентификатор, совпадающий с одним из встроенных типов данных (например, int). Список всех идентификаторов, предопределенных в Python, можно посмотреть, вызвав функцию dir, которая возвращает список всех аттрибутов переданного ей аргумента. Мы получим желаемый эффект, если передадим ей в качестве аргумента модуль \_\_builtins\_\_:
Первое соглашение касается предопределенных идентификаторов Python: их не следует переопределять в качестве собственных идентификаторов. Т.е. не следует вводить свой идентификатор, совпадающий с одним из встроенных типов данных (например, int). Список всех идентификаторов, предопределенных в Python, можно посмотреть, вызвав функцию dir, которая возвращает список всех аттрибутов переданного ей аргумента. Мы получим желаемый эффект, если передадим ей в качестве аргумента модуль \_\_builtins\_\_:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
dir(__builtins__)
dir(__builtins__)
```
```
%% Output
%% Output
['ArithmeticError',
['ArithmeticError',
'AssertionError',
'AssertionError',
'AttributeError',
'AttributeError',
'BaseException',
'BaseException',
'BlockingIOError',
'BlockingIOError',
'BrokenPipeError',
'BrokenPipeError',
'BufferError',
'BufferError',
'BytesWarning',
'BytesWarning',
'ChildProcessError',
'ChildProcessError',
'ConnectionAbortedError',
'ConnectionAbortedError',
'ConnectionError',
'ConnectionError',
'ConnectionRefusedError',
'ConnectionRefusedError',
'ConnectionResetError',
'ConnectionResetError',
'DeprecationWarning',
'DeprecationWarning',
'EOFError',
'EOFError',
'Ellipsis',
'Ellipsis',
'EnvironmentError',
'EnvironmentError',
'Exception',
'Exception',
'False',
'False',
'FileExistsError',
'FileExistsError',
'FileNotFoundError',
'FileNotFoundError',
'FloatingPointError',
'FloatingPointError',
'FutureWarning',
'FutureWarning',
'GeneratorExit',
'GeneratorExit',
'IOError',
'IOError',
'ImportError',
'ImportError',
'ImportWarning',
'ImportWarning',
'IndentationError',
'IndentationError',
'IndexError',
'IndexError',
'InterruptedError',
'InterruptedError',
'IsADirectoryError',
'IsADirectoryError',
'KeyError',
'KeyError',
'KeyboardInterrupt',
'KeyboardInterrupt',
'LookupError',
'LookupError',
'MemoryError',
'MemoryError',
'ModuleNotFoundError',
'ModuleNotFoundError',
'NameError',
'NameError',
'None',
'None',
'NotADirectoryError',
'NotADirectoryError',
'NotImplemented',
'NotImplemented',
'NotImplementedError',
'NotImplementedError',
'OSError',
'OSError',
'OverflowError',
'OverflowError',
'PendingDeprecationWarning',
'PendingDeprecationWarning',
'PermissionError',
'PermissionError',
'ProcessLookupError',
'ProcessLookupError',
'RecursionError',
'RecursionError',
'ReferenceError',
'ReferenceError',
'ResourceWarning',
'ResourceWarning',
'RuntimeError',
'RuntimeError',
'RuntimeWarning',
'RuntimeWarning',
'StopAsyncIteration',
'StopAsyncIteration',
'StopIteration',
'StopIteration',
'SyntaxError',
'SyntaxError',
'SyntaxWarning',
'SyntaxWarning',
'SystemError',
'SystemError',
'SystemExit',
'SystemExit',
'TabError',
'TabError',
'TimeoutError',
'TimeoutError',
'True',
'True',
'TypeError',
'TypeError',
'UnboundLocalError',
'UnboundLocalError',
'UnicodeDecodeError',
'UnicodeDecodeError',
'UnicodeEncodeError',
'UnicodeEncodeError',
'UnicodeError',
'UnicodeError',
'UnicodeTranslateError',
'UnicodeTranslateError',
'UnicodeWarning',
'UnicodeWarning',
'UserWarning',
'UserWarning',
'ValueError',
'ValueError',
'Warning',
'Warning',
'ZeroDivisionError',
'ZeroDivisionError',
'__IPYTHON__',
'__IPYTHON__',
'__build_class__',
'__build_class__',
'__debug__',
'__debug__',
'__doc__',
'__doc__',
'__import__',
'__import__',
'__loader__',
'__loader__',
'__name__',
'__name__',
'__package__',
'__package__',
'__spec__',
'__spec__',
'abs',
'abs',
'all',
'all',
'any',
'any',
'ascii',
'ascii',
'bin',
'bin',
'bool',
'bool',
'bytearray',
'bytearray',
'bytes',
'bytes',
'callable',
'callable',
'chr',
'chr',
'classmethod',
'classmethod',
'compile',
'compile',
'complex',
'complex',
'copyright',
'copyright',
'credits',
'credits',
'delattr',
'delattr',
'dict',
'dict',
'dir',
'dir',
'display',
'display',
'divmod',
'divmod',
'enumerate',
'enumerate',
'eval',
'eval',
'exec',
'exec',
'filter',
'filter',
'float',
'float',
'format',
'format',
'frozenset',
'frozenset',
'get_ipython',
'get_ipython',
'getattr',
'getattr',
'globals',
'globals',
'hasattr',
'hasattr',
'hash',
'hash',
'help',
'help',
'hex',
'hex',
'id',
'id',
'input',
'input',
'int',
'int',
'isinstance',
'isinstance',
'issubclass',
'issubclass',
'iter',
'iter',
'len',
'len',
'license',
'license',
'list',
'list',
'locals',
'locals',
'map',
'map',
'max',
'max',
'memoryview',
'memoryview',
'min',
'min',
'next',
'next',
'object',
'object',
'oct',
'oct',
'open',
'open',
'ord',
'ord',
'pow',
'pow',
'print',
'print',
'property',
'property',
'range',
'range',
'repr',
'repr',
'reversed',
'reversed',
'round',
'round',
'set',
'set',
'setattr',
'setattr',
'slice',
'slice',
'sorted',
'sorted',
'staticmethod',
'staticmethod',
'str',
'str',
'sum',
'sum',
'super',
'super',
'tuple',
'tuple',
'type',
'type',
'vars',
'vars',
'zip']
'zip']
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Второе соглашение касается символа подчеркивания ('\_'). Не следует использовать имена, начинающиеся и заканчивающиеся с двух символов подчеркивания (например, \_\_item\_\_), поскольку таким образом в Python определены специальные методы и переменные. Мы можем их переопределять, т.е. создавать их собственные версии, но нам не следует вводить новые идентификаторы, реализующие это правило. Некоторые имена, начинающиеся с одного или двух символов подчеркивания, но не заканчивающиеся ими, трактуются особым образом в определенных контестах, это будет рассмотрено в последующих лекциях, когда мы перейдем к модулям и ООП.
Второе соглашение касается символа подчеркивания ('\_'). Не следует использовать имена, начинающиеся и заканчивающиеся с двух символов подчеркивания (например, \_\_item\_\_), поскольку таким образом в Python определены специальные методы и переменные. Мы можем их переопределять, т.е. создавать их собственные версии, но нам не следует вводить новые идентификаторы, реализующие это правило. Некоторые имена, начинающиеся с одного или двух символов подчеркивания, но не заканчивающиеся ими, трактуются особым образом в определенных контестах, это будет рассмотрено в последующих лекциях, когда мы перейдем к модулям и ООП.
Единственный символ подчеркивания является валидным идентификатором. Внутри интерактивного интерпретатора Python (Python Shell) _ содержит последнее выражение, которое было оценено. В обычных программах этот идентификатор по умолчанию не используется, но некоторые разработчики предпочитают его в итерационных циклах в случаях, когда сам элемент из итератора не используется в теле цикла:
Единственный символ подчеркивания является валидным идентификатором. Внутри интерактивного интерпретатора Python (Python Shell) _ содержит последнее выражение, которое было оценено. В обычных программах этот идентификатор по умолчанию не используется, но некоторые разработчики предпочитают его в итерационных циклах в случаях, когда сам элемент из итератора не используется в теле цикла:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
for_in[1,2,3,4,5]:
for_in[1,2,3,4,5]:
print("Lambda IT")
print("Lambda IT")
```
```
%% Output
%% Output
Lambda IT
Lambda IT
Lambda IT
Lambda IT
Lambda IT
Lambda IT
Lambda IT
Lambda IT
Lambda IT
Lambda IT
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Следует учитывать, что _ часто используется в качестве идентификатора для функции gettext.gettext, которая служит для сопоставления фраз с их аналогами в других языках.
Следует учитывать, что _ часто используется в качестве идентификатора для функции gettext.gettext, которая служит для сопоставления фраз с их аналогами в других языках.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Раздел 2. Целочисленные типы
### Раздел 2. Целочисленные типы
В Python реализовано два встроенных целочисленных типа: int и bool. Оба типа являются неизменяемыми, но это скорее всего не повлияет на вашу работу из-за реализации оператора присваивания. В логических выражениях, 0 и False являются ложными значениями, а True или любое целое число являются истинными. В численных выражениях False оценивается как 0, а True - как 1.
В Python реализовано два встроенных целочисленных типа: int и bool. Оба типа являются неизменяемыми, но это скорее всего не повлияет на вашу работу из-за реализации оператора присваивания. В логических выражениях, 0 и False являются ложными значениями, а True или любое целое число являются истинными. В численных выражениях False оценивается как 0, а True - как 1.
#### Тип int
#### Тип int
Размер целого числа ограничен лишь объемом памяти в вашем компьютере, так что целые числа длинной в сотни десятичных цифр не являются проблемой в Python. Хотя, конечно, работа с ними будет *несколько медленнее*, чем с числами, умещающимися в слово процессора.
Размер целого числа ограничен лишь объемом памяти в вашем компьютере, так что целые числа длинной в сотни десятичных цифр не являются проблемой в Python. Хотя, конечно, работа с ними будет *несколько медленнее*, чем с числами, умещающимися в слово процессора.
По умолчанию целые числа записываются в десятичной системе счистения, но числа, начинающиеся с символов '0b' считаются записанными в двоичной системе счисления, начинающиеся с '0o' считаются записанными в восьмеричной системе счисления, а с '0x' - в шестнадцатиричной (допускается использование символов как в верхнем, так и в нижнем регистре). Например:
По умолчанию целые числа записываются в десятичной системе счистения, но числа, начинающиеся с символов '0b' считаются записанными в двоичной системе счисления, начинающиеся с '0o' считаются записанными в восьмеричной системе счисления, а с '0x' - в шестнадцатиричной (допускается использование символов как в верхнем, так и в нижнем регистре). Например:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
print(3735928559)
print(3735928559)
print(0b11011110101011011011111011101111)
print(0b11011110101011011011111011101111)
print(0o33653337357)
print(0o33653337357)
print(0xDEADBEEF)
print(0xDEADBEEF)
```
```
%% Output
%% Output
3735928559
3735928559
3735928559
3735928559
3735928559
3735928559
3735928559
3735928559
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Следующая таблица содержит математические операции, которые обычно необходимы при работе с целыми числами:
Следующая таблица содержит математические операции, которые обычно необходимы при работе с целыми числами:
| Операция | Описание |
| Операция | Описание |
| -------- | :------- |
| -------- | :------- |
| x + y | Складывает числа x и y |
| x + y | Складывает числа x и y |
| x - y | Вычитает x из y |
| x - y | Вычитает x из y |
| x * y | Умножает x и y |
| x * y | Умножает x и y |
| x / y | Делит x на y. Результатом всегда является float, кроме случаев, когда хотя бы одно из x или y было complex, - в таком случае результатом будет complex |
| x / y | Делит x на y. Результатом всегда является float, кроме случаев, когда хотя бы одно из x или y было complex, - в таком случае результатом будет complex |
| x // y | Делит x на y и отбрасывает дробную часть. Результатом является int |
| x // y | Делит x на y и отбрасывает дробную часть. Результатом является int |
| x % y | Взятие x по модулю y (остаток от деления нацело x на y) |
| x % y | Взятие x по модулю y (остаток от деления нацело x на y) |
| x ** y | Возводит x в степень y |
| x ** y | Возводит x в степень y |
| -x | Унарный минус: меняет знак ненулевого числа; если x равно нулю, то ничего не изменится |
| -x | Унарный минус: меняет знак ненулевого числа; если x равно нулю, то ничего не изменится |
| +x | Унарный плюс: ничего не делает, изредка используется для прояснения кода |
| +x | Унарный плюс: ничего не делает, изредка используется для прояснения кода |
| abs(x) | Возвращает модуль (абсолютное значение) x |
| abs(x) | Возвращает модуль (абсолютное значение) x |
| divmod(x, y) | Возвращает частное и остаток деления x на y как кортеж из двух целых чисел |
| divmod(x, y) | Возвращает частное и остаток деления x на y как кортеж из двух целых чисел |
| pow(x, y) | Возводит x в степень y; эквивалентно x ** y |
| pow(x, y) | Возводит x в степень y; эквивалентно x ** y |
| pow(x, y, z) | Более быстрый вариант выражения (x ** y) % z |
| pow(x, y, z) | Более быстрый вариант выражения (x ** y) % z |
| round(x, n) | Округляет x до n десятичных позиций |
| round(x, n) | Округляет x до n десятичных позиций |
Все бинарные операторы из данной таблицы имеют соответствующую им операцию комбинированного присваивания, например:
Все бинарные операторы из данной таблицы имеют соответствующую им операцию комбинированного присваивания, например:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
x=7
x=7
print(x)
print(x)
y=2
y=2
x**=y
x**=y
print(x)
print(x)
```
```
%% Output
%% Output
7
7
49
49
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Одним из способов создания объектов является присвоение непосредственного значения (константы, литерала) переменной, как `x = 42`. Другим способом является вызов типа данных как функции: `x = int(42)`. Некоторые объекты могут быть созданы только вторым образом, поскольку у них нет способо представить их в качестве литерала. В таком случае может быть три варианта:
Одним из способов создания объектов является присвоение непосредственного значения (константы, литерала) переменной, как `x = 42`. Другим способом является вызов типа данных как функции: `x = int(42)`. Некоторые объекты могут быть созданы только вторым образом, поскольку у них нет способо представить их в качестве литерала. В таком случае может быть три варианта:
- Если тип был вызван без аргументов, то будет создан объект со значением по умолчанию. Для типа int значение по умолчанию равно нулю.
- Если тип был вызван без аргументов, то будет создан объект со значением по умолчанию. Для типа int значение по умолчанию равно нулю.
- Если тип был вызван с объектом того же типа в качестве аргумента то будет создана неглубокая копия этого объекта (понятие "неглубокая копия" будет рассмотрено позднее). Если тип был вызван с объектом любого другого типа в качестве аргумента, то аргумент будет приведен к этому типу, если данное приведение возможно; в противном случае будет возбуждено исключение `ValueError`. Если тип аргумента вообще не поддерживает приведение к целому, то будет возбуждено исключение `TypeError`.
- Если тип был вызван с объектом того же типа в качестве аргумента то будет создана неглубокая копия этого объекта (понятие "неглубокая копия" будет рассмотрено позднее). Если тип был вызван с объектом любого другого типа в качестве аргумента, то аргумент будет приведен к этому типу, если данное приведение возможно; в противном случае будет возбуждено исключение `ValueError`. Если тип аргумента вообще не поддерживает приведение к целому, то будет возбуждено исключение `TypeError`.
- Некоторые типы могут быть вызваны с несколькими аргументами, но поведение каждого типа в данной ситуации нужно рассматривать индивидуально.
- Некоторые типы могут быть вызваны с несколькими аргументами, но поведение каждого типа в данной ситуации нужно рассматривать индивидуально.
Функции для приведения целочисленного типа:
Функции для приведения целочисленного типа:
| Операция | Описание |
| Операция | Описание |
| -------- | :------- |
| -------- | :------- |
| bin(i) | Возвращает строку - целое число i, записанное в двоичной системе счисления |
| bin(i) | Возвращает строку - целое число i, записанное в двоичной системе счисления |
| hex(i) | Возвращает строку - целое число i, записанное в шестнадцатиричной системе счисления |
| hex(i) | Возвращает строку - целое число i, записанное в шестнадцатиричной системе счисления |
| int(x) | Переводит объект x к целому числу, если такое приведение возможно. Возбуждает `ValueError`, если не удается привести объект к целому числу, и `TypeError`, если тип x не поддерживает приведение к целом числу. Если x типа float, то просто отбрасывается его дробная часть |
| int(x) | Переводит объект x к целому числу, если такое приведение возможно. Возбуждает `ValueError`, если не удается привести объект к целому числу, и `TypeError`, если тип x не поддерживает приведение к целом числу. Если x типа float, то просто отбрасывается его дробная часть |
| int(s, base) | Приводит строку s к целому числу, возбуждает `ValueError`, если не удается. Необязательный аргумент base - основание системы счисления, в которой записано число в s, может быть любым целым числом от 2 до 36 *включительно* |
| int(s, base) | Приводит строку s к целому числу, возбуждает `ValueError`, если не удается. Необязательный аргумент base - основание системы счисления, в которой записано число в s, может быть любым целым числом от 2 до 36 *включительно* |
| oct(i) | Возвращает строку - целое число i, записанное в восьмеричной системе счисления |
| oct(i) | Возвращает строку - целое число i, записанное в восьмеричной системе счисления |
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
x=1984
x=1984
print(bin(x))
print(bin(x))
print(oct(x))
print(oct(x))
print(hex(x))
print(hex(x))
s='1984'
s='1984'
i=int(s)
i=int(s)
print(i)
print(i)
s='deadbeef'
s='deadbeef'
try:
try:
i=int(s)
i=int(s)
print(i)
print(i)
exceptValueErrorase:
exceptValueErrorase:
print(e)
print(e)
i=int(s,16)
i=int(s,16)
print(i)
print(i)
l=['Deadpool','Cable']
l=['Deadpool','Cable']
try:
try:
i=int(l)
i=int(l)
print(i)
print(i)
exceptTypeErrorase:
exceptTypeErrorase:
print(e)
print(e)
f=3.1415
f=3.1415
i=int(f)
i=int(f)
print(i)
print(i)
```
```
%% Output
%% Output
0b11111000000
0b11111000000
0o3700
0o3700
0x7c0
0x7c0
1984
1984
invalid literal for int() with base 10: 'deadbeef'
invalid literal for int() with base 10: 'deadbeef'
3735928559
3735928559
int() argument must be a string, a bytes-like object or a number, not 'list'
int() argument must be a string, a bytes-like object or a number, not 'list'
3
3
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
В Python существуют следующие бинарные побитовые операторы:
В Python существуют следующие бинарные побитовые операторы:
| Операция | Описание |
| Операция | Описание |
| -------- | :------- |
| -------- | :------- |
| i \| j | Побитовое ИЛИ. Отрицательные числа представляются в дополнительном коде |
| i \| j | Побитовое ИЛИ. Отрицательные числа представляются в дополнительном коде |
| i ^ j | Побитовое исключающее ИЛИ (XOR) |
| i ^ j | Побитовое исключающее ИЛИ (XOR) |
| i & j | Побитовое И |
| i & j | Побитовое И |
| i << j | Побитовый сдвиг числа i на j позиций влево |
| i << j | Побитовый сдвиг числа i на j позиций влево |
| i >> j | Побитовый сдвиг числа i на j позиций вправо |
| i >> j | Побитовый сдвиг числа i на j позиций вправо |
| ~i | Побитовая инверсия числа i |
| ~i | Побитовая инверсия числа i |
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Тип bool
#### Тип bool
Тип bool используется для логических вычислений. Логические выражения также называются *булевыми*, откуда и происходит название типа bool. Есть два встроенных объекта данного типа: True и False. Как и другие типы, bool может быть вызван как функция. Все встроенные типы могут быть приведены к bool. Также несложно выполнить приведение к булевым значениям для пользовательских типов. Пример работы с bool:
Тип bool используется для логических вычислений. Логические выражения также называются *булевыми*, откуда и происходит название типа bool. Есть два встроенных объекта данного типа: True и False. Как и другие типы, bool может быть вызван как функция. Все встроенные типы могут быть приведены к bool. Также несложно выполнить приведение к булевым значениям для пользовательских типов. Пример работы с bool:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
t=True
t=True
f=False
f=False
print(tandf)
print(tandf)
print(tandTrue)
print(tandTrue)
```
```
%% Output
%% Output
False
False
True
True
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
В Python реализовано три логических оператора: and, or и not. Оба оператора and и or используют ленивое вычисление, где это возможно.
В Python реализовано три логических оператора: and, or и not. Оба оператора and и or используют ленивое вычисление, где это возможно.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Раздел 3. Типы чисел с плавающей точкой
### Раздел 3. Типы чисел с плавающей точкой
#### Тип float
#### Тип float
Тип float - неизменяемый тип данных, предназначенный для действительных чисел с плавающей точкой.
Тип float - неизменяемый тип данных, предназначенный для действительных чисел с плавающей точкой.
Все функции и операторы, предназначенные для работы с целыми числами, могут быть использованы и с числами типа float, в том числе и комбинированные версии оператора присваивания. Тип float может быть вызван как функция. Если он был вызван без аргументов, то будет возвращено значение 0.0, если был передан аргумент типа float, то будет создана копия этого аргумента, если аргумент другого типа - будет выполнена попытка приведения этого аргумента к типу float. Если аргумент строкового типа, но он может представлять запись дробного числа в десятичной или экспоненциальной форме.
Все функции и операторы, предназначенные для работы с целыми числами, могут быть использованы и с числами типа float, в том числе и комбинированные версии оператора присваивания. Тип float может быть вызван как функция. Если он был вызван без аргументов, то будет возвращено значение 0.0, если был передан аргумент типа float, то будет создана копия этого аргумента, если аргумент другого типа - будет выполнена попытка приведения этого аргумента к типу float. Если аргумент строкового типа, но он может представлять запись дробного числа в десятичной или экспоненциальной форме.
В результате вычисления может быть получено значение NaN (not a number, бесконечность), но поведение различных имплементаций Python в такой ситуации отличается.
В результате вычисления может быть получено значение NaN (not a number, бесконечность), но поведение различных имплементаций Python в такой ситуации отличается.
Поскольку вычисления с плавающей точкой имеют ограниченную точность, то проверка на равенство оператором == имеет для них мало смысла. Вот простой способ, учитывающий системные ограничения на точность:
Поскольку вычисления с плавающей точкой имеют ограниченную точность, то проверка на равенство оператором == имеет для них мало смысла. Вот простой способ, учитывающий системные ограничения на точность:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
importsys
importsys
defequal_float(a,b):
defequal_float(a,b):
returnabs(a-b)<=sys.float_info.epsilon
returnabs(a-b)<=sys.float_info.epsilon
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Более удобный способ заключается в использовании функции [isclose() модуля math](https://docs.python.org/3/library/math.html#math.isclose).
%% Cell type:markdown id: tags:
Модуль math активно используется для вычислений с плавающей точкой. Вот его функции и константы:
Модуль math активно используется для вычислений с плавающей точкой. Вот его функции и константы:
| Функция / константа | Описание |
| Функция / константа | Описание |
| -------- | :------- |
| -------- | :------- |
| math.acos(x) | Арккосинус x в радианах |
| math.acos(x) | Арккосинус x в радианах |
| math.acosh(x) | Гиперболический арккосинус x в радианах |
| math.acosh(x) | Гиперболический арккосинус x в радианах |
| math.asin(x) | Арксинус x в радианах |
| math.asin(x) | Арксинус x в радианах |
| math.asinh(x) | Гиперболический арксинус x в радианах |
| math.asinh(x) | Гиперболический арксинус x в радианах |
| math.atan(x) | Арктангенс x в радианах |
| math.atan(x) | Арктангенс x в радианах |
| math.atan2(y, x) | Арктангенс y / x в радианах |
| math.atan2(y, x) | Арктангенс y / x в радианах |
| math.atanh(x) | Гиперболический арктангенс x в радианах |
| math.atanh(x) | Гиперболический арктангенс x в радианах |
| math.ceil(x) | Округление x вверх до целого числа |
| math.ceil(x) | Округление x вверх до целого числа |
| math.copysign(x, y) | Возвращает число x со знаком числа y |
| math.copysign(x, y) | Возвращает число x со знаком числа y |
| math.cos(x) | Косинус x в радианах |
| math.cos(x) | Косинус x в радианах |
| math.cosh(x) | Гиперболический косинус в радианах |
| math.cosh(x) | Гиперболический косинус в радианах |
| math.degrees(r) | Переводит радианы r в градусы |
| math.degrees(r) | Переводит радианы r в градусы |
| math.e | Неперово число e |
| math.e | Неперово число e |
| math.exp(x) | Возвращет math.e ** x |
| math.exp(x) | Возвращет math.e ** x |
| math.fabs(x) | Возвращает модуль (абсолютное значение) x как float |
| math.fabs(x) | Возвращает модуль (абсолютное значение) x как float |
| math.factorial(x) | Возвращает факториал x (x!) |
| math.factorial(x) | Возвращает факториал x (x!) |
| math.floor(x) | Округление x вниз до целого числа |
| math.floor(x) | Округление x вниз до целого числа |
| math.fmod(x, y) | Взятие x по модулю y (остаток от деления x на y). Лучше подходит для чисел типа float, чем операция x % y |
| math.fmod(x, y) | Взятие x по модулю y (остаток от деления x на y). Лучше подходит для чисел типа float, чем операция x % y |
| math.frexp(x) | Возвращает кортеж из двух значений: мантиссы (как float) и порядка (как int) |
| math.frexp(x) | Возвращает кортеж из двух значений: мантиссы (как float) и порядка (как int) |
| math.fsum(i) | Возвращает сумму значений в итераторе i как float |
| math.fsum(i) | Возвращает сумму значений в итераторе i как float |
| math.isinf(x) | Возвращает True, если x равно бесконечности (с любым знаком) |
| math.isinf(x) | Возвращает True, если x равно бесконечности (с любым знаком) |
| math.isnan(x) | Возвращает True, если x есть nan (not a number) |
| math.isnan(x) | Возвращает True, если x есть nan (not a number) |
| math.ldexp(m, e) | Восстанавливает число из мантиссы m и показателя e. По факту равно m * 2 ** e |
| math.ldexp(m, e) | Восстанавливает число из мантиссы m и показателя e. По факту равно m * 2 ** e |
| math.log(x, b) | Возвращает логарифм числа x по основанию b. b является необязательным аргументом, по умолчанию равен math.e |
| math.log(x, b) | Возвращает логарифм числа x по основанию b. b является необязательным аргументом, по умолчанию равен math.e |
| math.log10(x) | Возвращает десятичный логарифм x |
| math.log10(x) | Возвращает десятичный логарифм x |
| math.log1p(x) | Возвращает натуральный логарифм числа 1 + x. Точен даже при очень малых значениях x |
| math.log1p(x) | Возвращает натуральный логарифм числа 1 + x. Точен даже при очень малых значениях x |
| math.modf(x) | Возвращает кортеж из двух значений: целой и дробной части числа x |
| math.modf(x) | Возвращает кортеж из двух значений: целой и дробной части числа x |
| math.pi | Число π |
| math.pi | Число π |
| math.pow(x, y) | Возвращает x в степени y как float |
| math.pow(x, y) | Возвращает x в степени y как float |
| math.radians(d) | Переводит градусы d в радианы |
| math.radians(d) | Переводит градусы d в радианы |
| math.sin(x) | Синус x в радианах |
| math.sin(x) | Синус x в радианах |
| math.sinh(x) | Гиперболический синус x в радианах |
| math.sinh(x) | Гиперболический синус x в радианах |
| math.sqrt(x) | Возвращает квадратный корень x |
| math.sqrt(x) | Возвращает квадратный корень x |
| math.tan(x) | Тангенс x в радианах |
| math.tan(x) | Тангенс x в радианах |
| math.tanh(x)| Гиперболический тангенс x в радианах |
| math.tanh(x)| Гиперболический тангенс x в радианах |
| math.trunc(x) | Возвращает целую часть числа x; то же, что и int(x) |
| math.trunc(x) | Возвращает целую часть числа x; то же, что и int(x) |
Для проверки, является ли объект класса float целым числом, можно использовать метод float.is_integer(). Метод float.as_integer_ratio() вернет кортеж из двух целых чисел, числителя и знаменателя дроби, которая представлена тем объектом, от которого был вызван данный метод. Метод float.hex() переводит число в шестнадцатиричную систему счисления, а метод float.fromhex() служит для обратного перевода.
Для проверки, является ли объект класса float целым числом, можно использовать метод float.is_integer(). Метод float.as_integer_ratio() вернет кортеж из двух целых чисел, числителя и знаменателя дроби, которая представлена тем объектом, от которого был вызван данный метод. Метод float.hex() переводит число в шестнадцатиричную систему счисления, а метод float.fromhex() служит для обратного перевода.
Модуль math сильно зависит от того, каким компилятором он был скомпилирован и при каких настройках, так что некоторое его поведение может различаться на разных системах.
Модуль math сильно зависит от того, каким компилятором он был скомпилирован и при каких настройках, так что некоторое его поведение может различаться на разных системах.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Тип complex
#### Тип complex
Тип complex - неизменяемый тип данных, предназначенный для комплексных чисел. Литераты этого типа записываются как действительная и мнимая часть с соответствующими знаками, при этом мнимая часть обозначается j. Реальная часть при этом может быть опущена, тогда она будет приниматься равной 0. Для доступа к действительной и мнимой части используются аттрибуты real и imag комплексного числа:
Тип complex - неизменяемый тип данных, предназначенный для комплексных чисел. Литераты этого типа записываются как действительная и мнимая часть с соответствующими знаками, при этом мнимая часть обозначается j. Реальная часть при этом может быть опущена, тогда она будет приниматься равной 0. Для доступа к действительной и мнимой части используются аттрибуты real и imag комплексного числа:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
z=-1.5+2.5j
z=-1.5+2.5j
print(z)
print(z)
print(z.real,z.imag)
print(z.real,z.imag)
```
```
%% Output
%% Output
(-1.5+2.5j)
(-1.5+2.5j)
-1.5 2.5
-1.5 2.5
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Кроме //, %, divmod() и версии pow() с тремя аргументами, все операторы и функции для работы с числами дорступны и для типа complex. К тому же, для типа complex доступен метод conjugate(), который возвращает комплексно-сопряженное число.
Кроме //, %, divmod() и версии pow() с тремя аргументами, все операторы и функции для работы с числами дорступны и для типа complex. К тому же, для типа complex доступен метод conjugate(), который возвращает комплексно-сопряженное число.
Если тип complex вызывается как функция без аргументов, то будет получено число 0j. Если complex вызывается с аргументом типа complex, то будет получена его копия. Также может быть передан один аргумент строкового типа, который будет приведен к complex, либо два аргумента типа float: действительная и мнимая часть соответственно. В последнем случае мнимая часть будет принята равной 0j.
Если тип complex вызывается как функция без аргументов, то будет получено число 0j. Если complex вызывается с аргументом типа complex, то будет получена его копия. Также может быть передан один аргумент строкового типа, который будет приведен к complex, либо два аргумента типа float: действительная и мнимая часть соответственно. В последнем случае мнимая часть будет принята равной 0j.
Функции модуля math не работают с типом complex. Для этого есть специальный модуль cmath, который содержит комплексные версии большинства тригонометрических и логарифмических функций модуля math, плюс специальные функции, специфичные для комплексных чисел, например, cmath.phase(), cmath.polar(), cmath.rect(), а также комплекные версии констант: cmath.pi, cmath.e.
Функции модуля math не работают с типом complex. Для этого есть специальный модуль cmath, который содержит комплексные версии большинства тригонометрических и логарифмических функций модуля math, плюс специальные функции, специфичные для комплексных чисел, например, cmath.phase(), cmath.polar(), cmath.rect(), а также комплекные версии констант: cmath.pi, cmath.e.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Тип Decimal
#### Тип Decimal
В некоторых приложениях важнее скорость вычислений, а не их точность, поэтому используется тип float для дробных чисел, который, хоть и подвержен не слишком большим ошибками вычислений, позволяет использовать крайне эффективные алогоритмы вычислений. В других случаях следует выбирать точность, а не скорость. Именно для таких ситуаций используется неизменяемый тип Decimal модуля decimal, который оперирует над дробными числами в десятичной системе счисления.
В некоторых приложениях важнее скорость вычислений, а не их точность, поэтому используется тип float для дробных чисел, который, хоть и подвержен не слишком большим ошибками вычислений, позволяет использовать крайне эффективные алогоритмы вычислений. В других случаях следует выбирать точность, а не скорость. Именно для таких ситуаций используется неизменяемый тип Decimal модуля decimal, который оперирует над дробными числами в десятичной системе счисления.
Числа этого типа могут быть созданы при помощи вызова decimal.Decimal(). Эта функция может принять аргумент типа int или строковый аргумент, но не число типа float. Для создания Decimal из float используется метод decimal.Decimal.from_float().
Числа этого типа могут быть созданы при помощи вызова decimal.Decimal(). Эта функция может принять аргумент типа int или строковый аргумент, но не число типа float. Для создания Decimal из float используется метод decimal.Decimal.from_float().
Все функции и операторы для работы с числами доступны для типа Decimal, с некоторыми ограничениями. Если мы возводим число типа Decimal в степень, то показатель должен быть целочисленным. Так, при вызове x ** y, если левый аргумент является числом типа Decimal, то правый аргумент должен быть типа int. То же и с вызовами pow(x, y) и pow(x, y, z): если x типа Decimal, то y и z должны быть типа int.
Все функции и операторы для работы с числами доступны для типа Decimal, с некоторыми ограничениями. Если мы возводим число типа Decimal в степень, то показатель должен быть целочисленным. Так, при вызове x ** y, если левый аргумент является числом типа Decimal, то правый аргумент должен быть типа int. То же и с вызовами pow(x, y) и pow(x, y, z): если x типа Decimal, то y и z должны быть типа int.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Раздел 4. Строки
### Раздел 4. Строки
Строки представлены неизменяемым типом str, который представляет собой последовательность символов Юникода. Тип str может быть вызван как функция для создания строковых объектов. В случае, если эта функция была вызвана без аргументов, будет создана пустая строка. В случае, если был передан аргумент типа str, будет создана копия этостроки. Для любого другого аргумента будет выполнено приведение к строковому типу. В последнем случае возможно передать два необязательных аргумента: кодировку и способ обработки ошибок кодировки.
Строки представлены неизменяемым типом str, который представляет собой последовательность символов Юникода. Тип str может быть вызван как функция для создания строковых объектов. В случае, если эта функция была вызвана без аргументов, будет создана пустая строка. В случае, если был передан аргумент типа str, будет создана копия этостроки. Для любого другого аргумента будет выполнено приведение к строковому типу. В последнем случае возможно передать два необязательных аргумента: кодировку и способ обработки ошибок кодировки.
В прошлой леции мы обратили внимание на то, что строковые литералы создаются при помощи кавычек. При этом, если нам необходимо создать литерал типа str в несколько строк, то используются тройные кавычки """:
В прошлой леции мы обратили внимание на то, что строковые литералы создаются при помощи кавычек. При этом, если нам необходимо создать литерал типа str в несколько строк, то используются тройные кавычки """:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
text="""Таким образом в Python создаются
text="""Таким образом в Python создаются
литералы длинной в несколько строк, а таким \
литералы длинной в несколько строк, а таким \
образом экранируются символы перевода строки."""
образом экранируются символы перевода строки."""
print(text)
print(text)
```
```
%% Output
%% Output
Таким образом в Python создаются
Таким образом в Python создаются
литералы длинной в несколько строк, а таким образом экранируются символы перевода строки.
литералы длинной в несколько строк, а таким образом экранируются символы перевода строки.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Символ \ испольхуется для экранирования символов. Если вы хотите поместить сам символ \ в свою строку, то придется его экранировать: \\. Это может быть неудобно, особенно для написания регулярных выражений, поэтому, если вы хотите, чтобы литерал интерпретировался буквально, т.е. никакие последовательности символов не приобразовывались, то перед кавычками, которые используются для его обозначения необходимо поставить символ r, как `r"в этой строке"`. Сами экранирующие последовательности (escape sequences) перечислены в таблице:
Символ \ испольхуется для экранирования символов. Если вы хотите поместить сам символ \ в свою строку, то придется его экранировать: \\. Это может быть неудобно, особенно для написания регулярных выражений, поэтому, если вы хотите, чтобы литерал интерпретировался буквально, т.е. никакие последовательности символов не приобразовывались, то перед кавычками, которые используются для его обозначения необходимо поставить символ r, как `r"в этой строке"`. Сами экранирующие последовательности (escape sequences) перечислены в таблице:
| \\ooo | Символ с указанным восьмеричным значением |
| \\ooo | Символ с указанным восьмеричным значением |
| \\r | Символ возврата каретки ASCII |
| \\r | Символ возврата каретки ASCII |
| \\t | Символ табуляции ASCII |
| \\t | Символ табуляции ASCII |
| \\uhhhh | Символ Юникода с указанным 16-битным шестнадцатиричным значением |
| \\uhhhh | Символ Юникода с указанным 16-битным шестнадцатиричным значением |
| \\Uhhhhhhhh | Символ Юникода с указанным 32-битным шестнадцатиричным значением |
| \\Uhhhhhhhh | Символ Юникода с указанным 32-битным шестнадцатиричным значением |
| \\v | Символ вертикальной табуляции ASCII |
| \\v | Символ вертикальной табуляции ASCII |
| \\xhh | Символ с заданным 8-битным шестнадцатиричным значением |
| \\xhh | Символ с заданным 8-битным шестнадцатиричным значением |
Если вы хотите записать строковый литерал в несколько строк без использования тройных кавычек, то есть два основных метода:
Если вы хотите записать строковый литерал в несколько строк без использования тройных кавычек, то есть два основных метода:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
s1="Это один из способов записать строковый литерал "+ \
s1="Это один из способов записать строковый литерал "+ \
"в несколько строк при помощи конкатенации и экранирования перевода строки"
"в несколько строк при помощи конкатенации и экранирования перевода строки"
s2=("Это второй способ записать строковый литерал в несколько строк "
s2=("Это второй способ записать строковый литерал в несколько строк "
"при поомощи конкатенации строковых литералов внутри круглых скобок")
"при поомощи конкатенации строковых литералов внутри круглых скобок")
print(s1)
print(s1)
print(s2)
print(s2)
```
```
%% Output
%% Output
Это один из способов записать строковый литерал в несколько строк при помощи конкатенации и экранирования перевода строки
Это один из способов записать строковый литерал в несколько строк при помощи конкатенации и экранирования перевода строки
Это второй способ записать строковый литерал в несколько строк при поомощи конкатенации строковых литералов внутри круглых скобок
Это второй способ записать строковый литерал в несколько строк при поомощи конкатенации строковых литералов внутри круглых скобок
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Рекомендуется всегда в данной ситуации использовать второй способ для избежания ошибок связанных с отсутствием экранирования символа перевода строки.
Рекомендуется всегда в данной ситуации использовать второй способ для избежания ошибок связанных с отсутствием экранирования символа перевода строки.
По умолчанию в .py файлах используется кодировка UTF-8, что позволяет использовать любой символ Юникода (см. предыдущую лекцию).
По умолчанию в .py файлах используется кодировка UTF-8, что позволяет использовать любой символ Юникода (см. предыдущую лекцию).
Для получения символа Юникода по его коду используется встроенная функция chr(). Для представления любой последовательности символов в формате ASCII используется встроенная функция ascii().
Для получения символа Юникода по его коду используется встроенная функция chr(). Для представления любой последовательности символов в формате ASCII используется встроенная функция ascii().
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
s=chr(0x262D)
s=chr(0x262D)
print(s)
print(s)
print(ascii(s))
print(ascii(s))
```
```
%% Output
%% Output
☭
☭
'\u262d'
'\u262d'
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Сравнение строк
#### Сравнение строк
Строки поддерживают обычные операторы сравнения: <,<=,==,!=,> и >=. Эти операторы сравнивают строки байт за байтом. Таким образом, они выполняют сравнение в лексикограческом смысле.
Строки поддерживают обычные операторы сравнения: <,<=,==,!=,> и >=. Эти операторы сравнивают строки байт за байтом. Таким образом, они выполняют сравнение в лексикограческом смысле.
В подобном подходе существуют две проблемы, не уникальные для Python, но связанные со способом кодировки символов в Юникоде. Первая проблема заключается в том, что один и тот же символ может быть представлен несколькими последовательностями байтов. Эта проблема частично решается при помощи нормализации функцией normalize() модуля unicodedata. Вторая проблема связана с тем, что некоторые символы в разных языках стоят на разных позициях в алфавите.
В подобном подходе существуют две проблемы, не уникальные для Python, но связанные со способом кодировки символов в Юникоде. Первая проблема заключается в том, что один и тот же символ может быть представлен несколькими последовательностями байтов. Эта проблема частично решается при помощи нормализации функцией normalize() модуля unicodedata. Вторая проблема связана с тем, что некоторые символы в разных языках стоят на разных позициях в алфавите.
Сама проблема подробно обсуждается [здесь](unicode.org/reports/tr10). Мы лишь заметим, что для строк, состоящих из английских букв данные операторы сравнения корректны.
Сама проблема подробно обсуждается [здесь](unicode.org/reports/tr10). Мы лишь заметим, что для строк, состоящих из английских букв данные операторы сравнения корректны.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Извлечения среза строк с шагом и без
#### Извлечения среза строк с шагом и без
Операция извлечения среза доступна для любых встроенных типов последовательностей, в том числе и для строк и имеет три возможные формы:
Операция извлечения среза доступна для любых встроенных типов последовательностей, в том числе и для строк и имеет три возможные формы:
Первый вариант выбирает один элемент с индексом *начальный\_индекс*. Второй вариант выбирает все элементы с индексами от *начальный\_индекс* включительно до *конченый\_индекс*, не включая его. Третий вариант делает то же, что и второй, но если, скажем, *шаг* будет равен 2, то будет выбран каждый второй элемент, если 3 - каждый третий, и так далее. Важно, что первый элемент всегда попадет в полученный срез, а вот последний элемент в срезе может меняться в зависимости от шага среза.
Первый вариант выбирает один элемент с индексом *начальный\_индекс*. Второй вариант выбирает все элементы с индексами от *начальный\_индекс* включительно до *конченый\_индекс*, не включая его. Третий вариант делает то же, что и второй, но если, скажем, *шаг* будет равен 2, то будет выбран каждый второй элемент, если 3 - каждый третий, и так далее. Важно, что первый элемент всегда попадет в полученный срез, а вот последний элемент в срезе может меняться в зависимости от шага среза.
Любой из трех аргументов в срезе может быть пропущен. По умолчанию *начальный\_индекс* равен 0, *конечный/_индекс* равен длине последовательности, а *шаг* равен 1.
Любой из трех аргументов в срезе может быть пропущен. По умолчанию *начальный\_индекс* равен 0, *конечный/_индекс* равен длине последовательности, а *шаг* равен 1.
В качестве индексов в срезе можно указывать отрицательные числа, тогда индекс будет отсчитываться с конца. Также можно указать отрицательный шаг, тогда срез будет взят в обратом направлении. Например, если опустить первые два аргумента, а указать только шаг, равный -1, то мы получим исходную строку в обратном порядке.
В качестве индексов в срезе можно указывать отрицательные числа, тогда индекс будет отсчитываться с конца. Также можно указать отрицательный шаг, тогда срез будет взят в обратом направлении. Например, если опустить первые два аргумента, а указать только шаг, равный -1, то мы получим исходную строку в обратном порядке.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Операторы и методы для работы со строками
#### Операторы и методы для работы со строками
Строки являются неизменяемыми последовательностями, что означает, что функции и операторы для работы с неизменяемыми последовательностями доступны и для строк. Например, оператор конкатенации +, повторения \*, также их варианты, комбинированные с оператором присваивания. Также, встроенная функция reversed() вернет ту же строку, но в обратном порядке.
Строки являются неизменяемыми последовательностями, что означает, что функции и операторы для работы с неизменяемыми последовательностями доступны и для строк. Например, оператор конкатенации +, повторения \*, также их варианты, комбинированные с оператором присваивания. Также, встроенная функция reversed() вернет ту же строку, но в обратном порядке.
Встроенные методы для работы со строками:
Встроенные методы для работы со строками:
| Метод | Описание |
| Метод | Описание |
| ----- | :------- |
| ----- | :------- |
| s.capitalize() | Приводит первый символ строки s к верхнему регистру |
| s.capitalize() | Приводит первый символ строки s к верхнему регистру |
| s.center(width, char) | Возвращает копию строки s, приведенную к нужной ширине width путем дополнения поровну слева и справа символом char. Если char не указан, то дополнение идет при помощи пробела |
| s.center(width, char) | Возвращает копию строки s, приведенную к нужной ширине width путем дополнения поровну слева и справа символом char. Если char не указан, то дополнение идет при помощи пробела |
| s.count(t, start, end) | Считает число вхождений подстроки t в строку s (если указаны start и end, то в срез строки s\[start:end\] |
| s.count(t, start, end) | Считает число вхождений подстроки t в строку s (если указаны start и end, то в срез строки s\[start:end\] |
| s.encode(encoding, err) | Возвращает объект класса bytes, представляющий закодированную строку s в стандартной кодировке или в кодировке encoding, если она указана. Обработка ошибок происходит в соответствии с err |
| s.encode(encoding, err) | Возвращает объект класса bytes, представляющий закодированную строку s в стандартной кодировке или в кодировке encoding, если она указана. Обработка ошибок происходит в соответствии с err |
| s.endswith(x, start, end) | Проверяет, заканчивается ли строка s подстрокой x или любой из строк в кортеже x. Если указаны start и end, то проверка выполняется в подстроке s\[start:end\] |
| s.endswith(x, start, end) | Проверяет, заканчивается ли строка s подстрокой x или любой из строк в кортеже x. Если указаны start и end, то проверка выполняется в подстроке s\[start:end\] |
| s.expandtabs(size) | Возвращает строку, в которой каждый символ табуляции заменяется на 8 пробелов или на size пробелов, если данный аргумент указан |
| s.expandtabs(size) | Возвращает строку, в которой каждый символ табуляции заменяется на 8 пробелов или на size пробелов, если данный аргумент указан |
| s.find(t, start, end) | Возвращает индекс самого левого вхождения подстроки t в строку s. Если подстрока t не входит в строку s, то возвращается -1. Если start и end указаны, то поиск выполняется в подстроке s\[start:end\] |
| s.find(t, start, end) | Возвращает индекс самого левого вхождения подстроки t в строку s. Если подстрока t не входит в строку s, то возвращается -1. Если start и end указаны, то поиск выполняется в подстроке s\[start:end\] |
| s.format(...) | Специальный метод формата, рассмотрен позже отдельно |
| s.format(...) | Специальный метод формата, рассмотрен позже отдельно |
| s.index(t, start, end) | Аналогичен s.find(), но возбуждает исключение `ValueError`, если элемент не найден |
| s.index(t, start, end) | Аналогичен s.find(), но возбуждает исключение `ValueError`, если элемент не найден |
| s.isalnum() | Возвращает True, если строка s непуста и каждый символ в ней - буква или цифра |
| s.isalnum() | Возвращает True, если строка s непуста и каждый символ в ней - буква или цифра |
| s.isalpha() | Возвращает True, если строка s непуста и каждый символ в ней - буква |
| s.isalpha() | Возвращает True, если строка s непуста и каждый символ в ней - буква |
| s.isdecimal() | Возвращает True, если строка s непуста и каждый символ в ней соответствует символу цифры в системе счисления с основанием 10 в Юникоде |
| s.isdecimal() | Возвращает True, если строка s непуста и каждый символ в ней соответствует символу цифры в системе счисления с основанием 10 в Юникоде |
| s.isdigit() | Возвращает True, если строка s непуста и каждый символ в ней соответствует символу цифры в системе счисления с основанием 10 в ASCII |
| s.isdigit() | Возвращает True, если строка s непуста и каждый символ в ней соответствует символу цифры в системе счисления с основанием 10 в ASCII |
| s.isidentifier() | Возвращает True, если строка является валидным идентификатором в Python |
| s.isidentifier() | Возвращает True, если строка является валидным идентификатором в Python |
| s.islower() | Возвращает True, если в строке s есть хотя бы один символ, доступный в нижнем регистре, и все символы, доступные в нижнем регистре, находятся в нижнем регистре |
| s.islower() | Возвращает True, если в строке s есть хотя бы один символ, доступный в нижнем регистре, и все символы, доступные в нижнем регистре, находятся в нижнем регистре |
| s.isnumeric() | Возвращает True, если строка s непуста и каждый ее символ соответствует численному символу Юникода |
| s.isnumeric() | Возвращает True, если строка s непуста и каждый ее символ соответствует численному символу Юникода |
| s.isprintable() | Возвращет True, если строка s пуста или строка содержит только печатаемые символы (включая пробел, но не включая перевод строки) |
| s.isprintable() | Возвращет True, если строка s пуста или строка содержит только печатаемые символы (включая пробел, но не включая перевод строки) |
| s.isspace() | Возвращает True, если строка s непуста и каждый ее символ - пробельный |
| s.isspace() | Возвращает True, если строка s непуста и каждый ее символ - пробельный |
| s.istitle() | Возвращает True если каждый первый символ каждого слова в строке приведен к верхнему регистру, а все остальные символы - к нижнему |
| s.istitle() | Возвращает True если каждый первый символ каждого слова в строке приведен к верхнему регистру, а все остальные символы - к нижнему |
| s.isupper() | Возвращает True, если в строке s есть хотя бы один символ, доступный в верхнем регистре, и все символы, доступные в верхнем регистре, находятся в верхнем регистре |
| s.isupper() | Возвращает True, если в строке s есть хотя бы один символ, доступный в верхнем регистре, и все символы, доступные в верхнем регистре, находятся в верхнем регистре |
| s.join(seq) | Возвращает конкатенацию всех элементов последовательности seq, приведенных к строками. При этом между каждыми двумя элементами ставится строка s (может быть пустой) |
| s.join(seq) | Возвращает конкатенацию всех элементов последовательности seq, приведенных к строками. При этом между каждыми двумя элементами ставится строка s (может быть пустой) |
| s.ljust(width, char) | Возвращает копию строки s, приведенную к нужной ширине width путем дополнения справа символом char. Если char не указан, то дополнение идет при помощи пробела |
| s.ljust(width, char) | Возвращает копию строки s, приведенную к нужной ширине width путем дополнения справа символом char. Если char не указан, то дополнение идет при помощи пробела |
| s.lower() | Возвращает копию строки s, в которой все символы, для которых это возможно, приведены к нижнему регистру |
| s.lower() | Возвращает копию строки s, в которой все символы, для которых это возможно, приведены к нижнему регистру |
| s.maketrans() | Создает таблицу для отображения символов |
| s.maketrans() | Создает таблицу для отображения символов |
| s.partition(t) | Если подстрока t входит в строку s, то вернет три строки: все, что находится до самого левого вхождения t, t, все, что находится после самого левого вхождения t. В противном случае вернет s и две пустых строки |
| s.partition(t) | Если подстрока t входит в строку s, то вернет три строки: все, что находится до самого левого вхождения t, t, все, что находится после самого левого вхождения t. В противном случае вернет s и две пустых строки |
| s.replace(t, u, n) | Заменяет не более n вхождений подстроки t в строку s строкой u |
| s.replace(t, u, n) | Заменяет не более n вхождений подстроки t в строку s строкой u |
| s.split(t, n) | Возвращает список, полученный делением строки s не более n раз. Деление происходит по подстроке t. Если t не указано, то используется пробел |
| s.split(t, n) | Возвращает список, полученный делением строки s не более n раз. Деление происходит по подстроке t. Если t не указано, то используется пробел |
| s.splitlines(f) | Возвращает список, полученный делением строки s по символу перевода строки. Символы перевода строки при этом исключаются, если только не задан аргумент True |
| s.splitlines(f) | Возвращает список, полученный делением строки s по символу перевода строки. Символы перевода строки при этом исключаются, если только не задан аргумент True |
| s.stratswidth(x, start, end) | Возвращает True, если строка s начинается с подстроки str(x). Есои start и end указаны, то проверка выполняется в срезе s\[start:end\] |
| s.stratswidth(x, start, end) | Возвращает True, если строка s начинается с подстроки str(x). Есои start и end указаны, то проверка выполняется в срезе s\[start:end\] |
| s.strip(chars) | Возвращает копию строки s с удаленными слева и справа символами из строки chars. s.lstrip() удаляет символы только слева, а s.rstrip() только справа. Если chars не указан, то удаляются пробелы |
| s.strip(chars) | Возвращает копию строки s с удаленными слева и справа символами из строки chars. s.lstrip() удаляет символы только слева, а s.rstrip() только справа. Если chars не указан, то удаляются пробелы |
| s.swapcase() | Возвращает копию строки s, в которой все символы в верхнем регистре переведены в нижний, а все символы в нижнем регистре переведены в верхний |
| s.swapcase() | Возвращает копию строки s, в которой все символы в верхнем регистре переведены в нижний, а все символы в нижнем регистре переведены в верхний |
| s.title() | Возвращает копию строки s, в которой первая буква каждого слова стоит в верхнем регистре, а все остальные символы - в нижнем |
| s.title() | Возвращает копию строки s, в которой первая буква каждого слова стоит в верхнем регистре, а все остальные символы - в нижнем |
| s.translate() | Возвращает копию строки s, совершив отображение символов в соответствии с переданной таблицей |
| s.translate() | Возвращает копию строки s, совершив отображение символов в соответствии с переданной таблицей |
| s.upper() | Возвращает копию строки s, в которой все символы, для которых это возможно, приведены к верхнему регистру |
| s.upper() | Возвращает копию строки s, в которой все символы, для которых это возможно, приведены к верхнему регистру |
| s.zfill(w) | Возвращает копию строки s, которая, если строка s в длину не превышает w, дополнена лидирующими нулями до w символов |
| s.zfill(w) | Возвращает копию строки s, которая, если строка s в длину не превышает w, дополнена лидирующими нулями до w символов |
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
#### Метод str.format()
#### Метод str.format()
Метод format вызывается от строки формата, которая имеет специальный вид, а в качестве аргумента ей передаются объекты, которые будут приведены к строкам и вставлены в результирующую строку:
Метод format вызывается от строки формата, которая имеет специальный вид, а в качестве аргумента ей передаются объекты, которые будут приведены к строкам и вставлены в результирующую строку:
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
print("{0} love {1}".format("I","Python"))
print("{0} love {1}".format("I","Python"))
```
```
%% Output
%% Output
I love Python
I love Python
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
Если вы хотите использовать фигурные скобки буквально в строке формата, то укажите их дважды. Внутри фигурных скобок можно указывать индексы аргументов, котоыре будут вставляться, а также их имена, если они указаны в списке аргументов. Для данных аргументов можно производить операцию извлечения элемента по индексу или получения значения по ключу. После индекса или имени аргумента может идти двоеточие, а за ним спецификации формата: символ для заполнения, способ выравнивания, знак, способ записи числа, выравнивание чисел нулями, ширина, группирование цифр, точность и тип.
Если вы хотите использовать фигурные скобки буквально в строке формата, то укажите их дважды. Внутри фигурных скобок можно указывать индексы аргументов, котоыре будут вставляться, а также их имена, если они указаны в списке аргументов. Для данных аргументов можно производить операцию извлечения элемента по индексу или получения значения по ключу. После индекса или имени аргумента может идти двоеточие, а за ним спецификации формата: символ для заполнения, способ выравнивания, знак, способ записи числа, выравнивание чисел нулями, ширина, группирование цифр, точность и тип.
Более подробно строки формата смотри в Саммерфилде.
Более подробно строки формата смотри в Саммерфилде.
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Раздел 5. Домашнее задание
### Раздел 5. Домашнее задание
- Все задачи после второй главы Саммерфилда
- Все задачи после второй главы Саммерфилда
- Доработать игру "Быки и Коровы", сделав в ней два режима: в одном из них число загадывает игрок, а во втором - компьютер
- Доработать игру "Быки и Коровы", сделав в ней два режима: в одном из них число загадывает игрок, а во втором - компьютер
- В субботу жди новую задачу
- В субботу жди новую задачу
- Поискать в интернете про: про методы кодирования символов, Big-endian, Little-endian, ASCII, числа с плавающей точкой одинарной и двойной точности, гиперболические функции.
- Поискать в интернете про: про методы кодирования символов, Big-endian, Little-endian, ASCII, числа с плавающей точкой одинарной и двойной точности, гиперболические функции.