Приветствую, давай изучим тему Операторы сравнения в Python. Материал представлен в видеоформате с ментором JavaRush университета, или в более подробной текстовой версии со мной ниже.

Сегодня разберём операторы сравнения в Python. Эти мелкие значки — настоящие работяги в коде: помогают сравнить, что больше, что меньше, или вообще одинаковое ли. Хотите проверить, равны ли два числа? Или, может, отфильтровать данные, где строка длиннее другой? Без операторов сравнения тут никуда!

В этой статье я расскажу:

  • Что за зверь эти операторы сравнения и почему без них в Python как без рук
  • Какие они бывают и как их писать
  • Примеры из жизни, чтобы сразу въехать, как их юзать

Погнали разбираться?

Что такое операторы сравнения?

Операторы сравнения (иногда их зовут реляционными, но это не суть) — это такие значки в Python, которые помогают сравнить два значения. В отличие от арифметики, где ты получаешь числа, эти ребята всегда выдают либо True, либо False. Всё, без вариантов!

Представьте, как вы стоите перед зеркалом и прикидываете, какой пиджак надеть: "Этот покруче сидит или тот?" Вот и Python так же сравнивает значения и выдаёт: "Да, подходит" (True) или "Не, мимо" (False). Помню, как я сам в начале путался, пока не начал думать про них как про "да/нет" из реальной жизни.

x = 10
y = 5
result = x > y  # Результат: True
print(result)   # Выведет: True

Разница между операторами сравнения и другими типами операторов существенная. Арифметические операторы (+, -, *, /) работают с числами и возвращают числа. Логические операторы (and, or, not) работают с булевыми значениями. А сравнение в Python берет любые значения и возвращает булевый результат.

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

Давайте разберем каждый оператор подробно. За годы обучения программистов я понял: лучше один раз увидеть код в действии, чем десять раз прочитать определение.

Равно (==)

Синтаксис: a == b

Проверяет, равны ли два значения. Важно не путать с оператором присваивания (=) — частая ошибка новичков.

# Числа
age = 25
print(age == 25)    # True
print(age == 30)    # False

# Строки
name = "Анна"
print(name == "Анна")   # True
print(name == "анна")   # False (учитывается регистр!)

# Списки
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2)  # True

Реальный пример из практики: проверка пароля при входе в систему.

entered_password = input("Введите пароль: ")
correct_password = "secret123"

if entered_password == correct_password:
    print("Добро пожаловать!")
else:
    print("Неверный пароль")

Не равно (!=)

Синтаксис: a != b

Противоположность оператору ==. Возвращает True, если значения НЕ равны.

temperature = 22
print(temperature != 20)  # True
print(temperature != 22)  # False

# Полезно для исключений
user_input = input("Введите что-нибудь кроме 'exit': ")
if user_input != "exit":
    print(f"Вы ввели: {user_input}")
else:
    print("Программа завершена")

Больше (>)

Синтаксис: a > b

Проверяет, больше ли первое значение второго.

score = 85
passing_grade = 60

print(score > passing_grade)  # True

# Практический пример: проверка возраста
age = int(input("Ваш возраст: "))
if age > 18:
    print("Вы совершеннолетний")

Меньше (<)

Синтаксис: a < b

Проверяет, меньше ли первое значение второго.

current_speed = 40
speed_limit = 60

print(current_speed < speed_limit)  # True

# Проверка лимитов
file_size = 1.5  # МБ
max_size = 2.0

if file_size < max_size:
    print("Файл можно загрузить")

Больше или равно (>=)

Синтаксис: a >= b

Возвращает True, если первое значение больше или равно второму.

balance = 1000
withdrawal = 1000

print(balance >= withdrawal)  # True

# Проверка минимального возраста
candidate_age = 21
min_age = 21

if candidate_age >= min_age:
    print("Возраст подходит для должности")

Меньше или равно (<=)

Синтаксис: a <= b

Возвращает True, если первое значение меньше или равно второму.

remaining_time = 30  # минут
max_time = 45

print(remaining_time <= max_time)  # True

# Контроль расходов
monthly_expenses = 25000
budget_limit = 30000

if monthly_expenses <= budget_limit:
    print("Укладываемся в бюджет")

Сравнение разных типов данных

Одна из моих учениц как-то спросила: «А что будет, если сравнить число и строку?» Отличный вопрос! Python довольно строг в этом вопросе, и это хорошо — меньше неожиданных ошибок.

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

# Целые числа
print(10 > 5)     # True
print(-3 < 0)     # True

# Числа с плавающей точкой
print(3.14 > 3)   # True
print(2.0 == 2)   # True (Python автоматически приводит типы)

# Смешанное сравнение
print(5 == 5.0)   # True
print(3 < 3.5)    # True

Однако с комплексными числами все сложнее:

# Комплексные числа можно сравнивать только на равенство
complex1 = 3 + 4j
complex2 = 3 + 4j
print(complex1 == complex2)  # True

# А вот это вызовет ошибку:
# print(complex1 > complex2)  # TypeError!

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

Строки сравниваются по лексикографическому порядку — как в словаре, но с учетом ASCII-кодов.

print("apple" < "banana")     # True
print("Python" < "python")   # True (заглавные буквы идут раньше)
print("abc" < "abd")          # True

# Длина не всегда важна
print("z" > "abc")            # True
print("10" < "2")             # True (сравнивается как строки!)

# Практический пример: сортировка имен
names = ["Алексей", "Борис", "Анна"]
names.sort()
print(names)  # ['Алексей', 'Анна', 'Борис']

Сравнение булевых значений

В Python True эквивалентно 1, а False — 0:

print(True == 1)    # True
print(False == 0)   # True
print(True > False) # True

# Можно даже складывать!
result = True + True + False  # 2
print(result)

Сравнение последовательностей

Списки, кортежи и строки сравниваются поэлементно:

# Списки
print([1, 2, 3] < [1, 2, 4])    # True
print([1, 2] < [1, 2, 3])       # True (короче значит меньше)

# Кортежи
print((1, 2) == (1, 2))         # True
print((1, 2, 3) > (1, 2))       # True

# Строки (посимвольно)
print("abc" < "abd")             # True

Особенности сравнения словарей

В современных версиях Python (3.7+) словари можно сравнивать только на равенство:

dict1 = {"a": 1, "b": 2}
dict2 = {"a": 1, "b": 2}
dict3 = {"b": 2, "a": 1}

print(dict1 == dict2)  # True
print(dict1 == dict3)  # True (порядок не важен для равенства)

# А вот это не работает:
# print(dict1 > dict2)  # TypeError!

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

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

Одна из крутых особенностей Python — можно объединять операторы сравнения:

age = 25
print(18 <= age <= 65)  # True

# Эквивалентно:
print(age >= 18 and age <= 65)  # True

# Практический пример: проверка диапазона
score = 85
if 80 <= score <= 100:
    print("Отличная оценка!")

# Можно делать сложные цепочки
x = 5
print(1 < x < 10 < 20)  # True

Проблемы с числами с плавающей точкой

Вот где новички часто попадают в ловушку:

# Кажется, что должно быть True, но...
print(0.1 + 0.2 == 0.3)  # False!

# Причина: неточность представления
print(0.1 + 0.2)  # 0.30000000000000004

# Правильный способ сравнения
import math

def almost_equal(a, b, tolerance=1e-9):
    return abs(a - b) < tolerance

print(almost_equal(0.1 + 0.2, 0.3))  # True

Сравнение разных типов

Python 3 строже своего предшественника:

# В Python 3 это вызовет ошибку:
try:
    print(5 > "hello")
except TypeError as e:
    print(f"Ошибка: {e}")

# Но равенство разных типов всегда False
print(5 == "5")    # False
print([] == 0)     # False
print(None == 0)   # False

Практическое применение операторов сравнения

За годы работы я видел тысячи примеров использования операторов сравнения. Вот самые распространенные случаи:

Проверка пользовательского ввода

def validate_age():
    while True:
        try:
            age = int(input("Введите ваш возраст: "))
            if age < 0:
                print("Возраст не может быть отрицательным!")
            elif age > 150:
                print("Вы уверены в своем возрасте?")
            else:
                return age
        except ValueError:
            print("Пожалуйста, введите число!")

user_age = validate_age()
print(f"Ваш возраст: {user_age}")

Фильтрация данных

# Список сотрудников с зарплатами
employees = [
    {"name": "Анна", "salary": 50000},
    {"name": "Борис", "salary": 75000},
    {"name": "Виктор", "salary": 45000},
    {"name": "Дарья", "salary": 85000}
]

# Найти сотрудников с зарплатой выше 60000
high_earners = [emp for emp in employees if emp["salary"] > 60000]
print("Высокооплачиваемые сотрудники:")
for emp in high_earners:
    print(f"{emp['name']}: {emp['salary']} руб.")

Сортировка по критериям

# Список студентов с оценками
students = [
    {"name": "Алексей", "grade": 85},
    {"name": "Мария", "grade": 92},
    {"name": "Петр", "grade": 78},
    {"name": "Екатерина", "grade": 96}
]

# Сортировка по убыванию оценок
students.sort(key=lambda x: x["grade"], reverse=True)

print("Рейтинг студентов:")
for i, student in enumerate(students, 1):
    print(f"{i}. {student['name']}: {student['grade']}")

Оптимизация: == vs is

Многие не знают разницы между == и is. Это важно для производительности:

# == сравнивает значения
# is сравнивает идентичность объектов

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

print(a == b)   # True (одинаковые значения)
print(a is b)   # False (разные объекты)
print(a is c)   # True (один объект)

# Для небольших чисел и строк Python может использовать кэширование
x = 100
y = 100
print(x is y)   # True (кэшированные объекты)

# Но для больших чисел
big_x = 1000
big_y = 1000
print(big_x is big_y)  # Может быть False

Частые ошибки и как их избежать

За время обучения программистов я собрал коллекцию самых распространенных ошибок. Поделюсь топ-5:

1. Путаница между = и ==

# НЕПРАВИЛЬНО:
age = 25
if age = 18:  # SyntaxError!
    print("Совершеннолетний")

# ПРАВИЛЬНО:
if age == 18:
    print("Ровно 18 лет")

2. Игнорирование регистра при сравнении строк

user_input = "YES"
expected = "yes"

# НЕПРАВИЛЬНО:
if user_input == expected:  # False!
    print("Положительный ответ")

# ПРАВИЛЬНО:
if user_input.lower() == expected.lower():
    print("Положительный ответ")

3. Неаккуратность с числами с плавающей точкой

# НЕПРАВИЛЬНО:
result = 0.1 + 0.2
if result == 0.3:  # False!
    print("Равно 0.3")

# ПРАВИЛЬНО:
import math
if math.isclose(result, 0.3):
    print("Приблизительно равно 0.3")

4. Сравнение None

value = None

# НЕПРАВИЛЬНО:
if value == None:  # Работает, но не рекомендуется
    print("Значение пустое")

# ПРАВИЛЬНО:
if value is None:
    print("Значение пустое")

5. Логические ошибки в условиях

age = 17

# НЕПРАВИЛЬНО:
if age > 18 or age == 18:
    print("Совершеннолетний")

# ПРАВИЛЬНО (проще и понятнее):
if age >= 18:
    print("Совершеннолетний")

FAQ

Можно ли сравнивать списки разной длины?

Да, Python сравнивает списки поэлементно. Если один список короче, он считается меньшим при равенстве всех предыдущих элементов.

Что происходит при сравнении разных типов данных?

В Python 3 сравнение разных типов (кроме проверки на равенство) вызывает TypeError. Равенство разных типов всегда возвращает False.

Заключение

Слушайте, крутой кодер от обычного отличается не тем, сколько он фреймворков заучил, а тем, насколько глубоко он шарит в основах. А операторы сравнения — это как раз та база, без которой ни одна нормальная программа не взлетит.

Берите примеры кода из этой статьи, ковыряйте их, пробуйте свои варианты. Только когда начнёте ломать и чинить код, оно реально осядет в голове. Я сам так учился: писал, ломал, психовал, но в итоге всё встаёт на места.

А для тех, кто нацелен на быстрое достижение уровня Middle-разработчика, есть курс Python в университете JavaRush — программа с ментором, которая за 12 месяцев готовит специалистов для работы в крупных IT-компаниях.