Python 数独检查术语
我需要检查用户插入的数字是否已经在列、行或“块”(仍在处理最后一部分)中。 由于某种原因,这些支票不起作用,我不明白为什么?Python 数独检查术语,python,sudoku,Python,Sudoku,我需要检查用户插入的数字是否已经在列、行或“块”(仍在处理最后一部分)中。 由于某种原因,这些支票不起作用,我不明白为什么? 我在shell中编写了相同的代码,它运行得很好 我的代码: def is_valid_move(board,row, column, digit): if digit in board[row]: print "Row already contains", digit return (False) else:
我在shell中编写了相同的代码,它运行得很好 我的代码:
def is_valid_move(board,row, column, digit):
if digit in board[row]:
print "Row already contains", digit
return (False)
else:
return (True)
for i in range(9):
if digit in board[i][row]:
print "Colum already contains", digit
return (False)
break
else:
return (True)
board = [[3,7,0,0,5,0,0,0,0],
[0,6,0,0,3,0,2,0,0],
[0,2,9,4,0,0,0,7,8],
[0,0,4,1,7,0,0,8,0],
[0,0,6,3,0,5,9,0,0],
[0,5,0,0,8,4,1,0,0],
[7,1,0,0,0,8,5,6,0],
[0,0,5,0,1,0,0,2,0],
[0,0,0,0,9,0,0,1,3]]
a=is_valid_move(board,1, 2, 9)
print a
我得到的输出:
True
你知道如何检查这个号码是否已经在盒子里了吗
谢谢 问题是,一旦发现任何未失败的检查,就返回true。因此,如果您有一个有效的行,那么您的检查已经成功了,尽管该列可能已被相同的数字填满 因此,基本上,删除所有
return True
行,并在所有检查结束后在最后放一行
还有几件事:
- 在报税表中,不要在
或True
周围加括号False
- 您不需要在
之后return
,因为后者已经结束了函数break
以一位数字计算,因此在中使用board[i][row]
数字进行检查将无法正常工作
应该是board[i][row]
,因为第一个列表索引已经是行了board[i][column]
#获取块的第一行/列索引
blockRow=行//3*3
blockColumn=列//3*3
#检查块中的所有8个字段
对于范围内的r(块行,块行+3):
对于范围内的c(块列,块列+3):
#跳过要检查的字段
如果r==行,c==列:
持续
如果数字==电路板[r][c]:
返回错误
如果您想为用户创建一个数独游戏,请使用以下提示,以镜像模式(对不起,我的英语)为例删除数字
(1 3 4)
什么不起作用?我看到您的for循环永远不会执行。python print True,我猜它是之前对其他内容的一些检查的结果。无论如何,它只是打印“True”,请不要在以后将代码更改为固定代码,因为这将基本上使答案无用(因为它们指的是原始代码)。tnx!这有帮助,但只是第一个学期。现在第二项给出一个错误。“if digit in board[i][row]:TypeError:type'int'的参数不可编辑”
board[i][row]
是一个单一的数字,因此您不能检查digit in single\u numer
但需要检查是否相等:digit==board[i][row]
。我认为blockRow=row
应该是blockRow=row-(row%3)
。blockColumn
@MohamedA的情况也一样。语法高亮显示不正确,//3*3
部分就是它的一部分。这是一个整数除法,然后乘以3。基本上和你的模运算符相同。好吧,对不起,我忘了是python代码,我想//3*3
是一个注释:)什么?我正在寻找解决方案,如何检查数字是否已经在框中
(7 _ 5 6)