在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
操作的顺序是什么?
答案 0 :(得分:25)
对于第一个示例:*
和%
优先于-
,因此我们首先评估25 * 3 % 4
。 *
和%
从左到右具有相同的优先级和关联性,因此我们从左到右进行评估,从25 * 3
开始。这会产生75
。现在我们评估75 % 4
,产生3
。最后,100 - 3
是97
。
答案 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)
这是怎么回事:
'*'和'%'具有相同的优先级,因此从左到右评估它们。
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)