我的 Python 代码在运行时和分步调试时返回不同的答案



我尝试在 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

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

最新更新