import random def print_board(board): for i in range(3): print(" | ".join(board[i])) if i < 2: print("---------") def check_winner(board, player): for i in range(3): if all([board[i][j] == player for j in range(3)]) or \ all([board[j][i] == player for j in range(3)]): return True if board[0][0] == player and board[1][1] == player and board[2][2] == player: return True if board[0][2] == player and board[1][1] == player and board[2][0] == player: return True return False def is_board_full(board): return all([cell != " " for row in board for cell in row]) def player_move(board): while True: try: move = int(input("Enter your move (1-9): ")) - 1 row, col = divmod(move, 3) if board[row][col] == " ": board[row][col] = "X" break else: print("That spot is taken, try again.") except (ValueError, IndexError): print("Invalid move, please enter a number between 1 and 9.") def computer_move(board): empty_spots = [(i, j) for i in range(3) for j in range(3) if board[i][j] == " "] move = random.choice(empty_spots) board[move[0]][move[1]] = "O" print(f"Computer chooses {move[0] * 3 + move[1] + 1}") def play_game(): board = [[" " for _ in range(3)] for _ in range(3)] print_board(board) while True: player_move(board) print_board(board) if check_winner(board, "X"): print("Congratulations! You win!") break if is_board_full(board): print("It's a draw!") break computer_move(board) print_board(board) if check_winner(board, "O"): print("Computer wins! Better luck next time.") break if is_board_full(board): print("It's a draw!") break play_game()