Основы программирования

Операторы

1994 год. Intel Pentium выходит с аппаратным багом в операции деления. Результат 4195835.0 / 3145727.0 возвращал 1.333739068 вместо 1.333820449. Никто не заметил полгода. Убыток - 475 миллионов долларов на замену процессоров. Один неправильный оператор деления на кремниевом уровне - и компания в кризисе.

  • **Игры**: damage = base_attack * critical_multiplier - арифметика определяет баланс
  • **E-commerce**: total = price * quantity - discount - каждый символ меняет деньги
  • **Безопасность**: can_access = is_authenticated and not is_banned - логика открывает двери
  • **Навигация**: is_nearby = distance < 100 and traffic_level == 'low' - сравнения меняют маршруты

История операторов: от перфокарт до Python

В 1957 году команда IBM под руководством Джона Бэкуса выпустила Fortran - первый язык с математическими операторами в читаемой форме. До этого программисты писали операции в машинных кодах. Бэкус настоял на том, чтобы A = B + C выглядело как формула, а не как hex-последовательность. Компилятор Fortran генерировал код настолько эффективно, что скептики не верили - вручную так не пишут. Этот синтаксис операторов дожил до Python, JavaScript и всех современных языков.

Цели урока

  • Освоить арифметические операторы (+, -, *, /, //, %, **)
  • Понять операторы сравнения (==, !=, <, >, <=, >=)
  • Научиться комбинировать условия через and, or, not
  • Знать приоритет операторов

Предварительные знания

  • Переменные и базовые типы данных (int, float, str, bool)
  • Понимание присваивания через = (урок 3)

Арифметические операторы

Python поддерживает все стандартные математические операции плюс три специальных: целочисленное деление `//`, остаток `%`, и возведение в степень `**`.

ОператорНазваниеПримерРезультат
+Сложение5 + 38
-Вычитание5 - 32
*Умножение5 * 315
/Деление7 / 23.5
//Целочисленное деление7 // 23
%Остаток от деления7 % 21
**Возведение в степень2 ** 38

Оператор `%` - не только остаток. С его помощью проверяют чётность (`n % 2 == 0`), берут последнюю цифру числа (`n % 10`), и зацикливают индексы в массивах (`(i + 1) % size`).

Что выведет: print(17 % 5)?

Операторы сравнения

Операторы сравнения возвращают `True` или `False`. Это основа для условий, циклов и фильтрации данных.

ОператорЗначениеПримерРезультат
==Равно5 == 5True
!=Не равно5 != 3True
<Меньше3 < 5True
>Больше3 > 5False
<=Меньше или равно5 <= 5True
>=Больше или равно3 >= 5False

`=` - это присваивание (положить значение в переменную). `==` - это сравнение (проверить равенство). Путаница между ними - одна из самых частых ошибок в Python.

Что выведет: x = 5; print(x == "5")?

Логические операторы

Логические операторы комбинируют несколько условий в одно выражение. Это прямая реализация булевой алгебры.

ОператорЗначениеПримерРезультат
andИ (оба True)True and TrueTrue
orИЛИ (хотя бы один True)True or FalseTrue
notНЕ (инверсия)not TrueFalse

**Short-circuit evaluation**: Python останавливается как только результат определён. В `False and X` - X не вычисляется. В `True or X` - тоже. Это не только оптимизация, но и защита: `user and user.is_active` не бросит ошибку если `user` равен `None`.

Можно писать: if x == 1 or 2 or 3

Нужно: if x == 1 or x == 2 or x == 3 (или: if x in [1, 2, 3])

`or 2` всегда True - любое ненулевое число является truthy в Python. Выражение читается как (x == 1) or (2) or (3), и всегда возвращает True.

Что выведет: print(True or False and False)?

Составные операторы присваивания

Вместо `x = x + 5` принято писать `x += 5`. Это не просто синтаксический сахар - в некоторых структурах данных составные операторы работают быстрее.

ОператорЭквивалентПример
+=x = x + nx += 5
-=x = x - nx -= 3
*=x = x * nx *= 2
/=x = x / nx /= 4
//=x = x // nx //= 3
%=x = x % nx %= 7
**=x = x ** nx **= 2

Что будет в x после: x = 10; x //= 3; x += 1?

Приоритет операторов

Как в математике, операторы Python имеют приоритет. Знание приоритетов предотвращает скрытые баги - именно такой баг и привёл к проблеме с Pentium.

При сомнении - ставить скобки. `(2 + 3) * 4` однозначно даёт 20. Скобки делают код читаемым и предотвращают ошибки, которые трудно отловить.

Что выведет: print(2 + 3 * 4 ** 2)?

Где этот урок в курсе

Операторы - инструменты, которые превращают переменные в вычисления. Дальше курс собирает из них логику и поток программы:

  • Строки — Конкатенация + и повторение * на строках - те же операторы, только над текстом
  • Условия — Сравнения ==, <, >= - топливо для if/elif/else
  • Циклы — while и for держатся на условиях с and, or, not
  • Функции — Логические выражения становятся guard clauses в начале функций

Главное

  • **Арифметика**: +, -, *, /, //, %, ** - семь операторов для всей математики
  • **// и %**: целочисленное деление и остаток - сильная пара для работы со временем и пространством
  • **Сравнения**: ==, !=, <, >, <=, >= - возвращают bool, основа любой логики
  • **Логика**: and (И), or (ИЛИ), not (НЕ) - булева алгебра в одну строку
  • **Составные**: +=, -= и т.д. - сокращённая запись, стандарт индустрии
  • **Приоритет**: ** - */% - +- - сравнения - not - and - or

Вопросы для размышления

  • Почему Intel Pentium баг с делением не заметили полгода - что это говорит о тестировании граничных значений?
  • Когда использовать // вместо / и почему это архитектурное решение, а не просто синтаксис?
  • Почему short-circuit evaluation в and/or - это не только удобство, но и механизм защиты от ошибок?

Связанные уроки

  • prog-03-variables — Без знания типов результат оператора непредсказуем (5 == '5' это False)
  • prog-05-strings — Конкатенация и срезы строк расширяют те же операторы
  • prog-06-conditionals — Сравнения и логические операторы это сырьё для if/else
  • prog-07-loops — Условия циклов опираются на сравнения и логические операторы
  • prog-09-recursion — Составные операторы вроде += основа паттерна аккумулятора
  • alg-01-big-o
Операторы

0

1

Войти