Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
Для сложения, вычитания, умножения и деления используются, соответственно, **+** , **-** , ***** и **/**.
>>> 24 + 28
52
>>> 24 - 28
-4
>>> 24 * 28
672
>>> 24 / 28
0.8571428571428571Для возведения в степень — ******.
>>> 5 ** 2
25
>>> 5 ** 3
125
>>> 5 ** 4
625Для целочисленного деления без остатка — **//**.
>>> 61 // 12
5
>>> 52 // 22
2
>>> 75 // 3
25
>>> 77 // 3
25**%** выдает остаток, то есть выполняет деление по модулю:
>>> 62 % 6
2
>>> 65 % 9
2
>>> 48 % 5
3
>>> 48 % 12
0Таких операторов выражения в Python шесть: **>** , **<** , **> =**, **< =**, **==** , **!=**. Обратите внимание, что «равно» в Питоне при сравнении записывается так: **==** , потому что один знак «равно» означает присвоение значения (об этом в следующей главе). Для выражения «не равно» используется сочетание символов **!=**. При сравнении значений интерпретатор языка будет выдавать ответы True и False в зависимости от того, являются ли выражения истинными или ложными. Примеры:
>>> 26 > 58
False
>>> 26 < 58
True
>>> 26 >= 26
True
>>> 58 <= 57
False
>>> 50 == 50
True
>>> 50 != 50
False
>>> 50 != 51
TrueДля присвоения значений переменным используется один знак «равно»:
>>> b = 5
>>> variants = 20Также предусмотрены удобные конструкции для совмещения всех арифметических действий с одновременным присваиванием полученного значения: **+=** , **-=** , ***=** , **/=** , **//=** , **%=**. Например:
>>> cars = 5
>>> cars += 7
>>> cars
12Мы задали переменную _сars_ и присвоили ей значение 5, затем добавили еще 7 с одновременным присвоением нового значения. Конечно, можно вместо _cars += 7_ написать и так:
>>> cars = cars + 7
>>> cars
12Ошибки нет, но первый вариант более компактный. Посмотрим, как работают другие действия одновременно с присваиванием:
>>> train = 11
>>> train -= 2
>>> train
9
>>> moto = 3
>>> moto *= 7
>>> moto
21
>>> plain = 8
>>> plain /= 4
>>> plain
2.0Обратите внимание, что в последнем случае мы получили не целое значение, _int_ , а с запятой, _float_.
Таких операторов в Python 2: is и is not. Как и в английском, первый означает (это) есть , а второй — это не. Ответами интерпретатора, как и в случае со сравнениями, будут _True_ или _False_.
>>> 55 is 55
True
>>> 55 is 56
False
>>> 55 is not 55
False
>>> 55 is not 56
True
>>> 55 is '55'
False
>>> '55' is "55"
TrueРазбираемся, что произошло в последних двух операциях. В первом случае (_55 is '55'_) сравнивалось целое число и строка, поэтому интерпретатор выдал _False_ , а во втором (_'55' is "55"_) оба операнда представляли собой строки, поэтому было выдано _True_. Заметьте, что Питону не важно, использует ли программа одинарные или двойные кавычки: оба варианта синтаксически допустимы, поэтому результат тождества оказался истинным.
Этих операторов тоже только два: **in** и **not in**. Они проверяют, есть или нет определенное значение в какой-либо последовательности. Например:
>>> wordlist = ('assistant', 'streetcar', 'fraudster', 'dancer', 'heat', 'blank', 'compass', 'commerce', 'judgment', 'approach')
>>> 'house' in wordlist
False
>>> 'assistant' in wordlist
True
>>> 'assistant' and 'streetcar' in wordlist
TrueВ последнем случае мы задействовали логический оператор (**and**), к рассмотрению которых и переходим.
В Питоне есть три логических оператора: **and** (и), **or** (или), а также **not** (не). **and** работает следующим образом: _True_ возвращается только в том случае, если все операнды истинны. При этом обрабатываться может сколько угодно значений. Используем пример из главы выше:
>>> wordlist = ('assistant', 'streetcar', 'fraudster', 'dancer', 'heat', 'blank', 'compass', 'commerce', 'judgment', 'approach')
>>> 'assistant' and 'streetcar' in wordlist
True
>>> 'fraudster' and 'dancer' and 'heat' and 'blank' in wordlist
True
>>> 'fraudster' and 'dancer' and 'heat' and 'blank' and 'house' in wordlist
FalseКак видим, значения _'house' _в строке не оказалось, поэтому интерпретатор выдал _False_. Те же операции можно производить и над целочисленными значениями:
>>> numbers = 54 > 55 and 22 > 21
>>> print(numbers)
FalseВсё верно, потому что одно из выражений ложно, а **and** требует, чтобы истинными были все условия.
**or** действует по-другому: выражение признается истинным в том случае, если истинно хотя бы одно из его значений. Поэтому, если в предыдущем примере мы заменим операторы **and** на **or** , то получим следующий результат:
>>> numbers = 54 > 55 or 22 > 21
>>> print(numbers)
True22 больше 21 и при этом для операции **or** не важно, что первое выражение ложно.
>>> first = True
>>> second = False
>>> print(not first)
False
>>> print(not second)
TrueИз примера видно, что **not** переворачивает логические значения, меняя _True_ на _False_ и наоборот.
Побитовые (или битовые) операторы используются в Python для изменения объектов на уровне битов. Их всего пять (сдвиговые принадлежат к одному типу, поскольку различаются только направлением сдвига):
& (AND)| (OR)^ (XOR)~ (NOT)<<и>>(сдвиговые)
Битовые операторы основаны на принципах Булевой логики, поэтому действуют следующим образом:
**& (AND)** возвращает 1, если 1 есть в обоих операндах, в остальных случаях 0:
>>> 1 & 1
1
>>> 1 & 0
0
>>> 0 & 1
0
>>> 0 & 0
0**| (OR)** возвращает 1, если 1 есть в одном из операндов, иначе вернет 0:
>>> 1 | 1
1
>>> 1 | 0
1
>>> 0 | 1
1
>>> 0 | 0
0**^ (XOR)** возвращает 1, если операнды различаются, и 0, если они одинаковы:
>>> 1 ^ 1
0
>>> 1 ^ 0
1
>>> 0 ^ 1
1
>>> 0 ^ 0
0**~ (NOT)** переворачивает биты, преобразуя положительные значения в отрицательные со сдвигом на единицу следующим образом:
>>> ~5
-6
>>> ~-5
4
>>> ~7
-8
>>> ~-7
6
>>> ~9
-10
>>> ~-9
8<< и>> сдвигают биты на определенное количество, которое указывается справа:
>>> 1 << 1
2
>>> 1 >> 1
0Для понимания сдвигов давайте разложим значения на биты, добавив, где нужно, разряд для удобства:
Поэтому, сдвигая в единице разряд влево, мы получаем 2, а если вправо, то 0. А если на два разряда?
>>> 1 << 2
4
>>> 1 >> 2
0Сдвинув единицу на два разряда влево, мы получили 4, потому что 4 в битовом представлении будет 100. Сдвиг вправо на любое число разрядов всё равно дает нам ноль, так как бит «обнуляется» в любом случае.
Больше информации о битовых операторах можно найти в нашей статье о них.
В завершение проясним один важный момент и разграничим похожие по способу действия языковые инструменты.
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.