当前位置: 首页 > 知识库问答 >
问题:

Python数独检查器

何博涛
2023-03-14

我正在用python为我的CIS类做作业。我们得给数独棋盘编码。在9x9电路板中,我们显然必须检查每一行、col和3x3正方形是否存在重复项。我对如何用3x3的正方形来检查数字的想法有点固执。下面是我检查每一行和每一列的代码,如果有人能帮我一点轮廓或一种方法,那就是检查每一个3x3的正方形,这将是惊人的!

self.columns = [ ]
     for col in range(9):
        col_tiles = [ ]
        self.columns.append(col_tiles)
        for row in range(9):
            col_tiles.append(self.tiles[row][col])
self.squares = [ ]
for col in range(1, 10, 3):
        for row in range(1, 10, 3):
            square_tiles = [ ]
            self.squares.append(square_tiles)
            for x in range(3):
                for y in range(3):
                    square_tiles.append(self.tiles[x][y])

共有3个答案

慕容康安
2023-03-14

这是我要做的:创建3个字典,一个用于行,一个用于列,一个用于3x3正方形。

当你循环数独游戏中的每一个元素时,记录你的行和列(无关紧要),并使用if语句记录你所处的3x3正方形(稍微复杂一点)

然后只需将每个元素发送到相应的行、列和3x3方形字典,并在末尾进行比较。

这样你只需要检查每个元素一次。

编辑:另外,set可能会有用

白星海
2023-03-14

每当你想不出一个算法时,只要问问自己:“如果我能得到这个问题的唯一方法是计算机,我该如何手动解决这个问题呢?”。

换句话说,如果我让你检查左上角的3x3网格,你的眼睛就会转到左上角,把数字加起来。但如果我说,检查左上角的3x3网格,而实际上没有给你电路板,你会说,“好的,给我左上角的3x3网格”。

我会说“怎么做?”

你会说,“想象瓷砖是按行和列编号的。我希望瓷砖在点(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1)和(2,2)中。”

这有用吗?

艾奕
2023-03-14

这假设您有自由阅读数据,并按照自己的意愿构建结构。我们需要为每一行/列/3x3网格设置一组唯一值1-9,因此一种方法是使用集或列表比较(我们将在此处使用集以使其更干净)。如果我们创建一个等于1到9之间的数字的集合,我们就有了一个点,可以比较所有其他组。假设这样的结构(从这里开始):

In [1]: r1 = [9,3,2,5,4,8,1,7,6]

In [2]: r2 = [1,8,7,9,2,6,5,4,3]

In [3]: r3 = [5,4,6,3,7,1,2,8,9]

# Continues....

其中每一行代表一整行数据。现在,让我们创建一段代表前三行的数据,拉出一个网格,将内容与我们的集合进行比较:

In [4]: sec1 = [r1, r2, r3]

In [5]: nums = set(range(1, 10))

In [6]: nums == set(n for row in sec1 for n in row[:3])
Out[6]: True

这会遍历前三行并返回每一行中的前三个元素。为了获得更好的视觉效果,这里是-cle代码的等效,以使其更容易破译:

result = set()
for row in sec1:
    for n in row[:3]:
      result.add(n)

因为我们的数据集包含了从1到9的所有内容,所以我们知道它是有效的。为了移动到第二行,我们将行[:3]的范围设置为行[3:6](然后是行[6:9])。接下来的两个部分也需要处理这个问题。我将把它留给你,让你知道如何用一个更动态的结构来包装它(注意三的倍数),但希望这能让你开始:)

 类似资料:
  • 我正在尝试在python中创建一个数独检查器: 我期待这样的输入——一个9个列表的列表。零表示用户尚未填写的数字。它们可以在一行、一列或3x3中多次出现。 我显然需要检查是否有一个9x9列表(网格),以及每行、每列和3x3小正方形中是否没有重复项。在代码中,我首先检查行数是否正确(应该有9行)。然后我检查每一行中是否有9个元素(在病态示例中,您可以看到情况并非如此)。然后我尝试检查每一行中的重复项

  • 我已经用Python为非常简单的数独问题编写了一个数独解算器。它的工作原理是检查每个空方块,如果只有一个可能的数字是合法的,则用该数字替换空方块。一旦它完成了整个拼图,如果仍然有1个以上的空方块,它会再次调用新的拼图。我遇到问题的部分是,我希望解算器在每次调用结束时检查谜题是否与调用开始时相同,如果没有更改,这意味着所有剩余的空方块都有超过1个可能值,因此解算器应返回False,以指示解算器无法解

  • 我曾经用C语言编写过一个数独谜题,但我陷入了一个问题:检查每个3x3网格是否没有重复的值。这是我的代码: 我知道在function Valid中,我应该有条件检查每个3x3网格,但我没有弄明白:我找到了创建一些变量开始和结束的解决方案,每个变量得到如下结果: 在我的例子中,i和j是ii和jj。 例如,我们发现了这样的东西: 我试过这个密码,但没用。 我不明白这一点:我有下一个数独矩阵: 如果我的代

  • 当我试图检查数独的行中是否有重复的元素时,结果什么也没有返回。不知道代码是否正确。如果在一行中找到重复的元素,则需要打印找到的重复项。使用方法帮助我找到解决方案。

  • 问题内容: 这个问题已经在这里有了答案 : 如何创建最紧凑的映射n→isprime(n)直到极限N? (31个答案) 5年前关闭。 我一直在尝试编写一个将输入数字的程序,并检查它是否是质数。如果数字实际上是质数,那么到目前为止,我编写的代码可以完美地工作。如果该数字不是质数,则它的行为很奇怪。我想知道是否有人可以告诉我代码的问题所在。 输入24时给出的结果是:不是素数不是素数不是素数素数 我将如何

  • 我目前正在创建一个项目,检查给定的9x9数独表是否遵循数独规则。该表存储在一个多维数组中(board[9][9]),我一直在研究如何正确检查每个3x3子网格中是否有重复的数字。我已经建立了0(空白)和9(最大值)之外的数字检查,以及每行和每列中重复的检查。我已经管理了两个create 4 nested for循环,成功地循环了每个3x3框,但我不确定如何检查框中的值是否重复。我对重复的定义是两个包