Learn Classes and Objects by Building a Sudoku Solver - Step 76

Tell us what’s happening:

i have followed the instruction as they have told me to and have added an extra line but its not accepting my code also have added a return line as mentioned can someone please tell me which step is wrong here?

Your code so far

class Board:
    def __init__(self, board):
        self.board = board

# User Editable Region

    def __str__(self):
        board_str = ''
        for row in self.board:
            row_str = [str(i) if i else '*' for i in row]
            board_str += ' '.join(row_str) + '\n'
            return board_str

# User Editable Region

    def find_empty_cell(self):
        for row, contents in enumerate(self.board):
            try:
                col = contents.index(0)
                return row, col
            except ValueError:
                pass
        return None

    def valid_in_row(self, row, num):
        return num not in self.board[row]

    def valid_in_col(self, col, num):
        return all(self.board[row][col] != num for row in range(9))

    def valid_in_square(self, row, col, num):
        row_start = (row // 3) * 3
        col_start = (col // 3) * 3
        for row_no in range(row_start, row_start + 3):
            for col_no in range(col_start, col_start + 3):
                if self.board[row_no][col_no] == num:
                    return False
        return True

    def is_valid(self, empty, num):
        row, col = empty
        valid_in_row = self.valid_in_row(row, num)
        valid_in_col = self.valid_in_col(col, num)
        valid_in_square = self.valid_in_square(row, col, num)
        return all([valid_in_row, valid_in_col, valid_in_square])

    def solver(self):
        if (next_empty := self.find_empty_cell()) is None:
            return True
        for guess in range(1, 10):
            if self.is_valid(next_empty, guess):
                row, col = next_empty
                self.board[row][col] = guess
                if self.solver():
                    return True
                self.board[row][col] = 0
        return False

def solve_sudoku(board):
    gameboard = Board(board)
    print(f'Puzzle to solve:\n{gameboard}')
    if gameboard.solver():
        print(f'Solved puzzle:\n{gameboard}')
    else:
        print('The provided puzzle is unsolvable.')
    return gameboard

puzzle = [
  [0, 0, 2, 0, 0, 8, 0, 0, 0],
  [0, 0, 0, 0, 0, 3, 7, 6, 2],
  [4, 3, 0, 0, 0, 0, 8, 0, 0],
  [0, 5, 0, 0, 3, 0, 0, 9, 0],
  [0, 4, 0, 0, 0, 0, 0, 2, 6],
  [0, 0, 0, 4, 6, 7, 0, 0, 0],
  [0, 8, 6, 7, 0, 4, 0, 0, 0],
  [0, 0, 0, 5, 1, 9, 0, 0, 8],
  [1, 7, 0, 0, 0, 6, 0, 0, 5]
]

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36

Challenge Information:

Learn Classes and Objects by Building a Sudoku Solver - Step 76

Are you asked to add a return statement?

It is technically correct what you have written but the instructions are looking for a new line of code to achieve this without amending any of the existing code.

so i should remove the return code right but still its not accepting my code even without return line i am not getting why its not accepting the code

Please post your updated code. There are 2 things to address as mentioned in my last comment (the return statement being the first). Please try to do both and post your updated code if you are still stuck. It won’t accept what you have currently written.

<>

def __str__(self):
        board_str = ''
        for row in self.board:
            row_str = [str(i) if i != 0 else '*' for i in row]
            board_str += ' '.join(row_str) + '\n'

<>
this is the updated code

Hi.

Reset the step as you have changed the seed code.

You need to add a new line to your code to achieve the instruction of adding a newline character to the current value of board_str. Don’t amend the existing code.

How can you add a value to the current value of the variable board_str?

so i should add a new line of code instead of amending new ‘\n’ to the code right?

thanks it worked the code worked

1 Like