2013-05-14 119 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