负数取余数,-13%5,返回了2,为什么?余数应当是 -3 才对吧?

问题遇到的现象和发生背景

我在练习Python算术运算符的时候,发现 -13%5,返回了2

问题相关代码,请勿粘贴截图

13%5
3
-13%5
2

运行结果及报错内容

我的解答思路和尝试过的方法

我觉得余数应当是 -3 才对呀

我想要达到的结果

-13%5 应该是 -3 吧。

img

pyhton的%是取模

取余计算中除数和余数符号相同

关于算术运算符  % 取模 - 返回除法的余数,我是这样理解的:
a % b :
当余数非负时:输出正常余数。
当余数为负数时:输出   正常余数+b。
例如:-13%5
余数-3   +5     =2
print(-13 % 5) # 输出结果:2
我测试的结果如下:
print(-11 % 10) # 9
print(-12 % 10) # 8
print(-13 % 10) # 7
print(-14 % 10) # 6
print(-15 % 10) # 5
print(-16 % 10) # 4
print(-17 % 10) # 3
print(-18 % 10) # 2
print(-19 % 10) # 1

print(-13 % 5) # 2
print(-9 % 5) # 1
print(-11 % 5) # 4

我用C语言实现的:-13%5 = -3

img

数学里余数是不为负的,不然余数就不唯一了,按照余数的定义可以把-13看做(-15+2),可以得出:

-13/5 = (-15+2)/5 = -3(2)

也可以根据余数的特点,被除数加上n倍的除数,余数不变,同样可以得出:

-13%5 = (-13+3*5)%5 = 2

当然C语言里好像余数是带符号的,Python中是按照余数的数学特性运算的。

记住公式:
a % b = a - (a // b) * b

pyhton的%是取模

看了大家的说明,我有点思路了:
pyhton的%是取模,不仅仅是简单的取余数,
a%b
余数是正数时,结果:就是余数
余数是负数时,结果:就是余数+b
13%5=3
-13%5=-3+5=2