在为 tic tac toe 提供 python 代码后,字母未绘制在板上

After providing move in python code for tic tac toe, letter is not drawn on board

在井字棋的 Python 代码中提供移动编号后无法继续进行。它要求下一步移动,然后提供单元格编号,但未执行 makeMove() 方法。它将再次询问下一步,直到不要按两次回车键。请帮助我解决此代码。

 #Tic Tac Toe

import random

def drawBoard(board):
     # This function prints out the board that it was passed.

   # "board" is a list of 10 strings representing the board (ignore index 0)
     print('   |   |')
     print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
     print('   |   |')
     print('-----------')
     print('   |   |')
     print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
     print('   |   |')
     print('-----------')
     print('   |   |')
     print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
     print('   |   |')

def inputPlayerLetter():
     # Lets the player type which letter they want to be.
    #
     letter = ''
     while not (letter == 'X' or letter == 'O'):
         #print('Do you want to be X or O?')
         #letter = input().upper()
  letter = (raw_input("Do you want to be X or O? ")).upper()
  print "Received input is : ", letter.upper()

     # 
     if letter == 'X':
         return ['X', 'O']
     else:
         return ['O', 'X']

def whoGoesFirst():
     # Randomly choose the player who goes first.
     if random.randint(0, 1) == 0:
         return 'computer'
     else:
         return 'player'

def playAgain():
     print('Do you want to play again? (yes or no)')
     return raw_input().lower().startswith('y')

def makeMove(board, letter, move):
     board[move] = letter
   
def isWinner(bo, le):
     # 
     # 
   return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top
     (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle
     (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom
     (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side
     (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle
     (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side
     (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal
     (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal

def getBoardCopy(board):
     # Make a duplicate of the board list and return it the duplicate.
     dupeBoard = []

     for i in board:
         dupeBoard.append(i)

     return dupeBoard

def isSpaceFree(board, move):
     # Return true if the passed move is free on the passed board.
     return board[move] == ' '

def getPlayerMove(board):
     # Let the player type in their move.
     move = ' '
     while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)):
         print('What is your next move? (1-9)')
         move = raw_input()
     return int(move)

def chooseRandomMoveFromList(board, movesList):
     # Returns a valid move from the passed list on the passed board.
     # Returns None if there is no valid move.
     possibleMoves = []
     for i in movesList:
         if isSpaceFree(board, i):
             possibleMoves.append(i)

     if len(possibleMoves) != 0:
         return random.choice(possibleMoves)
     else:
         return None

def getComputerMove(board, computerLetter):
     # Given a board and the computer's letter, determine where to move and return that move.
     if computerLetter == 'X':
         playerLetter = 'O'
     else:
         playerLetter = 'X'

     # Here is our algorithm for our Tic Tac Toe AI:
     # First, check if we can win in the next move
     for i in range(1, 10):
         copy = getBoardCopy(board)
         if isSpaceFree(copy, i):
             makeMove(copy, computerLetter, i)
             if isWinner(copy, computerLetter):
                 return i

     # Check if the player could win on their next move, and block them.
     for i in range(1, 10):
         copy = getBoardCopy(board)
         if isSpaceFree(copy, i):
             makeMove(copy, playerLetter, i)
             if isWinner(copy, playerLetter):
                 return i

     # Try to take one of the corners, if they are free.
     move = chooseRandomMoveFromList(board, [1, 3, 7, 9])
     if move != None:
         return move

     # Try to take the center, if it is free.
     if isSpaceFree(board, 5):
         return 5

     # Move on one of the sides.
     return chooseRandomMoveFromList(board, [2, 4, 6, 8])

def isBoardFull(board):
     # Return True if every space on the board has been taken. Otherwise return False.
     for i in range(1, 10):
         if isSpaceFree(board, i):
             return False
     return True


print('Welcome to Tic Tac Toe!')

while True:
     # Reset the board
     theBoard = [' '] * 10
     playerLetter, computerLetter = inputPlayerLetter()
     turn = whoGoesFirst()
     print('The ' + turn + ' will go first.')
     gameIsPlaying = True

     while gameIsPlaying:
         if turn == 'player':
             # 
             drawBoard(theBoard)
             move = getPlayerMove(theBoard)
             
             if isWinner(theBoard, playerLetter):
                 drawBoard(theBoard)
                 print('Hooray! You have won the game!')
                 gameIsPlaying = False
             else:
                 if isBoardFull(theBoard):
                     drawBoard(theBoard)
                     print('The game is a tie!')
                     break
                 else:
                     turn = 'computer'

         else:
             # 
             move = getComputerMove(theBoard, computerLetter)
             makeMove(theBoard, computerLetter, move)

             if isWinner(theBoard, computerLetter):
                 drawBoard(theBoard)
                 print('The computer has beaten you! You lose.')
                 gameIsPlaying = False
             else:
                 if isBoardFull(theBoard):
                     drawBoard(theBoard)
                     print('The game is a tie!')
                     break
                 else:
                     turn = 'player'

     if not playAgain():
         break

输出:

欢迎来到井字游戏! 你想成为X还是O? X 收到的输入是:X 电脑会先走。 | | 欧 | |

| |

| | | |

| |

| | | | | |

你的下一步是什么? (1-9) 5

| | 欧 | |

| |

| | | |

| |

| | 欧 | | | | 你的下一步行动是什么? (1-9) 5个 | | 欧 | |

| |

| | 欧 | |

| |

| | 欧 | | | | 电脑打败你了!你输了。 你想再玩一次吗? (是或否)

getPlayerMove 函数中的 raw_input() 替换 input() 调用。

您的代码无效,因为 input() 等同于 eval(raw_input())。如果用户输入一个数字,则 input returns 一个整数值。这意味着 move not in '1 2 3 4 5 6 7 8 9'.split() 总是 False