我尝试在 Python2.7 上编写一些代码,它们可以使用线性列表实现bignum算法。我知道,这在Python中没用,但这是我在拼贴中的作业。我写了一些工作代码,但问题在于分割。我确信这个功能有效,但是当我运行代码来测试它时,我得到了错误的答案(在某些情况下)。但是如果我一步一步地执行代码,它就可以正常工作。
我正在使用linux,但是我在朋友的Windows计算机上测试了我的代码,我遇到了同样的问题。我在 Eclipse中使用PyDev 编写代码,如果它是重要的。
我在Ideone上的代码:Code
如果控制台输出中的行相同 - 输出正确。在Ideone输出上也是错误的。但是如果你在第383行放置断点然后进入 _simple_div 方法,那么答案就是正确的
我希望你帮我找到理由。
附:对不起丑陋的代码。
答案 0 :(得分:0)
如果我运行你的代码,我会
~/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
我不确定为什么当你一步一步地做这件事时这对你有用,但我对它的工作有点惊讶。