Python中是否有任何余数运算符?我不要求模运算符,但余数.例如:
-5 mod 2 = 1
Run Code Online (Sandbox Code Playgroud)
但
-5 rem 2 = -1 # where "rem" is a remainder operator.
Run Code Online (Sandbox Code Playgroud)
我是否必须自己实施;)?
aba*_*ert 21
实际上有三种不同的"模数"或"余数"定义,而不是两种:
称其中一个"模数"和另一个"剩余"是非常令人困惑的; 所有这三个都是这两个术语的有用定义.
几乎每种语言都只提供三种语言中的一种(Fortran是一个值得注意的例外).*大多数语言都提供了与语言的除法运算符相匹配的语言.**因为Python使用了浮动除法(遵循计算机编程艺术中的 Knuth论证),使用匹配的余数运算符.
如果你想要另一个,你必须手动编写它.这不是很难; 这篇维基百科的文章展示了如何实现这三者.
例如:
def trunc_divmod(a, b):
q = a / b
q = -int(-q) if q<0 else int(q)
r = a - b * q
return q, r
Run Code Online (Sandbox Code Playgroud)
现在,举个例子:
>>> q, r = trunc_divmod(-5, 2)
>>> print(q, r)
-2 -1
Run Code Online (Sandbox Code Playgroud)
*通常语言提供两个调用截断的余数的一些变化mod,并在rem... 上的一些变化,但绝对不是可依赖的东西.例如,Fortran调用floored余数modulo,而Scheme调用Euclidean余数mod.
**两个值得注意的例外是C90和C++ 03,它们将选择留给实现.虽然许多实现使用截断的除法和余数,但有些不使用(有些甚至使用截断的除法和平均余数,这意味着a = b * (a/b) + a%b甚至不起作用......).
编辑:当您要求余数运算时,尚不完全清楚您的意思,执行此操作的方法将取决于对输出符号的要求。
如果符号始终为正divmod可以做你想做的事,它在标准库中
http://docs.python.org/2/library/functions.html#divmod
您可能还想看看内置的二元算术运算符:
http://docs.python.org/2/reference/expressions.html
如果余数必须与传递的参数具有相同的符号,那么您必须自己滚动,如下所示:
import math
def rem(x,y):
res = x % y
return math.copysign(res,x)
Run Code Online (Sandbox Code Playgroud)