【问题标题】:Python != giving unexpected results [duplicate]Python!=给出意想不到的结果[重复]
【发布时间】:2017-11-30 15:15:44
【问题描述】:

我在一个快速学习 Python 的网站上遇到了一个非常令人困惑的问题。这是关于操作数 != 以及它是如何工作的。在 3 个操作数之间使用 != 的结果/结果让我和我的同学感到困惑。我们试图四处搜索,但找不到任何关于此的讨论/解释。请帮忙。 具体请看下图:

真!=假!= 1

输出:真

真!=假!=真

输出:真

真不假不真

输出:真

逐步分解第一个语句,应首先评估 True!=False 以产生 True。然后再次使用 != 将此 True 与 1 进行比较。 True != 1 应该产生 False。因此,整个语句的计算结果应为 False!但是会产生一个 True 。

逐步分解第二个语句,True!=False 应该产生 True,然后这个 True !=True 应该产生 False。该语句应评估为 False !但会产生 True 。

第三个语句也是如此。

在 Javascript 和 JAVA 中尝试完全相同的语句都给出了预期的结果 - False,这是完全有道理的。然而,Python 是个例外。

注意:我们知道通过在两个操作数周围加上括号来显式强制操作的顺序会给出“正确”的结果(即 False)。我们只是无法理解为什么它是没有括号的方式。

任何帮助将不胜感激。

【问题讨论】:

  • 您正在链接比较运算符。 True != False != 1 执行为(True != False) and (False != 1)True != False != True 执行为(True != False) and (False != True)
  • 为什么True != 1 会产生假?
  • 换句话说,您的细分不正确。这不是链式比较的工作方式。
  • @AdamHughes: True == 1 是真的,所以True != 1 确实是假的。所以一个更好的问题是:为什么你认为它不应该?
  • Dep,谢谢,一定要喝杯咖啡

标签: python boolean comparison boolean-logic operands


【解决方案1】:

这是因为 a != b != c 等价于 a != b 和 b != c。

这称为链式比较,您可以在此处找到更多信息: https://docs.python.org/3/reference/expressions.html

【讨论】:

  • 我知道了,非常感谢!!
猜你喜欢
  • 2017-10-26
  • 2013-07-19
  • 2012-01-27
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2020-11-23
相关资源
最近更新 更多