Python中的取模与运算顺序

8 投票
8 回答
27779 浏览
提问于 2025-04-16 10:12

在Zed Shaw的《艰难的Python学习》(第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 个回答

2

我找到了你第二个问题的答案,因为我也觉得这个问题很烦人——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
3

乘法 >> 取模 >> 减法

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

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

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

乘法和取模运算的优先级是一样的,所以在这个例子中,你要从左到右进行计算。

32

在第一个例子中,*% 的优先级比 - 高,所以我们先计算 25 * 3 % 4*% 的优先级是一样的,而且都是从左到右计算,所以我们从左边开始计算,先算 25 * 3,结果是 75。接下来我们计算 75 % 4,结果是 3。最后,100 - 3 的结果是 97

撰写回答