我想知道是否有一种简单的方法可以在有限的数字空间(例如0和40或0和1000)中计算数字方程?如果有办法让数字返回就更好了。例如,有一个介于 0 和 8 之间的数字空间。然后执行运算 4 + 7,这将等于 11(超过 8),然后该数字将返回到 5,因为 4 + 4 将是 8 并且因为仍然有3(7 - 4 = 3) 的余数等于 8 - 3,即 5。反之亦然,减法在 0 到 8 的数字空间中 3 - 4 等于 1。
我尝试做一堆 if,但停止了,因为它使代码有点复杂。
它是周期性的,周期是您空间大小的两倍。例如,对于从 0 到 8 的空格,添加 16 或 32 或 48 等不会产生任何效果。因此使用两倍大小的模。那么你最多会从墙上撞上一个,我用
min
处理了它。为了支持非零下端,请通过将下端移至零并返回来围绕实际计算。
def add(a, b, lo, hi):
m = 2 * (hi-lo)
s = (a-lo+b) % m
return min(s, m-s) + lo
def sub(a, b, lo, hi):
return add(a, -b, lo, hi)
print(add(4, 7, 0, 8))
print(sub(3, 4, 0, 8))
输出(在线尝试!):
5
1