2015-05-10 3 views
1
wow = ["wowza this is a really long string wows"] 

if "long" or "is" in wow: 
    print("yes") 

выход yesЕсли или заявления в питона

однако, если я ставлю в

wow = ["wowza this is a really long string wows"] 

if "long" in wow: 
print("yes") 

выход nothing

же с:

wow = ["wowza this is a really long string wows"] 

    if "is" in wow: 
    print("yes") 

почему?

Я думал, что or должен был быть либо одним? , но если индивидуально введены оба являются ложными, но с or это становится правдой?

или это неправильный путь, чтобы написать if or statement?

она должна быть написана так?

if "long" in wow or "is" in wow: 
+0

[Python 3 Оператор Внеочередные Таблица] (https://docs.python.org/3/reference/expressions .html # operator-priorityence) – Shashank

+0

'' long'' '' True ', и поэтому выражение всегда будет 'True'. –

+2

Этот вопрос задан так много раз. Почему люди продолжают писать на него новые ответы вместо того, чтобы просто называть его дураком? – abarnert

ответ

6
if "long" or "is" in wow: 

эквивалентно

if ("long") or ("is" in wow): 

Что вы хотите:

if "long" in wow or "is" in wow: 

Первое испытание прошло успешно, потому что "long" or "is" in wow возвращается "long" и строка "long" является truthy *. Следующие тесты терпят неудачу, потому что wow - это список с 1 строкой, а операторы-операторы in проверяют здесь локализацию списка, вместо ограничения строки.

* or "is" in wow часть не будет проверена здесь, потому что если короткое замыкание. Не имеет никакого отношения к вашей проблеме, хотя

+0

спасибо. Я запутался в этих заявлениях –

+1

Я думал, что «если« длинный »или« есть »в wow:' возвращался true, потому что мы проверяем 'if" long "или" is "', который является True. – Scott

+3

@Scott оператор 'in' имеет более высокий приоритет, чем оператор' or'. [Приоритет оператора] (https://docs.python.org/2/reference/expressions.html#operator-precedence) – Felk

4

ОК, у нас есть несколько различных проблем.

if "long" or "is" in wow: 

Это означает, что это:

if ("long") or ("is" in wow): 

Так что да, вы должны изменить его к этому:

if "long" in wow or "is" in wow: 

Но это еще не делает то, что вы хотите, потому что это wow список. Вы спрашиваете, является ли элемент "long" элементом этого списка. Но "long" не является элементом списка. Единственным элементом списка является строка "wowza this is a really long string wows", которая не совпадает с "long". Вы хотите проверить его непосредственно, а не список.

+0

спасибо. Теперь я все понял. Да, я должен был проверить его на самой строке, а не на списке. спасибо вам большое –

4

Как насчет того, чтобы отправить свое условие в интерактивную подсказку (запустите python или ipython, если у вас есть), чтобы узнать, что он возвращает?

>>> wow = ["wowza this is a really long string wows"] 
>>> "long" in wow 
False 
>>> "long" or "is" in wow 
'long' 

Вы, вероятно, хотите, чтобы проверить строку, а не один элемент списка:

>>> wow = wow[0] 
>>> "long" in wow 
True 
>>> "long" or "is" in wow 
'long' 
>>> ("long" or "is") in wow 
True 
>>> wow 
'wowza this is a really long string wows' 
+0

спасибо за это. Я просто смутился. и да, я должен был использовать строку вместо списка. Спасибо. Мне нужно было уточнить. большое спасибо за то, что нашли время, чтобы обучить всех –

Смежные вопросы