python模运算%详解

2019年10月20日 / 134次阅读 / Last Modified 2020年7月13日
数值计算

python使用%符号来表示模运算。

用一个自定义的函数来表示%的计算过程,如下,本文下面所有在python shell中的计算,都可以用这个自定义的函数来验证:

>>> def mod(x,y):
...     return x-y*(x//y)  # // means round floor, y != 0. 

-------------------程序员的分割线-----------------------

模运算跟求余数不太一样,模运算包含了求余数,同时在数学上,模运算的概念是大于求余数的。

>>> 7 % 3
1
>>> 8 % 3
2
>>> 9 % 3
0
>>> 9 % 30
9

这几个运算,是模运算,也是在求余数。求余数这个概念,是需要在除数与被除数都为正数的前提下,才能成立的,如果有负数,求余这个概念会失去实际意义,我们这个时候就要说成是模运算了。

>>> 7 % 4
3
>>> 7 % -4
-1
>>> -7 % -4
-3
>>> -7 % 4
1

以上这几个模运算的式子,只有第1个与求余相同,也很好理解,其它结构可能都有些费解。模运算的结果,一定在0到模数之间,比如模式-4,结果就一定是0,-1,-2,-3。下图是我以前在云上小悟画的,在这里重新贴一下:

有负数的模运算
有负数的模运算

以上图片中,第2个计算是错误的,因为模-4,不能得到3这个结果,第3个计算是对第2个计算的修正。我们再看一组例子:

>>> 9 % 3
0
>>> -9 % 3
0
>>> -9 % -3
0
>>> 9 % -3
0

都能除尽,结果都是0,不管有无负号。

模运算,可以有小数的哦:

>>> 8 % 4
0
>>> 8 % 3.9
0.20000000000000018
>>> 8 % -3.9
-3.6999999999999997

-------------------程序员的分割线-----------------------

为什么可以用小数来做模运算?(个人理解)

>>> 8%3.9
0.20000000000000018
>>> (80%39)/10
0.2
>>>
>>> 8%-3.9
-3.6999999999999997
>>> (80%-39)/10
-3.7

以上代码对应一个用小数来取模的解释:就是对取模后的结果做除法的捷径。

-- EOF --

本文链接:https://www.pynote.net/archives/1365

留言区

《python模运算%详解》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    不能 mod 0,会出现ZeroDivisionError异常。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top