Python 我怎样才能使这个三重数独循环工作
我在这个算法上遇到了一些问题。我只能获取一个子网格。我在这里只包含了子网格部分,因为我自己做了检查行和检查列。如何连接此代码以捕获其余代码?非常感谢你的帮助。谢谢Python 我怎样才能使这个三重数独循环工作,python,python-3.x,Python,Python 3.x,我在这个算法上遇到了一些问题。我只能获取一个子网格。我在这里只包含了子网格部分,因为我自己做了检查行和检查列。如何连接此代码以捕获其余代码?非常感谢你的帮助。谢谢 class Sudoku_Checker: def __init__(self,board): self.board = board def board_validater(self,board): self.checkSquares(board) return self.checkSquares
class Sudoku_Checker:
def __init__(self,board):
self.board = board
def board_validater(self,board):
self.checkSquares(board)
return self.checkSquares(board) == True
def checkSquares(self,board):
compare = [1,2,3,4,5,6,7,8,9]
hold = []
row = 0
column = 0
square = 0
for p in range(square, square+3):
for i in range(row, row + 3):
for j in range(column, column + 3):
hold.append(board[i][j])
if len(hold)==9:
if sorted(hold) == compare:
hold =[]
continue
else:
return False
square +=3
row += 3
return True
board = [ [5, 3, 4, 6, 7, 8, 9, 1, 2],
[6, 7, 2, 1, 9, 5, 3, 4, 8],
[1, 9, 8, 3, 4, 2, 5, 6, 0],
[8, 5, 9, 7, 6, 1, 4, 2, 3],
[4, 2, 6, 8, 5, 3, 7, 9, 1],
[7, 1, 3, 9, 2, 4, 8, 5, 6],
[9, 6, 1, 5, 3, 7, 2, 8, 4],
[2, 8, 7, 4, 1, 9, 6, 3, 5],
[3, 4, 5, 2, 8, 6, 1, 7, 9]]
s = Sudoku_Checker(board)
s.board_validater(board)
因此,在我的例子中,使用
行
和列
变量,我得到eaxh 3x3矩阵的左上角,然后从那里迭代来构造正方形
请让我知道这是否是你要找的
board = [
[5, 3, 4, 6, 7, 8, 9, 1, 2],
[6, 7, 2, 1, 9, 5, 3, 4, 8],
[1, 9, 8, 3, 4, 2, 5, 6, 0],
[8, 5, 9, 7, 6, 1, 4, 2, 3],
[4, 2, 6, 8, 5, 3, 7, 9, 1],
[7, 1, 3, 9, 2, 4, 8, 5, 6],
[9, 6, 1, 5, 3, 7, 2, 8, 4],
[2, 8, 7, 4, 1, 9, 6, 3, 5],
[3, 4, 5, 2, 8, 6, 1, 7, 9]
]
for line in range(0, 9, 3):
for column in range(0, 9, 3):
square = [[board[l][c] for c in range(column, column + 3)] for l in range(line, line + 3)]
print(square)
结果:
[[5, 3, 4], [6, 7, 2], [1, 9, 8]]
[[6, 7, 8], [1, 9, 5], [3, 4, 2]]
[[9, 1, 2], [3, 4, 8], [5, 6, 0]]
[[8, 5, 9], [4, 2, 6], [7, 1, 3]]
[[7, 6, 1], [8, 5, 3], [9, 2, 4]]
[[4, 2, 3], [7, 9, 1], [8, 5, 6]]
[[9, 6, 1], [2, 8, 7], [3, 4, 5]]
[[5, 3, 7], [4, 1, 9], [2, 8, 6]]
[[2, 8, 4], [6, 3, 5], [1, 7, 9]]
希望有人觉得这很有用。我更喜欢这个实现,因为它对我来说更可读、更容易理解。另一个评论者也有一个很好的解决方案,除了列表理解太复杂
class Sudoku_Checker:
def __init__(self,board):
self.board = board
def board_validater(self,board):
return self.checkSquares(board) == True
def checkSquares(self,board):
compare = range(1,10)
for i in range(0, 9, 3):
for j in range(0, 9, 3):
nums = board[i][j:j+3] + board[i+1][j:j+3] + board[i+2][j:j+3]
if sorted(nums) == compare:
continue
else:
return False
return True
board = [ [5, 3, 4, 6, 7, 8, 9, 1, 2],
[6, 7, 2, 1, 9, 5, 3, 4, 8],
[1, 9, 8, 3, 4, 2, 5, 6, 0],
[8, 5, 9, 7, 6, 1, 4, 2, 3],
[4, 2, 6, 8, 5, 3, 7, 9, 1],
[7, 1, 3, 9, 2, 4, 8, 5, 6],
[9, 6, 1, 5, 3, 7, 2, 8, 4],
[2, 8, 7, 4, 1, 9, 6, 3, 5],
[3, 4, 5, 2, 8, 6, 1, 7, 9]]
s = Sudoku_Checker(board)
s.board_validater(board)
不清楚你的问题是什么,或者你遇到了什么问题。请添加更多信息和完整的代码示例。按当前状态运行此代码会生成异常:
AttributeError:“数独棋盘”对象没有属性“checkRows”
请更详细地解释您的算法应该做什么,这和它的实际功能有什么不同。所以你实际上想从你的数独板上得到每个3x3矩阵,然后检查是否正确。我说的对吗?^人们不应该这样猜测。对不起,搞混了。我刚刚删除了checkrows和check columns的返回。现在我正在尝试解决checkSquares()方法。是的,我想得到每3X3,但我的代码只抓取第一个方块。从1到9,每个字符都必须是唯一的。现在,只有2个内部for循环按照我的要求工作。我在其他8个子网格中添加了第三个。刚才选择了这个作为正确答案。非常感谢。