В чем разница между "если x == True" и "если x:"

Здравствуйте, Сообщество stackoverflow :-)

В данный момент я изучаю Python и не совсем понимаю концепцию "Правда/Ложь".

В Python число 0 связано с "False", а 1 с "True".

Когда я пишу следующий код

x = 2
y = 1

if y == True:
    print("Y is True")
if x == True:
    print("X is True")
else:
    print("X is False")

Я получаю "Y - это правда", потому что "1" - это правда. И я получаю "Х ложно", но я подумал, что это также должно быть "Истина", потому что есть значение (х = 2), а не "Нет, 0 и т.д."

Когда я пишу

if x:
    print("X is True")
else:
    print("X is False")

тогда я получаю "X - Истина", потому что х не пуст и, следовательно, правдив.

Какова точная разница между "если x:" и "если x == True"?

Ответы

Ответ 1

Разница в том, что if x: проверяет значение истинности x. Значение истинности всех целых чисел, кроме 0, является истинным (в данном случае 2).

Однако if x == True: сравнивает x со значением True, которое является разновидностью 1. Сравнение 2 == 1 приводит к ложному значению.

Чтобы быть точным, есть две смежные концепции: * "Истинное значение" определяет поведение if, while и т.д. * другие являются значениями True и False, которые имеют соответствующие значения истинности "истина" и "ложь", но не обязательно равны другим истинам, соответственно. ложные значения.

Если по какой-либо причине вам абсолютно необходимо проверить точные значения True и False, вы можете сделать это с помощью if x is True или if x is False. Это гарантирует, что если у точно True пройдет тест, если это 1, он не будет.

Ответ 2

Оператор == не сравнивает истинность своих операндов, он сравнивает их значения.

Когда логические значения используются в контексте, который требует чисел, например, при сравнении их с числами, они автоматически конвертируются: True становится 1, False становится 0.

Так

if some_boolean == some_number:

фактически эквивалентно:

if int(some_boolean) == some_number:

Вот почему

if True == 2:

не удается. int(True) - это 1, так что это эквивалентно

if 1 == 2:

Ответ 3

эквивалентные способы взглянуть на проблему:

"if x" <==> "if bool(x)"

так как ваш х является целым числом:

"if x" <==> "if x != 0"

и

"if x == True"  <==> "if x == 1"