Арифметика и логика
Арифметика
- сумма
XXX + YYY
, разностьXXX - YYY
, произведениеXXX * YYY
- частное
XXX / YYY
, неполное частноеXXX // YYY
, остатокXXX % YYY
- унарный минус
-XXX
- степень
XXX ** YYY
- эквивалентность
XXX == YYY
, неэквивалентностьXXX != YYY
- строгие неравенства
XXX < YYY
иXXX > YYY
- нестрогие неравенства
XXX <= YYY
иXXX >= YYY
Всё более-менее стандартно по модулю одной особенности: неполное частное — результат округления соответствующей дроби вниз, а не к нулю (как принято в большинстве языков программирования). При этом всегда выполняется
a == (a // b) * b + (a % b)
Следует быть аккуратным со следующими операторами:
- с делением (
/
): его результат — число с плавающей точкой; арифметика с плавающей точкой на практике не пригодна ни для каких целей, кроме физического моделирования; любое другое использование арифметики с плавающей точкой требует высокой аккуратности и глубокого понимания её устройства - с остатком (
%
): у него есть оператор-омоним, форматирующий текст; применяется этот самый форматирующий оператор, если левый операнд имеет текстовый тип
Логика
В качестве основных логических значений используются «истина»
True
и «ложь» False
. К ним можно применять конъюнкцию
(&
или and
), дизъюнкцию (|
или or
), сложение ^
и отрицание not
.
Отдельно выделим and
и or
: они вычисляют свой правый операнд только
если левый истинный (для and
) и ложный (для or
). Ложными считаются
None
, False
, всевозможные нули и всевозможные пустые контейнеры.
Остальные объекты встроенных типов считаются истинными.
Также можно встретить двуинфиксный тернарный
оператор ... if ... else ...
:
- первым делом он вычисляет свой второй операнд
- если он истинный, то вычисляется первый операнд
- в противном случае вычислятеся второй операнд
В частности:
A and B
эквивалентноB if A else A
not A
эквивалентноFalse if A else True
A or B
эквивалентноB if not A else A
Поскольку это — единственный чисто тернарный оператор в языке, его так и называют «тернарным оператором».
Поразрядные операции
Сильно упрощают работу с цепочками бит, которые можно моделировать числами, двоичными записями которых эти цепочки являются.
Основные поразрядные операции в языке следующие:
:&
— поразрядная конъюнкция (результат состоит из тех и только тех двоичных разрядов, которые есть в обоих входных числах):|
— поразрядная дизъюнкция (результат состоит из тех и только тех двоичных разрядов, которые есть хотя бы в одном из входных чисел):^
— поразрядный XOR (результат состоит из тех и только тех двоичных разрядов, которые есть ровно в одном из двух входных чисел):<<
— сдвиг влево (с дописыванием нулей в младшие разряды):>>
— сдвиг вправо (с уничтожением младших разрядов)
Рекомендуется их применять лишь к целым неотрицательным числам.