Почему if сравнивает неправильно — в чём разница между = и ==?
Пишу условие if x = 5:, а программа не запускается или ведёт себя странно. Я хочу проверить, равно ли x пяти. В чём разница между одним и двумя знаками равенства и почему if не сравнивает как надо?
2 ответа
Это очень частая путаница новичков: = и == — это разные операторы.
=(один знак) — присваивание, кладёт значение в переменную: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".
Памятка: «одно равно — присвоить, два равно — спросить». В Python присваивание прямо в условии if запрещено (в отличие от C), так что вы получите понятную SyntaxError, а не молчаливый баг. Просто меняйте = на == внутри if/while.