【发布时间】:2019-09-06 10:48:14
【问题描述】:
我正在尝试编写一个函数 DoneOrNot 传递一个板 (list[list_lines]) 作为参数.如果板子有效返回'完成!',否则返回'再试一次!'
我首先编写了两个从板上提取行和列的函数,然后我继续检查行和列是否有效(我检查每个行和列是否具有从 1 到 9 的所有数字):
def done_or_not(board):
rows = getrows(board)
cols = getrows(board)
for k in cols:
for l in range(1,10):
if l not in k:
return 'Try again!'
else:
return 'Finished!'
for i in rows:
for j in range(1,10):
if j not in i:
return 'Try again!'
else:
return 'Finished!'
def getrows(board):
rows = [board[i] for i in range(len(board))]
return rows
def getcols(board):
columns = [[],[],[],[],[],[],[],[],[]]
for i in range(9):
for j in range(9):
columns[i].append(board[j][i])
return columns
当我尝试使用以下代码时,我不明白为什么这段代码不起作用:
a = [[1, 3, 2, 5, 7, 9, 4, 6, 8]
,[4, 9, 8, 2, 6, 1, 3, 7, 5]
,[7, 5, 6, 3, 8, 4, 2, 1, 9]
,[6, 4, 3, 1, 5, 8, 7, 9, 2]
,[5, 2, 1, 7, 9, 3, 8, 4, 6]
,[9, 8, 7, 4, 2, 6, 5, 3, 1]
,[2, 1, 4, 9, 3, 5, 6, 8, 7]
,[3, 6, 5, 8, 1, 7, 9, 2, 4]
,[8, 7, 9, 6, 4, 2, 1, 3, 5]]
似乎没有执行循环,但是当我仅使用其中一个循环(用于列的循环或用于行的循环)尝试它时,它可以工作!
【问题讨论】:
-
可能
cols = getrows(board)应该是cols = getcols(board)。 -
顺便说一句,我建议你使用numpy包:
board = numpy.array(board),这样会更容易提取一行:board[0, :]一个列:board[:, 0],甚至一个块:@ 987654328@。更好的是,您可以使用board[:3, :3].reshape(9)将块转换为一维,这意味着所有三行、列和块都表示为与标准一维数组相同,因此您只需要编写一个函数来检查它是否有 9 个不同数字都在 1 到 9 之间
标签: python python-3.x list loops