IF中的一些单词在字符串中有什么问题

时间:2013-07-25 12:37:08

标签: python

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

4 个答案:

答案 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")):