因此,我作为个人项目进行此操作,但在获得所需的结果时遇到了一些困难。
def createSudoku():
rowCount = 9
columnCount = 9
gameBoard = []
##Row entry is randomized order
##Column entry is not randomized order
##Row entry cannot be duplicate
for row in range(rowCount):
rowList = []
sudokuNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for column in range(columnCount):
choice = random.choice(sudokuNumbers)
rowList.append(choice)
sudokuNumbers.remove(choice)
gameBoard.append(rowList)
因此,我上面的代码部分是当前随机创建我的行,这是我的意图。现在,我开始用另一个循环搜索矩阵,以了解列实际上是随机的。
K = 0
##Column Duplicate Algorithm
while(K < columnCount):
for sub in gameBoard:
columnK = sub[K]
sudokuNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for item in range(columnK):
if item in sudokuNumbers:
sudokuNumbers.remove(item)
else:
sub.append(sub.pop(sub.index(item)))
if ...
K += 1
我进行列搜索的意图是利用列位置[K]和行位置[K],并在该行上弹出/移动另一个条目来代替重复项,然后重新检查并继续。在修整它之后,现在我看到的问题是,我最初的想法是使用循环或递归执行它,但这将是一个很大的兔子洞。我很想知道在这种情况下的选择,以确定如何替换行中的条目,还是我在这里使分辨率过于复杂?
我知道,为了获得更好的OOP,我应该关注的是将循环作为它们自己的功能进行分离,并且我打算这样做,因为我只是在数独的检查上受阻。
此循环将为您找到重复项并消失。
exclusions = [43606,125490,...]
def ID_Generator(new_clients): # This is a list of new client
new_client_IDs = []
while len(new_client_IDs) < len(new_clients):
ID = randint(40000, 200000)
if ID not in exclusions:
new_client_IDs.append(ID)
if list(dict.fromkeys(new_client_IDs)):
new_client_IDs = list(dict.fromkeys(new_client_IDs))