迭代数独子网格以检查特定值

2024-10-05 17:42:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,给定一个数独板、行、列和值,它遍历该行和列所属的子网格,并检查值是否在该子网格中。我已经做了一个函数来标识行和列所属的子网格。我一直在使用这个函数来检查值是否在子网格中。 例如:

check_subgrid(       (3, 9, 1), (2, 3, 5, 8, 6), (6, 1, 4),
                     (8, 7, 6), (1, 2, 7, 8),    (9, 8, 2),
                     (2, 8, 5), (6, 9, 2, 3, 1), (5, 9, 3)
                     ), 0, 1, 9)

这应该迭代:(3,9,1)、(8,7,6)和(2,8,5)。输出应该返回True,因为子网格中有9,否则返回False。 到目前为止,我掌握的代码如下:

def check_subgrid(sudoku, row, column, value)
    x_origin, y_origin = get_subgrid_origin(row, column)
        for x in str(x_origin):
            for y in str(y_origin):
                for i in range(3):
                 #here I should iterate through every subgrid row looking for the value entered.

我希望我能自我解释,如果你有任何疑问,请尽管问


Tags: 函数intrue网格forvaluecheckcolumn
1条回答
网友
1楼 · 发布于 2024-10-05 17:42:21

[评论太长]

如果代码和数据结构再多一点,就更容易理解到目前为止的情况。通常(但绝对不总是),数独板被设置为行列表,每个行都是数字列表,零表示空格:

puzzle = [[1,0,7,0,0,5,4,0,0],
        [9,0,0,3,7,0,0,0,0],
        [0,2,3,0,8,0,0,0,0],
        [0,9,2,0,0,0,0,7,0],
        [0,7,0,0,6,0,0,1,0],
        [0,6,0,0,0,0,8,9,0],
        [0,0,0,0,4,0,3,6,0],
        [0,0,0,0,3,7,0,0,1],
        [0,0,8,2,0,0,5,0,7]]

这使您能够找到网格上的所有内容,目前我认为您无法做到这一点-您没有正确记录网格中条目的位置(因为您没有记录空格)。如果这不是您存储数据的方式,或者即使是这样,您也应该解释一下

在示例代码中,您有一个奇怪的for x in str(x_origin):,它通过x_origin的文本表示的字符迭代x。这似乎是完全错误的;更有可能的是,您需要类似for x in range(x_origin,x_origin+3)的东西

相关问题 更多 >