← Все вопросы

Почему if сравнивает неправильно — в чём разница между = и ==?

Задан 13 месяцев назад523 просмотров2 ответа
8

Пишу условие if x = 5:, а программа не запускается или ведёт себя странно. Я хочу проверить, равно ли x пяти. В чём разница между одним и двумя знаками равенства и почему if не сравнивает как надо?

2 ответа

12
✓ Принятый ответ — помог автору

Это очень частая путаница новичков: = и == — это разные операторы.

  • = (один знак) — присваивание, кладёт значение в переменную: x = 5 значит «сделать x равным 5».
  • == (два знака) — сравнение, проверяет равенство и даёт True/False: x == 5 значит «равен ли x пяти?».

Ошибка — попытка сравнить через =:

if x = 5:        # SyntaxError: invalid syntax
    print("равно")

К счастью, в современном Python это синтаксическая ошибка, и программа сразу падает (в условии присваивать нельзя). Исправление — двойное равно:

if x == 5:
    print("равно")

Запомните по смыслу:

x = 5        # присвоили: теперь x это 5
print(x == 5)  # сравнили: True
print(x == 7)  # сравнили: False

Если «if сравнивает неправильно», но синтаксической ошибки нет, проверьте ещё две вещи: 1) не сравниваете ли вы строку с числом ("5" == 5 это False); 2) не забыли ли int(input()) — ввод приходит строкой, и x == 5 будет False, если x это "5".

4

Памятка: «одно равно — присвоить, два равно — спросить». В Python присваивание прямо в условии if запрещено (в отличие от C), так что вы получите понятную SyntaxError, а не молчаливый баг. Просто меняйте = на == внутри if/while.

Ваш ответ

, чтобы ответить на вопрос.