Skip to content

Instantly share code, notes, and snippets.

@PiotrJander
Last active July 19, 2022 19:04
Show Gist options
  • Save PiotrJander/58a1969403561970ff9ea9634c3a5ca8 to your computer and use it in GitHub Desktop.
Save PiotrJander/58a1969403561970ff9ea9634c3a5ca8 to your computer and use it in GitHub Desktop.
def _repr_cell(cell):
return " " if cell is None else cell
def _print_row(row):
print(f"{_repr_cell(row[0])} | {_repr_cell(row[1])} | {_repr_cell(row[2])}")
def _print_row_delimiter():
print("--+---+---")
def print_board(board):
_print_row(board[0])
_print_row_delimiter()
_print_row(board[1])
_print_row_delimiter()
_print_row(board[2])
def is_won(board, player):
return (board[0][0] == board[1][1] == board[2][2] == player
or board[0][2] == board[1][1] == board[2][0] == player
or board[0][0] == board[0][1] == board[0][2] == player
or board[1][0] == board[1][1] == board[1][2] == player
or board[2][0] == board[2][1] == board[2][2] == player
or board[0][0] == board[1][0] == board[2][0] == player
or board[0][1] == board[1][1] == board[2][1] == player
or board[0][2] == board[1][2] == board[2][2] == player)
def is_draw(board):
for row in board:
for cell in row:
if cell is None:
return False
else:
return True
def read_coordinate(prompt):
while True:
coor = int(input(prompt))
if coor == 0 or coor == 1 or coor == 2:
return coor
else:
print("The coordinate must be a number: 0 or 1 or 2")
def read_coordinates(player):
x = read_coordinate(f"{player}'s turn. Please choose row: ")
y = read_coordinate(f"{player}'s turn. Please choose column: ")
return x, y
def play_turn(board, player):
while True:
print_board(board)
x, y = read_coordinates(player)
if board[x][y] is None:
board[x][y] = player
break
else:
print("The cell is taken. Please choose a free cell.")
return is_won(board, player)
def play():
board = [[None] * 3 for _ in range(3)]
while True:
x_won = play_turn(board, 'X')
if x_won:
print("X wins!")
print_board(board)
break
if is_draw(board):
print('Draw!')
break;
o_won = play_turn(board, 'O')
if o_won:
print("O wins!")
print_board(board)
break
if is_draw(board):
print('Draw!')
break;
if __name__ == "__main__":
play()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment