我尝试在 Python2.7 上编写一些代码,它将能够使用线性列表实现 bignum 算术。我知道,这在Python中是没有用的,但这是我在拼贴中的功课。我写了一些工作代码,但问题在于划分。我确定该函数有效,但是当我运行代码进行测试时,我只是得到错误的答案(在某些情况下)。但是如果我逐步执行代码,它可以正常工作。
我使用的是 linux,但我在朋友的 Windows 计算机上测试了我的代码,我遇到了同样的问题。我用 PyDev 在 Eclipse 中编写代码,如果它很重要的话。
我在 Ideone 上的代码:代码
如果控制台输出中的行相同 - 输出正确。在 Ideone 上输出也不正确。但是,如果您在第 383 行放置断点,然后进入_simple_div方法,答案将是正确的
我希望你能帮助我找到一个原因。
附言对不起,丑陋的代码。
如果我运行你的代码,我会得到
~/coding:$ python divbug2.py
1-1
10
那个-1
看起来不对劲。 是否有-1
入分区的某个地方? 首先要尝试的是在该函数中搜索-1
,这给出了
i-=1
res._addFirst(i)
if i==-1: i=0
..这看起来很奇怪,因为如果i == -1
,那么你刚刚将其添加到res
。 也许我们应该先检查一下,即
i-=1
if i==-1: i=0
res._addFirst(i)
交换这两行会产生
~/coding:$ python divbug2.py
10
10
然后 - 在编写了一个真正的.copy()
方法之后,因为copy.deepcopy
真的很慢,甚至使用 PyPy,我也很无聊地等待事情完成:
>>>> all(int(str(LongNum(x)._simple_div(LongNum(y)))) == x/y for x in range(2000) for y in range(1, 2000))
True
我不确定为什么当你一步一步地做时这对你有用,但我有点惊讶它真的有效。