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

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

В прошлом уроке мы вычисляли числовые значения. Но программы нередко должны принимать решения: «это число больше того?», «эти строки одинаковые?», «значение в допустимом диапазоне?». Именно для этого существуют операторы сравнения — они сравнивают два значения и всегда возвращают True или False.

Шесть операторов сравнения

ОператорСмыслПримерРезультат
==равно5 == 5True
!=не равно5 != 3True
>больше7 > 3True
<меньше3 < 7True
>=больше или равно5 >= 5True
<=меньше или равно4 <= 3False

Все эти операторы возвращают значения типа boolTrue или False. Это критически важно для условных выражений, которые мы изучим в модуле 3.

== это не =

Один из самых распространённых источников ошибок у новичков — путаница между = и ==:

age = 25        # присваивание: записать 25 в переменную age
age == 25       # сравнение: True ли что age равно 25?

print(age == 25)  # True
print(age == 30)  # False

= — оператор присваивания, изменяет переменную.
== — оператор сравнения, ничего не меняет, только проверяет.

Сравнение чисел

Числа сравниваются предсказуемо, как в математике:

a = 10
b = 20

print(a < b)    # True
print(a > b)    # False
print(a == b)   # False
print(a != b)   # True
print(a <= 10)  # True (10 <= 10)
print(b >= 21)  # False

При сравнении int и float Python автоматически приводит к общему типу:

print(1 == 1.0)   # True — математически равны
print(3 > 2.9)    # True
print(0.1 + 0.2 == 0.3)  # False! — проблема точности float

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

a = 0.1 + 0.2
b = 0.3
print(abs(a - b) < 1e-9)  # True — разница меньше погрешности

Сравнение строк

Строки в Python сравниваются лексикографически — символ за символом по их кодам в Unicode:

print("abc" == "abc")   # True
print("abc" == "ABC")   # False — регистр важен
print("abc" < "abd")    # True — 'c' < 'd' в Unicode
print("abc" < "abcd")   # True — более короткая строка «меньше»
print("apple" < "banana")  # True — 'a' < 'b'

Строчные буквы имеют большие коды, чем прописные, поэтому:

print("Z" < "a")   # True — заглавная Z (90) < строчная a (97)

Для сравнения без учёта регистра используйте .lower() или .upper():

word1 = "Python"
word2 = "python"
print(word1.lower() == word2.lower())   # True

Сравнение через is и is not

Помимо == и != Python предоставляет операторы is и is not, которые проверяют идентичность объектов (ссылаются ли переменные на один и тот же объект в памяти), а не равенство значений:

a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b)    # True — значения равны
print(a is b)    # False — разные объекты в памяти
print(a is c)    # True — c — это тот же объект, что и a

На практике is используется почти исключительно для сравнения с None:

result = None
print(result is None)     # True — правильный способ
print(result == None)     # True — работает, но не по стилю

Цепочки сравнений

Python позволяет записывать несколько сравнений в цепочку — это математически красиво и читаемо:

age = 25

# В других языках пришлось бы писать: age >= 18 and age < 65
print(18 <= age < 65)   # True — взрослый работоспособного возраста

score = 75
print(60 <= score <= 100)  # True — допустимый балл
print(0 < 5 < 10 < 15)    # True — возрастающая последовательность

Цепочка a < b < c эквивалентна a < b and b < c. Python вычисляет каждое звено и прекращает при первом False.

Результат сравнения — обычное значение

Результат сравнения — это значение типа bool, которое можно сохранить в переменную или использовать в арифметике:

x = 10
is_positive = x > 0
is_even = x % 2 == 0

print(is_positive)        # True
print(is_even)            # True
print(int(is_positive))   # 1
print(int(is_even))       # 1

# Подсчёт истинных условий:
conditions_met = int(x > 0) + int(x % 2 == 0) + int(x < 100)
print(conditions_met)     # 3 — все три условия выполнены

Проверь себя

Что выведет этот код?

x = 10
y = 10.0
print(x == y)
print(x is y)

x == yTrue (числово равны). x is y → скорее всего False (разные объекты: int и float), хотя в REPL для малых целых чисел интерпретатор может кешировать объекты и вернуть True. Не полагайтесь на is для сравнения чисел и строк — используйте ==.

Итог

  • Python предоставляет шесть операторов сравнения: ==, !=, >, <, >=, <=.
  • Все они возвращают bool: True или False.
  • = — присваивание; == — сравнение. Это принципиально разные операции.
  • Строки сравниваются лексикографически; регистр имеет значение.
  • Не сравнивайте float через == напрямую — используйте проверку близости через abs().
  • is / is not проверяют идентичность объектов, а не равенство значений; применяйте только для None.
  • Цепочки сравнений a < b < c читаемы и эквивалентны a < b and b < c.

В следующем уроке соединим сравнения с логическими операторами and, or, not, чтобы строить составные условия.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике