标準
我假設你想要一個通過以下測試的函數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)
但是,樓層不支援簡化,是以無法進行第二次測試.