如何修复我的Python数独求解器错误?

时间:2013-05-14 12:53:03

标签: python debugging sudoku

这来自我的家庭作业


您好。我不得不制作一个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

我无法弄清楚为什么这样做。任何帮助将不胜感激。

谢谢

编辑:

我发现了这个错误。我只是在每行的开头生成rowSet,因此它不知道是否已经使用了一个数字。

但是,我的代码仍未完成数独网格

2 个答案:

答案 0 :(得分:3)

我无法复制你得到的错误,但你在sudoku网格中的阅读方式存在问题。

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的另一个问题)后,它解决了数独。

答案 1 :(得分:0)

我发现了这个错误。我只是在每行的开头生成rowSet,因此它不知道是否已经使用了一个数字,这导致了问题。

以下是更正后的代码: http://pastebin.com/JRKaqSed

但它仍然没有输出完全完成的数独网格。