How to check a string for specific characters? 我发现链接非常有用。但我的代码出了什么问题?
string = "A17_B_C_S.txt"
if ("M.txt" and "17") in string:
print True
else:
print False
并且答案总是出来
True
答案 0 :(得分:3)
这是因为您的and
评估为17
中的stringList
。由于短路,and
评估为17。
>>> "M.txt" and "17"
'17'
Python将非空字符串计算为值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"]):
#...
答案 1 :(得分:2)
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'
>>>
答案 2 :(得分:2)
那是因为
("M.txt" and "17") in string
并不意味着声音之类的东西。在python中,它意味着:
代码中的测试一个值,你在执行布尔值和之间时会得到 “M.txt”和“17”位于“字符串”
中
and
不仅会执行and
运算符,还会返回最终字词"17"
。因此(“M.txt”和“17”)将返回“17”,因此它实际上只会测试"17"
是否在string
如果您真正想要的是:
测试字符串中是否有“M.txt”,字符串中是否为“17”
你必须写:
if "M.txt" in string and "17" in string:
答案 3 :(得分:1)
("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")):