Last active
July 19, 2022 19:04
-
-
Save PiotrJander/58a1969403561970ff9ea9634c3a5ca8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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