如何检查字符串中的特定字符? 我发现这个链接非常有用。但是我的代码有什么问题?
string = "A17_B_C_S.txt"
if ("M.txt" and "17") in string:
print True
else:
print False
答案总会出来
True
如何检查字符串中的特定字符? 我发现这个链接非常有用。但是我的代码有什么问题?
string = "A17_B_C_S.txt"
if ("M.txt" and "17") in string:
print True
else:
print False
答案总会出来
True
这是因为您and
评估的17
是 in stringList
。由于and
短路,评估为 17。
>>> "M.txt" and "17"
'17'
Python 将非空字符串计算为 value True
。因此,M.txt
计算结果为True
,因此表达式的值取决于返回的第二个值(17
)并在stringList
. (为什么?当and
用一个True
值执行时,表达式的值取决于第二个值,如果是False
,则表达式的值是False
,否则是True
。)
你需要改变你的表达方式
if "M.txt" in stringList and "17" in stringList:
#...
或者使用内置all()
if all(elem in stringList for elem in ["M.txt", "17"]):
#...
stringList = "A17_B_C_S.txt"
if "M.txt" in stringList and "17" in stringList:
print True
else:
print False
>>>
True
('M.txt' and '17')
返回'17'
。所以你只是在测试'17' in stringList
。
>>> ('M.txt' and '17')
'17'
>>>
那是因为
("M.txt" and "17") in string
并不意味着它可能听起来像什么。在 python 中,这意味着:
测试是否在“字符串”中找到一个值,在执行布尔运算时以及在“M.txt”和“17”之间找到一个值
and
在您的代码中,不仅执行and
运算符,还返回最后一项,即"17"
. 因此 ("M.txt" and "17") 将返回 "17",因此它实际上只会测试是否"17"
在string
如果你真正想要的是:
测试字符串中是否有“M.txt”以及字符串中是否有“17”
你必须写:
if "M.txt" in string and "17" in string:
("M.txt" and "17")
返回"17"
,因为它的计算结果为(True and True)
( bool("M.txt") == True
)。因此,选择了第二个。
然后你想说if "17" in string
。
您必须单独比较这些项目:
if "M.txt" in stringList and "17" in stringList:
甚至:
if all(i in stringList for i in ("M.txt", "17")):