Python застревает в определенном индексе в массиве - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать судоку, поэтому, прежде всего, мне нужно полностью заполненное судоку, из которого позже удаляются определенные числа. Но всякий раз, когда я пытаюсь сгенерировать этот судоку, 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], так как недопустимые числа считаются действительными

Все полезно, так как я только начал программировать и хочу узнать как можно больше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...