Ta Te Ti
Esto es un ta-te-ti (con jugador humano y/o programado!) que hice en algún momento de 2016.
import copy board = { 'A': [' ', ' ', ' '], 'B': [' ', ' ', ' '], 'C': [' ', ' ', ' '], } def print_board(): for i in "ABC": print(" | {} | {} | {} |".format(*board[i])) def check_winner_state(board, mark): for i in "ABC": if board[i] == [mark, mark, mark]: return True for j in [0,1,2]: if [board["A"][j], board["B"][j], board["C"][j]] == [mark, mark, mark]: return True if [board["A"][0],board["B"][1],board["C"][2]] == [mark, mark, mark]: return True if [board["A"][2],board["B"][1],board["C"][0]] == [mark, mark, mark]: return True return False players_marks = "XO" print_board() player_names = {} for mark in players_marks: whatever = input("Enter your name for %s" % mark) player_names[mark] = whatever def human_player(mark): return input("Enter turn {}: ".format(mark)).upper() def computer_player(mark): # Try everything and see if you can win other_mark = set(players_marks) - set(mark) for i in 'ABC': for j in 0,1,2: _b = copy.deepcopy(board) if _b[i][j] != ' ': continue _b[i][j] = mark if check_winner_state(_b, mark): return i+str(j+1) # So, we can't win. Try not to lose for i in 'ABC': for j in 0,1,2: _b = copy.deepcopy(board) if _b[i][j] != ' ': continue _b[i][j] = other_mark if check_winner_state(_b, other_mark): return i+str(j+1) # fuck it for i in 'ABC': for j in 0,1,2: if board[i][j] == ' ': return i+str(j+1) players = [computer_player, computer_player] selector = 0 while True: turn = selector % 2 mark = players_marks[turn] inp = players[turn](mark) if len(inp) != 2: # A1 print("Bad format: ", inp) continue x, y = inp if x not in "ABC" or y not in "123": print("Bad format: ", inp) continue y = int(y)-1 if board[x][y] != ' ': print("Position taken: ", inp) continue # mark the input board[x][y] = mark print_board() if check_winner_state(board, mark): print("%s, you are the winner, congrats!" % player_names[mark]) break if selector == 8: print("No more goes, no one wins, sorry :(") break selector += 1