gpt4 book ai didi

python - 将线程添加到数独检查器

转载 作者:行者123 更新时间:2023-11-30 22:49:20 24 4
gpt4 key购买 nike

我刚刚在 Python 中创建了一个简单的函数,用于检查数独板(输入以列表形式给出)是否有效。我的做法非常简单:

  • 检查数独板是否为 9x9

  • 检查每个数字每行仅出现一次

  • 检查每个数字每列仅出现一次
  • 检查每个数字在每个 3x3 网格中是否恰好出现一次

现在,一旦我开始这样做,我就想利用并学习一些有关 Python 线程的知识。我阅读了文档,还阅读了一些很棒的通用多线程相关帖子,但我只是想不出在我的检查器中实现它们的方法。

现在,我希望线程工作的方式(正如我所想的)是一个线程检查每一列是否包含 1-9 位数字,另一个线程检查同一事物的行,另外九个线程检查每个 3x3 子网格。你们能告诉我(最后加上一些解释)我如何才能实现这一目标吗?谢谢

最佳答案

因此,在不消除任何挑战的情况下,就如何实现这一目标给出一些一般性指导。让我们从导入 Threading 开始:

import threading

这将让我们使用线程对象!另外,为了知道数独网格在事后是否有效,我们需要一个变量来存储真/假条件。您可以选择单个变量,并使用线程锁来确保没有其他线程访问它同时,或者三个单独去。为简单起见,我将在此示例中使用三个单独的变量

LinesValid = False
ColumnsValid = False
GridsValid = False

然后,由于线程需要一个函数或另一个可调用函数作为其目标来运行,并且您需要一个用于列、行和每个 3x3 网格的线程,因此我们为每个线程需要三个函数。然而,由于有 9 列、9 行和 9 个网格,我相信只为网格执行一个线程会好得多,但出于练习的目的,我认为为网格执行一个线程就可以了。每个。

def CheckLines():
# Line Checking Code

def CheckColumns():
# ColumnCheckingCode

def CheckGrid(UpperLeft, BottomRight):
# GridCheckingCode

无论如何,这里我们定义了三个函数,以及它们适当的行检查代码。就像行会检查 X 轴,列会检查 Y 轴一样,但想法是将其分开。对于 CheckGrid,如果您希望每个图 block 都有一个线程,则需要指定角点,或者如果您决定使用单个线程,则只需将其定义为:

def CheckGrid():
# GridCheckingCode

之后我们需要创建线程:

LineThread = threading.Thread(target=CheckLines)
ColumnThread = threading.Thread(target=CheckLines)
GridThread = threading.Thread(target=CheckLines, args=([0, 0], [2, 2]))

如果不需要网格,可以忽略 GridThread 中的参数。否则,您需要指定角点,并找到一种方法来循环指定的图 block 。

之后,需要启动线程并将它们与主线程连接起来,然后再向用户显示数据:

LineThread.start()
ColumnThread.start()
GridThread.start()

LineThread.join()
ColumnThread.join()
GridThread.join()

if sum(LinesValid, ColumnsValid, GridsValid) == 3:
print("The grid is valid!")
else:
print("The grid is invalid!")

这里我们检查所有的 Bool 是否都为 True:如果是,则 ( 1 + 1 + 1 ) == 3 ,并据此向用户打印数据。这些 bool 值将在各自的 Check** 函数中设置为 True/False!

如果您想要一些更直接的解决方案,而不是带有解释的一般方向,请告诉我,我会拼凑一些东西!最后一段代码看起来像这样:

import threading

def CheckLines(self):
# Line Checking Code

def CheckColumns(self):
# ColumnCheckingCode

def CheckGrid(self, UpperLeft, BottomRight):
# GridCheckingCode

LinesValid = False
ColumnsValid = False
GridsValid = False

LineThread = threading.Thread(target=CheckLines)
ColumnThread = threading.Thread(target=CheckLines)
GridThread = threading.Thread(target=CheckLines, args=([0, 0], [2, 2]))

LineThread.start()
ColumnThread.start()
GridThread.start()

LineThread.join()
ColumnThread.join()
GridThread.join()

if sum(LinesValid, ColumnsValid, GridsValid) == 3:
print("The grid is valid!")
else:
print("The grid is invalid!")

关于python - 将线程添加到数独检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com