Я пытаюсь создать судоку, поэтому, прежде всего, мне нужно полностью заполненное судоку, из которого позже удаляются определенные числа. Но всякий раз, когда я пытаюсь сгенерировать этот судоку, 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)
он каждый раз дает следующий результат: 1 8 True (случайное число)
, поэтому он застревает на x = 1 y = 8 мне было интересно, почему это?
, и у меня также есть другая проблема: похоже, не смотрит, нет ли num в blockAnswerArray [x], так как недопустимые числа считаются действительными
Все полезно, так как я только начал программировать и хочу узнать как можно больше!