Exactly as my post title says, I'm trying to create a class to solve Sudoku game and I wanted to print a board using OOP style and if name == "main":
My output suppose to look like this:
Here's my code so far:
class Sudoku:
def __init__(self):
self.board = [
[7, 8, 0, 4, 0, 0, 1, 2, 0],
[6, 0, 0, 0, 7, 5, 0, 0, 9],
[0, 0, 0, 6, 0, 1, 0, 7, 8],
[0, 0, 7, 0, 4, 0, 2, 6, 0],
[0, 0, 1, 0, 5, 0, 9, 3, 0],
[9, 0, 4, 0, 6, 0, 0, 0, 5],
[0, 7, 0, 3, 0, 0, 0, 1, 2],
[1, 2, 0, 0, 0, 7, 4, 0, 0],
[0, 4, 9, 2, 0, 6, 0, 0, 7]
]
def print_board(self, board) -> None:
for row in range(len(board)):
if row % 3 == 0 and row != 0:
print("- - - - - - - - - - - - - ")
for col in range(len(board[0])):
if col % 3 == 0 and col != 0:
print(" | ", end="")
if col == 8:
print(board[row][col])
else:
print(str(board[row][col]) + " ", end="")
# Not sure if we need string representation of the board
# def __str__(self):
# return f"{self.board}"
if __name__ == "__main__":
sudoku = Sudoku()
sudoku.print_board(sudoku.board)
And here's the output that I'm getting from the above code:
Thank you in advance.
The problem is that the 'columns' loop isn't nested inside the 'rows' loop, your code should look something like this:
class Sudoku:
def __init__(self):
self.board = [
[7, 8, 0, 4, 0, 0, 1, 2, 0],
[6, 0, 0, 0, 7, 5, 0, 0, 9],
[0, 0, 0, 6, 0, 1, 0, 7, 8],
[0, 0, 7, 0, 4, 0, 2, 6, 0],
[0, 0, 1, 0, 5, 0, 9, 3, 0],
[9, 0, 4, 0, 6, 0, 0, 0, 5],
[0, 7, 0, 3, 0, 0, 0, 1, 2],
[1, 2, 0, 0, 0, 7, 4, 0, 0],
[0, 4, 9, 2, 0, 6, 0, 0, 7]
]
def print_board(self, board) -> None:
for row in range(len(board)):
if row % 3 == 0 and row != 0:
print("- - - - - - - - - - - - - ")
for col in range(len(board[0])):
if col % 3 == 0 and col != 0:
print(" | ", end="")
if col == 8:
print(board[row][col])
else:
print(str(board[row][col]) + " ", end="")
if __name__ == "__main__":
sudoku = Sudoku()
sudoku.print_board(sudoku.board)