Как реализовать проверку квадратов 3x3 в судоку

wardeg

Новичок
Пользователь
Окт 19, 2020
1
0
1
Я пытаюсь реализовать это но у меня получается не так:
1603131522942.png
У меня вылетает при первом вызове функции(проверке)
Код:

Python:
    def checkCells(self, pos):

        lastPos0 = pos[0]

        # по x

        for i in range(cellsInGrid[0]):

            pos = i, pos[1]



            square = self.returnToSquare(pos)

            x, y = pos[0], pos[1]



            xMap = self.map[x]  # в столбик

            yMap = [self.map[ii][0] for ii in range(cellsInGrid[1])]  # в строку



            xr = set()



            zeros = 0



            for xn in range(len(xMap)):

                if self.map[xn][y]:

                    xr.add(self.map[xn][y])

                else:

                    zeros += 1



            if len(xr) + zeros != cellsInGrid[0]:

                self.errorCells.append(list(pos))

            else:

                if list(pos) in self.errorCells:

                    self.errorCells.remove(list(pos))



        pos = lastPos0, pos[1]

        lastPos1 = pos[1]

        # по y

        for j in range(cellsInGrid[1]):

            pos = pos[0], j



            square = self.returnToSquare(pos)

            x, y = pos[0], pos[1]



            xMap = self.map[x]  # в столбик

            yMap = [self.map[ii][0] for ii in range(cellsInGrid[1])]  # в строку



            yr = set()



            zeros = 0



            for yn in range(len(yMap)):

                if self.map[x][yn]:

                    yr.add(self.map[x][yn])

                else:

                    zeros += 1



            if len(yr) + zeros != cellsInGrid[1]:

                self.errorCells.append(list(pos))

            else:

                if list(pos) in self.errorCells:

                    self.errorCells.remove(list(pos))



        pos = lastPos0, lastPos1



        # квадраты



        minPos = minX, minY = self.returnToSquare(pos) % 3 * 3, \

                              self.returnToSquare(pos) // 3 * 3



        zeros = 0

        squareSet = set()

        for i in range(3):

            for j in range(3):

                now = [minX + i, minY + j]



                if self.map[now[0]][now[1]]:

                    squareSet.add(self.map[now[0]][now[1]])



                else:

                    zeros += 1



        if len(squareSet) + zeros == 9:

            if all([minX + a, minY + b] for a in range(3) for b in range(3)):

                [self.errorCells.remove([minX + a, minY + b]) for a in range(3) for b in range(3)]



        else:

            [self.errorCells.append([minX + a, minY + b]) for a in range(3) for b in range(3)]
я поставил функцию после нажатия клавиши(куда вписывают числа)

Помогите переписать как-то проверку квадратов
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 668
475
83
ничего не понятно оформите вопрос нормально Как правильно составить вопрос и не получить бан?
 

Форум IT Специалистов