Арифметика и логика

Арифметика

  • сумма 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 (результат состоит из тех и только тех двоичных разрядов, которые есть ровно в одном из двух входных чисел)
  • :<< — сдвиг влево (с дописыванием нулей в младшие разряды)
  • :>> — сдвиг вправо (с уничтожением младших разрядов)

Рекомендуется их применять лишь к целым неотрицательным числам.