2012-10-14 25 views
1

我嘗試寫一些代碼對Python2.7,這將能夠實現BIGNUM算法,使用線性名單。我知道,這在Python中是無用的,但這是我拼貼作業。我寫了一些工作的代碼,但問題在劃分。我敢肯定,該功能的作品,但是當我運行代碼來測試它,我只是得到錯誤的答案(在某些情況下)。但是,如果我一步一步地執行代碼,它就能正常工作。我的Python代碼返回不同的答案,它運行時,當它是在一步一步的調試

我使用linux,但我測試了我朋友的windows電腦上的代碼,並且遇到了同樣的問題。我在Eclipse中用PyDev寫了代碼,如果是問題。

我對Ideone代碼:Code

如果控制檯輸出線都是一樣的 - 輸出是正確的。 Ideone輸出也不正確。但是,如果你在383行上放置斷點,然後在_simple_div方法中,答案將是正確的

我希望你能幫我找到一個原因。
P.S.對不起,難看的代碼。

+1

你應該檢查http://codereview.stackexchange.com/ – root

+0

好吧,如果它會幫助 – Pycz

+0

這段代碼太長了,試着給出一個[Short,Self Contained,Correct(Compilable),Example](http: //srcce.org/):) –

回答

0

如果我運行代碼,我得到

~/coding:$ python divbug2.py 
1-1 
10 

-1看起來不正確的。是否有插入某個地方的-1?嘗試的第一件事是在功能,這給

 i-=1 
     res._addFirst(i) 
     if i==-1: i=0 

搜索-1 ..而且看起來很奇怪,因爲如果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 

我不知道爲什麼這是工作的你當你一步一步地做,但我有點驚訝它的工作。

+0

謝謝!我粘貼'如果我== - 1:我= 0' 但它是一個黑客,嗯,我是盲人,我把它粘貼在錯誤的地方!非常感謝!我會做一個真正的複製方法。 – Pycz

相關問題