问题描述
我一直在从事一项任务,其中的任务是验证一个已经完成的数独难题,并查看它是否正确完成。我已经能够定义函数,并且能够将代码分段到不同的段以允许代码正确地流动。我检查了行,列和子矩阵的正方形。 Sudoku拼图是通过一个文本文件提供的,该文本文件在运行程序时可以读取。当我运行程序时,唯一显示的是Sudoku板。我该怎么做才能证明难题是 有效吗?
def main():
fl =('sudoku board.txt')
grids =(is_puzzle(fl))
def is_Puzzle(fl):
with open(fl,'r') as files:
grids = []
lines = files.readlines()
for line in lines:
board = line.split()
wholenums = [int(items) for items in board]
print (wholenums)
grids.append(wholenums)
return grids
def is_puzzle(fl):
if check_rows(fl) and check_columns(fl) and check_squares(fl):
return True
else:
return False
def compare_all(fl):
compare = [1,2,3,4,5,6,7,8,9]
return sorted(lst) `== compare
def check_rows(fl):
for i in grids:
if not grids.compare_all(i):
return False
return True
def check_columns(fl):
for i in range(len(fl)):
contain = []
for j in range(len(fl[0])):
contain.append(fl[j][i])
if not grids.compare_all(hold):
return False
def check_squares(fl):
for i in range(0,9,3):
for j in range(0,3):
nums = fl[i][j:j+3]+fl[i+1][j:j+3]+fl[i+2][j:j+3]
if not grids.compare_all(nums):
return False
return True
main()
解决方法
这是您的代码固定,并按预期执行。除了进行一些调整之外,您还必须检查is_puzzle()函数的返回值。
def main():
fl = 'sudoku board.txt'
grids = (is_Puzzle(fl))
print()
if is_puzzle(grids):
print('The sudoku is correct!')
else:
print('The sudoku is wrong...')
def is_Puzzle(fl):
with open(fl,'r') as files:
grids = []
lines = files.readlines()
for line in lines:
board = line.split()
wholenums = [int(items) for items in board]
print(wholenums)
grids.append(wholenums)
return grids
def is_puzzle(fl):
if check_rows(fl) and check_columns(fl) and check_squares(fl):
return True
else:
return False
def compare_all(fl):
compare = [1,2,3,4,5,6,7,8,9]
return sorted(fl) == compare
def check_rows(fl):
for i in fl:
if not compare_all(i):
return False
return True
def check_columns(fl):
for i in range(len(fl)):
contain = []
for j in range(len(fl[0])):
contain.append(fl[j][i])
if not compare_all(contain):
return False
return True
def check_squares(fl):
for i in range(0,9,3):
for j in range(0,3):
nums = fl[i][j:j + 3] + fl[i + 1][j:j + 3] + fl[i + 2][j:j + 3]
if not compare_all(nums):
return False
return True
main()