我正在尝试生成一个数独,所以首先我想要一个完全填充的数独,在这个数独中某些数字会被删除。但每当我尝试生成这个数独游戏时,python就会陷入困境
def answerGenerator():
horizontalAnswerArray = [[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]]
verticalAnswerArray = [[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]]
blockAnswerArray = [[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]]
def arrayConverter():
horizontalIndex = 0
verticalIndex = 0
verticalLine = 0
for subArray in horizontalAnswerArray:
for subArray in horizontalAnswerArray:
verticalAnswerArray[verticalLine][verticalIndex] = subArray[horizontalIndex]
verticalIndex += 1
if verticalIndex == 9:
verticalIndex = 0
verticalLine += 1
horizontalIndex += 1
blockAnswerArray = [[horizontalAnswerArray[0][0], horizontalAnswerArray[0][1], horizontalAnswerArray[0][2],
horizontalAnswerArray[1][0], horizontalAnswerArray[1][1], horizontalAnswerArray[1][2],
horizontalAnswerArray[2][0], horizontalAnswerArray[2][1], horizontalAnswerArray[2][2]],
[horizontalAnswerArray[0][3], horizontalAnswerArray[0][4], horizontalAnswerArray[0][5],
horizontalAnswerArray[1][3], horizontalAnswerArray[1][4], horizontalAnswerArray[1][5],
horizontalAnswerArray[2][3], horizontalAnswerArray[2][4], horizontalAnswerArray[2][5]],
[horizontalAnswerArray[0][6], horizontalAnswerArray[0][7], horizontalAnswerArray[0][8],
horizontalAnswerArray[1][6], horizontalAnswerArray[1][7], horizontalAnswerArray[1][8],
horizontalAnswerArray[2][6], horizontalAnswerArray[2][7], horizontalAnswerArray[2][8]],
[horizontalAnswerArray[3][0], horizontalAnswerArray[3][1], horizontalAnswerArray[3][2],
horizontalAnswerArray[4][0], horizontalAnswerArray[4][1], horizontalAnswerArray[4][2],
horizontalAnswerArray[5][0], horizontalAnswerArray[5][1], horizontalAnswerArray[5][2]],
[horizontalAnswerArray[3][3], horizontalAnswerArray[3][4], horizontalAnswerArray[3][5],
horizontalAnswerArray[4][3], horizontalAnswerArray[4][4], horizontalAnswerArray[4][5],
horizontalAnswerArray[5][3], horizontalAnswerArray[5][4], horizontalAnswerArray[5][5]],
[horizontalAnswerArray[3][6], horizontalAnswerArray[3][7], horizontalAnswerArray[3][8],
horizontalAnswerArray[4][6], horizontalAnswerArray[4][7], horizontalAnswerArray[4][8],
horizontalAnswerArray[5][6], horizontalAnswerArray[5][7], horizontalAnswerArray[5][8]],
[horizontalAnswerArray[6][0], horizontalAnswerArray[6][1], horizontalAnswerArray[6][2],
horizontalAnswerArray[7][0], horizontalAnswerArray[7][1], horizontalAnswerArray[7][2],
horizontalAnswerArray[8][0], horizontalAnswerArray[8][1], horizontalAnswerArray[8][2]],
[horizontalAnswerArray[6][3], horizontalAnswerArray[6][4], horizontalAnswerArray[6][5],
horizontalAnswerArray[7][3], horizontalAnswerArray[7][4], horizontalAnswerArray[7][5],
horizontalAnswerArray[8][3], horizontalAnswerArray[8][4], horizontalAnswerArray[8][5]],
[horizontalAnswerArray[6][6], horizontalAnswerArray[6][7], horizontalAnswerArray[6][8],
horizontalAnswerArray[7][6], horizontalAnswerArray[7][7], horizontalAnswerArray[7][8],
horizontalAnswerArray[8][6], horizontalAnswerArray[8][7], horizontalAnswerArray[8][8]]]
print(np.matrix(horizontalAnswerArray))
print(np.matrix(verticalAnswerArray))
print(np.matrix(blockAnswerArray))
x = 0
y = 0
while x < 9:
valid = False
while valid == False:
num = rng.randint(1, 9)
if num not in horizontalAnswerArray[x] and num not in verticalAnswerArray[x] and num not in blockAnswerArray[x]:
valid = True
validNum = copy.deepcopy(num)
horizontalAnswerArray[x][y] = validNum
y += 1
arrayConverter()
if y == 9:
x += 1
y = 0
print(x, y, valid, validNum)
它每次都提供以下输出: 18真(随机数)
所以它卡在x=1y=8,我想知道为什么会这样
我还有另一个问题,它似乎没有看到num是否不在blockAnswerArray[x]中,因为它认为未验证的数字是有效的
一切都是有益的,因为我刚刚开始编程,我想学习尽可能多
目前没有回答
相关问题 更多 >
编程相关推荐