【发布时间】:2017-06-20 21:26:07
【问题描述】:
我正在尝试构建一个 python 脚本,它生成一个 9x9 块,其编号为 1-9,沿行、列和 3x3 块内是唯一的 - 你知道,数独!
所以,我想我会从简单开始,然后越做越复杂。首先,我做了它,所以它用数字 1-9 随机填充每个数组值。然后确保没有复制沿行的数字。接下来,我想对行和列进行相同的操作。我认为我的代码还可以 - 它肯定不快,但我不知道它为什么会卡住..
import numpy as np
import random
#import pdb
#pdb.set_trace()
#Soduku solver!
#Number input
soduku = np.zeros(shape=(9,9))
for i in range(0,9,1):
for j in range(0,9,1):
while True:
x = random.randint(1,9)
if x not in soduku[i,:] and x not in soduku[:,j]:
soduku[i,j] = x
if j == 8: print(soduku[i,:])
break
所以它在填充随机整数的列中移动,删除一行并重复。如果真的不走运,代码真正需要做的最多是为每个方块生成 9 个数字 - 我认为如果我们解决它,需要生成的值将少于 9*9*9。有什么东西破坏了它!
有什么想法吗?!
【问题讨论】:
-
您是否尝试在 while 循环和 if 之外打印一些值?
-
@Prune 我认为这是可以重现问题的最小代码......它只有 11 行。
-
您缺少“可验证”部分:这不会产生任何输出,并且您没有显示您得到的结果与您期望的结果。您还应该从解决此问题的努力中获得一些调试结果:一些战略性放置的
print语句,如果没有其他的话。 -
@Prune 它输出数独的三到五行(大部分时间)并且它停止了,他想要的是代码完成它是微不足道的。
-
大家好,对不起,我确实有一些打印声明。在我将它们复制粘贴到这里之前,我曾在某个时候把它们拿出来!主要原因是它们有时无法工作 - 它会冻结,当我在内核上点击 stpp 时,它会突然打印更多内容
标签: python numpy random sudoku