【问题标题】:Confused About Python OR operator [duplicate]对 Python OR 运算符感到困惑 [重复]
【发布时间】:2014-10-28 13:51:15
【问题描述】:

我知道有很多关于 OR 运算符的文档,但我无法让它在我的 Python 代码中工作。我是初学者,所以很多 python 语法/方法对我来说都是新的。

def getDecision():
x = input()
while x != ("a" or "b"):
    print("Please input \"A\" or \"B\"")
    x = input()
return x

目前它只检查x是否不等于A,它似乎忽略了B。 这和其他问题不一样,好像我写的一样

while (x != "a") or (x != "b")

如果输入 A 或 B,它将与循环一起进行

非常感谢

【问题讨论】:

  • 您可能还会发现stackoverflow.com/questions/23294658/… 很有用。
  • 试试while x not in ('A', 'B'):
  • 我不同意将其标记为重复。因为这是!=而不是==,所以问题的逻辑比重复更难。在这里,需要马特的答案,或者将or 变成and 的解决方案:x!="a" and x!="b"
  • or 是一个逻辑运算符。
  • “我知道有很多关于 OR 运算符的文档”——也许你应该阅读它们?!

标签: python boolean operator-keyword


【解决方案1】:

这应该是:

while x!="a" and x!="b":

while x not in ("a", "b"):

第一个是您声明的logical equivalence,因为~(a or b) == ~a and ~b。第二种是更 Pythonic 的写法,也更容易理解。

【讨论】:

  • 我认为,对于新用户来说,解释为什么会发生某些事情比仅仅如何解决它更重要
  • @TimCastelijns:那么请随意。
  • 我承认我不完全知道为什么会这样,但我想你会的,作为一个金色的蟒蛇徽章所有者 :-)
  • @TimCastelijns:就我个人而言,我认为 OP 的问题中显示的问题不是无法准确理解 Python 对不正确的表达式所做的事情,而是更多地理解 ==!= 确实不分布在逻辑表达式上。在我看来,这个问题和答案的简单示例比附加到数学描述的更多单词与这与类似 Python 表达式的关系更好地说明了这一点。这就是为什么我给出了逻辑上的等价物(为了理解)以及更 Pythonic 的写法。
  • 很公平 :-) 我相信你是更好的评判者,因为你有更多的经验
【解决方案2】:

问题出在这部分:

x != ("a" or "b")

表达式(“a”或“b”)将始终计算为“a”,因为它所做的是首先检查“a”(第一个变量)是否为真/假(在 python 中,空字符串被计算为假,其余为真)。因为“a”将被评估为 True,它甚至不会检查第二个变量,只会返回“a”。此外,此表达式特别检查任何给定变量的计算结果是否为 True 并返回 first 一个(在您的情况下为“a”)。

解决办法是改成

while x not in ('a', 'b')

如其他用户所述。

【讨论】:

    【解决方案3】:

    如果你想让 while 循环出现在函数中,那么你需要缩进它。 你也应该使用:

    而 x 不在 ('a', 'b') 或者 而 x!="a" 和 x!="b":

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多