2017-05-05 62 views
-4

IDLE:我乘以0而不是0 !!!! Python的

>>> n = 4 
>>> m = 1 
>>> n//2*m//2 
1 
>>> n//2 
2 
>>> m//2 
0 

任何人能解释这是怎么回事!?上

+0

乘法和除法具有相同的优先级:https://docs.python.org/3/reference/expressions.html#operator-precedence – Tryph

+0

什么约2 * m // 2'? –

+0

double //是floor师。 4 // 2等于4/2,因为它是没有休息的分割。 1 // 2不等于1/2,看到我的回答在 – EvilSmurf

回答

6

操作顺序。乘法和除法从左到右;它并不是先做所有的划分,然后再进行乘法。所以,你的表达扩展这样的:

n//2*m//2 = ((n//2)*m)//2 = ((4//2)*1)//2= (2*1)//2 = 2//2 = 1 

如果你想利用n//2m//2乘它,你必须要加上括号这样的说法:

>>> n=4 
>>> m=1 
>>> (n//2)*(m//2) 
#=> 0 
+0

以下这不是我相信的问题,看到我的回答在 – EvilSmurf

+0

以下完美谢谢。模数也被当作分割操作吗? –

+0

是的。 Python遵循中缀操作的通常代数顺序,并且模数与乘法和除法运算符的优先级相同。请参阅[本表](https://docs.python.org/3/reference/expressions.html#operator-summary)。 –

0

在Python中,乘法和除法携带相同重量,因此从左到右计算。作为一个结果,这是Python的读取您的公式:

((4//2)*1)//2) = ((2)*1)//2) = ((2)//2) = 1