我的Python代码在运行时以及在逐步调试时会返回不同的答案

时间:2012-10-14 22:50:36

标签: python debugging bignum


我尝试在 Python2.7 上编写一些代码,它们可以使用线性列表实现bignum算法。我知道,这在Python中没用,但这是我在拼贴中的作业。我写了一些工作代码,但问题在于分割。我确信这个功能有效,但是当我运行代码来测试它时,我得到了错误的答案(在某些情况下)。但是如果我一步一步地执行代码,它就可以正常工作。

我正在使用linux,但是我在朋友的Windows计算机上测试了我的代码,我遇到了同样的问题。我在 Eclipse中使用PyDev 编写代码,如果它是重要的。

我在Ideone上的代码:Code

如果控制台输出中的行相同 - 输出正确。在Ideone输出上也是错误的。但是如果你在第383行放置断点然后进入 _simple_div 方法,那么答案就是正确的

我希望你帮我找到理由。
附:对不起丑陋的代码。

1 个答案:

答案 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

我不确定为什么当你一步一步地做这件事时这对你有用,但我对它的工作有点惊讶。