【问题标题】:I'm having trouble with the OR operator in my python code我的 python 代码中的 OR 运算符有问题
【发布时间】:2019-04-16 01:06:33
【问题描述】:

我正在尝试创建一个具有多个 AND、OR 和括号的搜索系统。在编写代码时,我遇到了 OR 问题。我不知道我的代码是错的还是我的电脑错了,因为有时它给出了正确的答案,有时却没有。

sentence = ["A", "B", "C"]
bracket = ["X", "or", "B"]

if "or" in bracket:
   index_of_or = bracket.index("or")
   if bracket[index_of_or -1 ] or bracket[index_of_or +1] in sentence:
      bracket = "True"
      print(bracket)
   else:
      bracket = "False"
      print(bracket)

我通过更改括号列表中的元素来检查代码。 我把bracket=['X', 'or', 'Z'] 输出为 True。

为什么会这样?

【问题讨论】:

  • 这是一个骗子,但我找不到。无论如何,你读它就像一个英语句子。你需要if bracket[index_of_or-1] in sentence or bracket[index_of_or+1] in sentence
  • 加括号(bracket[index_of_or -1 ] or bracket[index_of_or +1])

标签: python logical-operators


【解决方案1】:

您需要将条件语句分开。你不能做类似的事情 if x or y == 7 : ...,你必须做if x == 7 or y == 7

考虑到这一点,将代码的相应行更改为阅读

if bracket[index_of_or -1 ] in sentence or bracket[index_of_or + 1] in sentence:

【讨论】:

    【解决方案2】:
    sentence = ["A", "B", "C"]
    bracket = ["X", "or", "Z"]
    
    if "or" in bracket:
       index_of_or = bracket.index("or")
       if (bracket[index_of_or -1 ] or bracket[index_of_or +1]) in sentence:
          bracket = "True"
          print(bracket)
       else:
          bracket = "False"
          print(bracket)
    

    输出

    False

    【讨论】:

      【解决方案3】:

      由于以下语句而出现问题:

      if bracket[index_of_or -1 ] or bracket[index_of_or +1] in sentence:
      

      这实际上做了一些与看起来完全不同的事情。如果满足以下任一条件,它的计算结果为真:

      • bracket[index_of_or -1 ] 计算结果为真,或

      • bracket[index_of_or +1] in sentence 计算结果为真。

      但您认为它的计算结果为 true,如果:

      • bracket[index_of_or -1 ] in sentence 计算结果为真,或

      • bracket[index_of_or +1] in sentence 计算结果为真。

      如果数字不为 0,则第一个条件 (bracket[index_of_or -1 ]) 将被评估为 True。这是评估为 False,因为 index_of_or = bracket.index("or") 返回 1,而 bracket[index_of_or -1 ] 使其为 0,从而使其成为评估为False

      要修复它,只需将您的程序更改为:

      sentence = ["A", "B", "C"]
      bracket = ["X", "or", "B"]
      
      if "or" in bracket:
         index_of_or = bracket.index("or")
         if (bracket[index_of_or -1 ] or bracket[index_of_or +1]) in sentence:
            bracket = "True"
            print(bracket)
         else:
            bracket = "False"
            print(bracket)
      

      如预期的那样,输出将是False

      【讨论】:

      • 呵呵,我以前从未见过("a" or "b") in "other_string"。这是一个非常巧妙的技巧。
      • 同意,@Modelmat。当我得知不必写 if w in somelist or x in somelist or y in somelist or z in somelist 时,我非常高兴。所需要的只是一个简单的if (w or x or y or z) in somelist :)
      • 这实际上不起作用?见('a' or 'b') in 'b' ',它总是在'b'中计算为'a'。
      • 警告 - 这不像答案中暗示的那样工作。如果您说(x or y or z) in l(x or y or z) 的计算结果是三者中的第一个“真实”值。例如,(0 or 1 or 3) == 1([] or "" or 7 or 1) == 7。这让您可以同时检查多个包含表达式。
      猜你喜欢
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多