Python被困在数组中的某个索引中

2024-09-30 08:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试生成一个数独,所以首先我想要一个完全填充的数独,在这个数独中某些数字会被删除。但每当我尝试生成这个数独游戏时,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]中,因为它认为未验证的数字是有效的

一切都是有益的,因为我刚刚开始编程,我想学习尽可能多


Tags: inifnpnotmatrixnumprintvalid

热门问题