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]
    ,因为第一个列表索引已经是行了
要检查3x3组的第三个条件是否有效,首先需要确定单元格所属的“框”,然后检查其中的所有数字:

#获取块的第一行/列索引
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)