【问题标题】:What's wrong with the IF some words IN a string [duplicate]IF 字符串中的某些单词有什么问题[重复]
【发布时间】:2013-07-25 12:37:08
【问题描述】:

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

【问题讨论】:

  • 密切相关:if x or y or z == blah
  • print some_boolean_test 可以使用时不要使用if some_boolean_test: print True; else: print False
  • +1 这是一个常见的陷阱,当从现有的“演讲”形象转移到自己的结构时,没有完全掌握每个子元素的全部含义,IMO 绝对合法的问题

标签: python


【解决方案1】:

这是因为您的 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"]):
    #...

【讨论】:

  • 解释得很清楚。谢谢。
【解决方案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'
>>> 

【讨论】:

    【解决方案3】:

    那是因为

    ("M.txt" and "17") in string
    

    并不意味着它可能听起来像什么。在python中,它的意思是:

    测试如果一个值,你会在执行 boolean 和 between “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:
    

    【讨论】:

      【解决方案4】:

      ("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")):
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多