2013-06-22 3 views
3

Если у меня есть строки, как следующее:Для контура питона несколько проверок

my_string(0) = Your FUTURE looks good. 
my_string(1) = your future doesn't look good. 

Я хочу напечатать обе линии с следующее:

for stings in my_string: 
    if 'FUTURE' or 'future' in string: 
     print 'Success!' 

мой if цикл работ по первому условию с FUTURE , однако второе сравнение с future не работает. Какова причина?

ответ

5

использование:

if 'FUTURE' in string or 'future' in string: 

или просто:

if 'future' in string.lower() 

Почему это не удалось:

if 'FUTURE' or 'future' in string: 

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

True or ('future' in string) # bool('FUTURE') --> True 

как первое условие всегда True, поэтому следующее условие никогда не проверяется. На самом деле ваше if-condition всегда True независимо от того, какая строка содержит.

Непустая строка всегда True в python и or короткое замыкание в работе, как только будет найдено истинное значение.

>>> strs1 = "your future doesn't look good." 
>>> strs2 = "Your FUTURE looks good." 
>>> 'FUTURE' or 'future' in strs1 
'FUTURE' 
>>> 'Foobar' or 'future' in strs1 
'Foobar' 
>>> 'Foobar' or 'cat' in strs1 
'Foobar' 
>>> '' or 'cat' in strs1 # empty string is a falsey value, 
False      # so now it checks the next condition 

Обратите внимание, что:

>>> 'FUTURE' in 'FOOFUTURE' 
True 

является True как in оператор ищет подстроки не точное совпадение слова.

Используйте либо regex, либо str.split для обработки таких случаев.

0

Ваш если заявление должно быть прочитано как

if 'FUTURE': 
    if 'future' in string : 
    print ... 

непустых строк оцениваются как True так if 'FUTURE' избыточна

Вы хотите:

if 'future' in string.lower(): 
    print ... 
+0

ваш первый фрагмент будет точным, если строка была 'if 'FUTURE' и 'future' в строке ...'. это больше похоже на 'if 'FUTURE': [code] elif 'future' в строке: [тот же код]' –