用于循环python多重检查

时间:2013-06-22 16:14:33

标签: python

如果我有以下字符串:

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的第二个比较不起作用。是什么原因?

2 个答案:

答案 0 :(得分: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条件总是 True

一旦找到True值,python中的非空字符串始终为True,并且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运算符会查找子字符串而不是精确的字匹配。

使用regexstr.split来处理此类案件。

答案 1 :(得分:0)

您的if语句应该被理解为

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

非空字符串的评估结果为True,因此if 'FUTURE'是多余的

你想:

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