如果我有以下字符串:
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
的第二个比较不起作用。是什么原因?
答案 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
运算符会查找子字符串而不是精确的字匹配。
使用regex
或str.split
来处理此类案件。
答案 1 :(得分:0)
您的if语句应该被理解为
if 'FUTURE':
if 'future' in string :
print ...
非空字符串的评估结果为True
,因此if 'FUTURE'
是多余的
你想:
if 'future' in string.lower():
print ...