Операторы сравнения
Операторы сравнения
В прошлом уроке мы вычисляли числовые значения. Но программы нередко должны принимать решения: «это число больше того?», «эти строки одинаковые?», «значение в допустимом диапазоне?». Именно для этого существуют операторы сравнения — они сравнивают два значения и всегда возвращают True или False.
Шесть операторов сравнения
| Оператор | Смысл | Пример | Результат |
|---|---|---|---|
== | равно | 5 == 5 | True |
!= | не равно | 5 != 3 | True |
> | больше | 7 > 3 | True |
< | меньше | 3 < 7 | True |
>= | больше или равно | 5 >= 5 | True |
<= | меньше или равно | 4 <= 3 | False |
Все эти операторы возвращают значения типа bool — True или 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 == y → True (числово равны). 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, чтобы строить составные условия.