Python中的模数和操作顺序

时间:2011-01-18 21:08:08

标签: python modulo operator-precedence

在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

操作的顺序是什么?

8 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:2)

乘法>> mod>>减法

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

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

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

乘法和模运算符具有相同的优先级,因此您可以从左到右计算此示例。

答案 2 :(得分:2)

我找到了你的第二个问题的答案,因为它也让我烦恼 - 扎克的反应很接近,但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

答案 3 :(得分:0)

这是怎么回事:

'*'和'%'具有相同的优先级,因此从左到右评估它们。

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

答案 4 :(得分:0)

原始问题:100 - 25 * 3 % 4

实际上,评估25 * 3并占用4%的75%是不正确的,并且碰巧很方便地解决了这个问题。

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

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

答案 5 :(得分:0)

在第二个示例中,%与*具有相同的顺序,因此我们得到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这就是我在控制台上尝试时所说的内容,所以无论你做了什么,你都必须做到圆形的东西。

答案 6 :(得分:0)

数学并不是我的强项,所以是的,这个问题也让我了解了一会儿。但希望你觉得这很有用。

75除以4是18.75

18乘以4是72(剩下3来自75)

给出的计算是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

我认为你必须将modulo(%)视为一个分区,

答案 7 :(得分:0)

Python在*之后但在+或_之前评估%。

所以,

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