Арифметика и логика
Арифметика
- сумма
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 Anot AэквивалентноFalse if A else TrueA or BэквивалентноB if not A else A
Поскольку это — единственный чисто тернарный оператор в языке, его так и называют «тернарным оператором».
Поразрядные операции
Сильно упрощают работу с цепочками бит, которые можно моделировать числами, двоичными записями которых эти цепочки являются.
Основные поразрядные операции в языке следующие:
:&— поразрядная конъюнкция (результат состоит из тех и только тех двоичных разрядов, которые есть в обоих входных числах):|— поразрядная дизъюнкция (результат состоит из тех и только тех двоичных разрядов, которые есть хотя бы в одном из входных чисел):^— поразрядный XOR (результат состоит из тех и только тех двоичных разрядов, которые есть ровно в одном из двух входных чисел):<<— сдвиг влево (с дописыванием нулей в младшие разряды):>>— сдвиг вправо (с уничтожением младших разрядов)
Рекомендуется их применять лишь к целым неотрицательным числам.