2016-05-16 6 views
1

Я собирался выполнить задание и наткнулся на то, что меня смутило, так как я не безумно хорош с питоном. Вот код.Почему этот оператор python if не равен true?

def main(): 


    list = [1,2] 
    x = 2 

    if (x in list == True): 
     print("hi") 

    if (x in list): 
     print("Why does this proc?") 

main() 

Я полагал, что выход будет таким, но выход будет только вторым оператором if. Я знаю, что в C, если у вас что-то вроде

if (x = 6) 

Это, так как есть только один «=», что х теперь равен 6. (Как его читать, если(), х ​​= 6).

Что-то подобное происходит с этим кодом на Python? Является ли это сначала проверкой «list == true», а затем проверка наличия x в списке?

Любое понимание было бы принято с благодарностью!

+2

Это точно. Он проверяет, есть ли 'x в списке и списке == True'. –

+0

Из любопытства, почему я не получаю сообщение об ошибке? Я также провел некоторое тестирование и попытался «if (list == False)», и это также не происходит. Когда python сравнивает два, каков результат? – Childishforlife

+1

Зачем вы хотите получить сообщение об ошибке? Это совершенно законная инструкция Python. И да, это тоже не сработает, «list» не равен «False». –

ответ

6

Как вы можете видеть, да, ваше выражение требует явного группирования:

>>> 2 in [1,2] == True 
False 
>>> (2 in [1,2]) == True 
True 

Обратите внимание, что, как и @tavo @MorganThrapp говоря, версия без скобок делает прикован сравнение, проверяя, что 2 in [1,2], а затем проверяя это [1,2] == True. Последнее неверно, поэтому полное выражение также неверно.

Кстати, не называйте свои переменные после встроенных модулей, например list, или вы не сможете использовать эти функции легко.

Кроме того, вы не должны сравнить результат выражения для True:

>>> 2 in [1,2] 
True 

Это эквивалентно просят «есть„пирог готов“верное утверждение?» в отличие от «готов ли пирог?».

+2

Вы уверены, что это только приоритет работы? Потому что '2 in ([1, 2] == True)' вызывает ошибку. – tavo

+0

Приносим извинения за терминологию, это было просто что-то, что я взломал для публикации здесь, это был не код, который фактически используется. Спасибо за информацию! – Childishforlife

+0

@ tavo - замечено и отредактировано; Спасибо. – TigerhawkT3