-- TOC --
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。
>>> 5 % -4
-3
>>> 6 % -4
-2
>>> 7 % -4
-1
>>> 8 % -4
0
>>> 9 % -4
-3
再看一组例子:
>>> 9 % 3
0
>>> -9 % 3
0
>>> -9 % -3
0
>>> 9 % -3
0
都能除尽,结果都是0,不管有无负号。
Python的模运算,不仅可以有负数,还可以有小数:
>>> 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
以上代码对应一个用小数来取模的解释:就是对取模后的结果做除法的捷径。
不能 mod 0,会出现ZeroDivisionError异常。
本文链接:https://cs.pynote.net/sf/python/202206051/
-- EOF --
-- MORE --