【问题标题】:Python adding boolean and integers abstractionPython添加布尔和整数抽象
【发布时间】:2019-01-16 13:58:06
【问题描述】:

基本上,我不确定为什么:

red, green = 44, 43
purple = red + green
print(red + green != purple + purple / purple - red % green)
// Returns False
// Essentially => red + green != purple + 0.0

print(red + True + 0.0) // Returns 45.0

我不确定是什么导致了这种差异?由于 green != Purple 也给出了 True 的结果,那么为什么抽象会导致值的差异?

【问题讨论】:

  • 您是否考虑过根据运算符优先级评估表达式?另外,您对这两种情况的预期结果是什么?
  • 其实我一开始预计会出现语法错误,但我错了。然而这种情况让我更加困惑
  • 试图保存几个括号通常是个坏主意。

标签: python int boolean


【解决方案1】:

您弄错了operator precedence 规则。本质上,表达式的求值方式如下:

red + green != purple + purple / purple - red % green
 = 44 + 43 != 87 + 87 / 87 - 44 % 43   # substitution
 = 87 != 87 + 1 - 1                    # perform / and % first
 = 87 != 87                            # sum
 = False                               # not equal

至于第二个,red + True + 0.0True 被提升为1,和返回45,然后添加0.0 将 int 提升为浮点数。

【讨论】:

  • 啊,我明白了,我以为应该是 44 + True + 1 - 1 实际上这就是原因
【解决方案2】:

代码似乎按预期工作, 第一次打印是假的,因为左边的表达式 (red + green) 匹配右边的表达式 (purple[red + green] + 0)。

由于您检查了它们是否不同(通过在两个表达式之间使用 !=),您得到了 False。

我认为您混淆了 python 检查条件的方式。 当你使用比较操作数时,python会先计算操作数的两边,然后比较两边。

您写了“As green != Purple 也给出了 True 的结果”,但实际的比较是“(red + green) != Purple”。

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2013-02-01
    相关资源
    最近更新 更多