【问题标题】:two numerical comparisons in one expression python一个表达式中的两个数值比较python
【发布时间】:2018-07-10 21:00:41
【问题描述】:

我以为我在某处读到 python(至少 3.x)足够聪明来处理这个问题:

x = 1.01

if 1 < x < 0:
    print('out of range!')

但它对我不起作用。

我知道我可以改用这个:

if ((x > 1) | (x < 0)):
    print('out of range!')

...但是可以修复上面的版本吗?

【问题讨论】:

  • 1 &lt; x &lt; 0: 怎么可能是真的?也许0 &lt; x &lt; 1?我们不知道您期望x 采取什么价值。
  • @roganjosh x = 1.01 ...第一行。我希望执行打印语句。
  • @n1k31t4: 1.01 &lt; 0 是假的。
  • 我现在看到我在寻求帮助时有点仓促。尽管如此,我还是学到了一些东西。我仍然不清楚单个表达式是否用 and / or 解决。

标签: python equality


【解决方案1】:

效果很好,你的表达总是假的;试试这个:

x = .99

if 1 > x > 0:
    print('out of range!')

【讨论】:

  • 我正要评论 :(。不过,这里是 +1
  • 感谢您的第一个答案,我从中解决了我的问题!
【解决方案2】:

Python 链式比较的工作方式类似于数学符号。在数学上,“0 且小于1,“1 且强> 小于 0。

与。非或。这两个条件都需要成立。

如果你想要一个“或”,你可以自己写一个。在 Python 中是 or,而不是 || 是按位或。

if x > 1 or x < 0:
    whatever()

或者,您可以将表达式写成“and”:

if not (0 <= x <= 1):
    whatever()

【讨论】:

  • OP 摆脱了按位 or 因为这些是布尔表达式。
  • @Prune:是的,他们侥幸逃脱,这就是他们侥幸逃脱的原因,但他们仍应切换到正确的运营商。
  • 谢谢——确实是解释中的部分帮助我看到了光明。
【解决方案3】:

您可以在一个 compound 表达式中做到这一点,正如您已经注意到的,并且其他人已经评论过。您不能在带有隐含连词(和/或)的表达式中执行此操作,就像您尝试使用 1 &lt; x &lt; 0 一样。您的表达式需要 or 连词,但在这种情况下 Python 的隐含操作是 and

因此,为了得到你想要的,你必须反转你的条件分支并应用德摩根定律:

if not(0 <= x <= 1):
    print('out of range!')

现在你有了隐含的and 操作,并且你得到了你想要的控制流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2016-01-04
    • 2016-04-17
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多