采用:
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
运算符查找不完全匹配的子字符串。
使用regex
或str.split
来处理此类情况。