2013-05-14 122 views
2

這是從我的家庭作業我該如何解決我的Python數獨解決者錯誤?


你好。我不得不做一個python數獨求解器,這就是我想出的。

http://pastebin.com/JRKaqSed(包括我的輸入和輸出我得到的)

然而,當我運行它,首先填入調用導致下面的錯誤。它似乎同時添加1到2個單元格。

0 5 9 0 0 0 4 8 3 #Current row being tested 
To Add, 1 #Number to add 
0 5 #Row, Column 
0 5 9 0 1 1 4 8 3 #Row it outputs 

我不明白爲什麼它這樣做。任何幫助將不勝感激。

謝謝

編輯:

我發現的bug。我只是在每行的開始處生成rowSet,因此它不知道是否已經使用了一個數字。

然而,我的代碼還沒有完成的數獨電網

+0

'pdb'是你的朋友 – shx2 2013-05-14 12:57:19

+0

我發現了這個錯誤。但是,我的代碼沒有達到完成的網格:/ – AceFire6 2013-05-14 13:15:33

+0

您應該將解決方案發布到您的問題,以作爲未來用戶的答案。 – KronoS 2013-05-14 14:26:58

回答

3

我不能複製你的錯誤,但有一個與你在數獨電網如何讀的問題。

0 5 9 0 0 0 4 8 3 
0 0 0 0 0 0 0 1 2 
0 1 0 0 2 8 0 0 0 
0 9 8 0 7 4 0 2 0 
0 4 0 0 8 0 0 3 0 
0 7 0 6 3 0 5 4 0 
0 0 0 1 6 0 0 5 0 
6 2 0 0 0 0 0 0 0 
7 3 5 0 0 0 8 6 0 

在這個文件中讀取你的方式:

fi = open("sudoku.txt", "r") 
inFile = fi.read() 
grid = [list(i) for i in inFile.split("\n")] 

這將創建一個網格,是列表的列表,而不是你所期望的一個。例如,這裏的第一行:

['0', ' ', '5', ' ', '9', ' ', '0', ' ', '0', ' ', '0', ' ', '4', ' ', '8', ' ', '3']

而不是把文件讀入一個字符串和換行符拆分它,你可以通過打開的文件對象循環和分裂分割每行的空間。

fi = open("sudoku.txt", "r") 
grid = [] 
for line in fi: 
    grid.append([int(i) for i in line.split(" ")]) 

所以我覺得你的問題涉及到的空間仍然存在於你的網格,因爲解決這個(和其他問題有關oldGrid的地方),它解決了數獨後。

+0

對不起,我給了不正確的輸入。我實際使用的輸入是非空格分隔的版本。 另外:我已經找到了這個錯誤,但是你的迴應。 我也已將pastebin更新到正確的輸入 http://pastebin.com/JRKaqSed – AceFire6 2013-05-14 13:28:34

+0

@ AceFire6所以現在它工作嗎?因爲閱讀網格並正確打印是我迄今爲止唯一的問題。很明顯,我沒有驗證解決方案,但它似乎工作正常 – 2013-05-14 13:35:20

+0

不,它沒有完全解決電網問題。它得到這個:pastebin.com/8sgUzXVN然後它停止填充新的網格位置 – AceFire6 2013-05-14 13:42:22

0

我發現了這個錯誤。我只是在每行的開始處生成rowSet,因此它不知道是否已經使用了一個數字,這是造成問題的原因。

以下是更正代碼: http://pastebin.com/JRKaqSed

它仍然無法輸出完全完成的數獨格雖然。

+0

也許你應該考慮嘗試幾個部分解決的數獨謎題作爲一個測試,找出什麼樣的情況下它沒有正確處理。或者考慮爲你認爲檢查某些條件的函數編寫單元測試。 – 2013-05-14 14:36:43