标准
我假设你想要一个通过以下测试的函数div:
from sympy import sympify, simplify, Symbol
def test_div(div):
# check that div behaves as intended for integers
for i in range(-5,5):
for j in range(-5,5):
if j==0: continue
assert i//j == div(sympify(i),sympify(j))
# check that div’s output can be simplified
x = Symbol("x", integer=True)
assert simplify( div(x+1,2) - div(x-1,2) ) == 1
模
您可以使用模运算符实现整数除法,如下所示:
div = lambda x,y: (x-x%y)/y
由于SymPy支持模数算术并且能够简化它,因此该函数通过了上述测试.但是,如果不能进行完全简化,您最终会得到可能不需要的模数表达式.
地板
正如在评论中已经提到的,SymPy提供了一个floor函数,它可以用来获取整数除法(这也是表达式的//运算符的实现方式):
div = lambda x,y: sympy.floor(x/y)
但是,楼层不支持简化,因此无法进行第二次测试.