参考资料:
python中取余%
python中的整除 // 中的坑
PYTHON中三种取整函数(// int round)的区别
现象
当Python的取余操作涉及负数时,会产生很神奇的现象:
Python中的取余操作 "%"
经过百度找到[1],得到取余操作为:
def mod(a, n):
return a - n * (a // n)
但是这并不能解释为什么会有两种绝对值,于是又去搜了一下整除操作
Python中的整除操作 "//"
在经过百度找到[2]与[3],得知Python中的几种取整操作:
-
//
向下取整,方向向负无穷 -
int()
去除小数点后部分,方向向零 -
round()
四舍五入取整
对于负数表现为下:
print(-11//2)
print(int(-5.5))
print(round(-5.5))
-6
-5
-6
结论与分析
结论
将%
之前的数称为被取余数,之后的数称为取余数,只考虑除不尽时,则有:
- 取余结果的正负 与 取余数的正负 相同
- 被取余数与取余数符号相同时, 取余结果为一对相反数;
被取余数与取余数符号相反时, 取余结果为另一对相反数 - 以上两对相反数的绝对值之和 为取余数的绝对值
分析
设 , 则有 (向下取整)
性质一:
- 当时,有
- 当时,有
性质二:
- 当a与n同号时,
- 当a与n异号时,
- 当除尽时,有
- 除不尽时,有
取余公式
证明结论一:
- 当时,
- 当时,
证明结论二:
设
分别考虑a与n同号或异号时,均有:
故:
证明结论三:
沿用性质二,设
且有
则有
(除不尽情况下)
如何口算得到结果
有了以上结论,我们就可以口算得到结果:
确定值
- 被取余数与取余数同号,
- 被取余数与取余数异号,
确定符号
有了以上的值,再根据的符号确定正负
一个小例子
- 符号相同时,
符号相反时, - 判符号,得