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循环适用于第一个条件 with FUTURE,但是,第二个比较 withfuture不起作用。是什么原因?

4

2 回答 2

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

因为第一个条件始终为,所以永远不会检查下一个条件。事实上,无论字符串包含什么,您的 if 条件始终为真。

非空字符串总是True在 pythonor中,一旦找到 True 值,操作就会短路。

>>> 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来处理此类情况。

于 2013-06-22T16:16:12.720 回答
0

你的 if 语句应该读作

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

评估非空字符串,因为Trueif 'FUTURE'是多余的

你要:

if 'future' in string.lower():
  print ...
于 2013-06-22T16:18:53.997 回答