【问题标题】:Modulo and order of operation in PythonPython中的模数和运算顺序
【发布时间】:2011-06-11 08:53:55
【问题描述】:

在 Zed Shaw 的 Learn Python the Hard Way(第 15-16 页)中,他有一个示例练习

 100 - 25 * 3 % 4

结果是 97(试试看!)

我看不到可以执行此操作的操作顺序..

100 - 25 = 75
3 % 4 = 0
或 (100-25*3) =225 % 4 = ???但无论如何不是 97 我不认为...

一个类似的例子是3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6,它产生 7

这些操作是按什么顺序完成的?

【问题讨论】:

  • 你甚至弄错了乘法和减法,它们使用与基本数学相同的顺序。
  • 他应该解释的。我再次遗憾地得出结论,有更好的 Python 教程。试试“潜入 Python”。
  • wtf, 3%4 == 0?甚至没有意义,3%4 == 3 ...

标签: python modulo operator-precedence


【解决方案1】:

对于第一个示例:*% 优先于 -,因此我们首先评估 25 * 3 % 4*% 从左到右具有相同的优先级和关联性,因此我们从左到右进行评估,从 25 * 3 开始。这产生75。现在我们评估75 % 4,得到3。最后,100 - 397

【讨论】:

  • 多亏了这一切,您的回答和随后的回答都非常有帮助,即使是参考资料,我也最不清楚,整个模数概念有点陌生我..虽然我知道它从未有过用例。(对于模数是..)
  • 标准挂钟是“模 60”,因为一旦达到 59 分钟,再加上 1 分钟,就会得到 0 (== 60)
  • 模只是除法的余数。知道什么时候对我们来说可能很棘手,但这个概念植根于基础数学。
【解决方案2】:

乘法>>模>>减法

In [3]: 25 * 3
Out[3]: 75

In [4]: 75 % 4
Out[4]: 3

In [5]: 100 - 3
Out[5]: 97

乘法和取模运算符具有相同的优先级,因此在本例中从左到右进行计算。

【讨论】:

  • 这不仅仅是首先出现什么的问题。比如2**3**4 == 2**(3**4),因为**的关联性是从右到左的。
【解决方案3】:

我想出了第二个问题的答案,因为它也困扰着我——Zac 的回答很接近,但是 1/4 的结果丢失是因为 Python 2.X 正在截断整数除法结果。所以它首先评估模运算,然后是除法(因为它不是浮点数,所以返回为 0。

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
3 + 2 + 1 - 5 + (0) - (0) + 6 
6 - 5 + 6
1 + 6
7

【讨论】:

    【解决方案4】:

    事情是这样的:

    '*' 和 '%' 优先级相同,所以从左到右依次计算。

    1. 25*3 = 75
    2. 75 % 4 = 3(4*18 = 72;余数为 3)
    3. 100 - 3 = 97

    Q.E.D.

    【讨论】:

    • 并非所有具有相同优先级的东西都从左到右进行评估——例如2**3**4 == 2**(3**4) 从右到左计算。
    【解决方案5】:

    原问题:100 - 25 * 3 % 4

    实际上,评估25 * 3 并取 4 的 75% 是不正确的,碰巧解决了这个问题。

    python 中的 % 实际上是一个模运算符,其中 x % y 给出了x / y 的余数。在这种情况下,发生的事情是 75 / 4 是 18,余数是 3,这就是 100 - 3 = 97 的原因。

    不要试图乘以百分比,这是一个常见的错误。

    【讨论】:

      【解决方案6】:

      在第二个示例中,% 与 * 具有相同的顺序,因此我们得到 3+2+1-5+4%2-1/4+6= 3+2+1-5+(4%2)-(1/4)+6=1+(4%2)-(1/4)+6 =1+0-(1/4)+6=1-(1/4)+6=0.75+6=6.75 这就是我在控制台上尝试时所说的,所以无论你做什么你都必须做把它弄圆。

      【讨论】:

        【解决方案7】:

        数学不是我的强项,所以是的,这个问题也引起了我的注意。但希望你觉得这很有用。

        75 除以 4 是 18.75

        18 乘以 4 是 72(从 75 中剩下 3)

        给出的计算是 100-25*3%4,答案是 97。现在,正如他在问题部分所说,这就是我使用 PEMDAS 得到它的方法:

        #!/bin/python
        
        A = 100
        B = 25
        C = 3
        D = 4
        E = B*C # 75
        F = E%D # 3
        G = A-F # 97
        print("B * C ="), E
        print("E % D ="), F
        print("A - F ="), G
        

        我认为您必须将模(%)视为除法,

        【讨论】:

          【解决方案8】:

          Python 在 * 之后但在 + 或 _ 之前计算 %。

          所以,

          (100 - 25 * 3 % 4)
          (100 - 75 % 4)
          (100 - 3) 
          (97)
          

          【讨论】:

            猜你喜欢
            • 2015-06-06
            • 2019-08-30
            • 1970-01-01
            • 1970-01-01
            • 2022-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多