Python Tic Tac Toe嵌套列表问题

Python Tic Tac Toe嵌套列表问题,python,Python,我的Tic-tac-toe代码运行良好,除了一些问题。在板上标记点时,用户可以覆盖并将自己的标记放置在同一点上。即使我有代码可以解决这个问题。这是我的密码。请修复您认为合适的任何其他错误。我在这方面差一点就不及格了 board = [['-','-','-'] ,['-','-','-'] ,['-','-','-']] player1 = 'X' player2 = 'O' win = False turns = 0 player1= str(input("Wh

我的Tic-tac-toe代码运行良好,除了一些问题。在板上标记点时,用户可以覆盖并将自己的标记放置在同一点上。即使我有代码可以解决这个问题。这是我的密码。请修复您认为合适的任何其他错误。我在这方面差一点就不及格了

board = [['-','-','-']
        ,['-','-','-']
        ,['-','-','-']]
player1 = 'X'
player2 = 'O'
win = False
turns = 0
player1= str(input("Whats ur name+"))
player2= str(input("Whats ur name"))
def checkwin(player):

  for c in range(0,3):

    if board[c][0] == player and board[c][1] == player and board[c][2] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin

    elif board[0][c] == player and board[1][c] == player and board[2][c] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin
    #check for diagonal win
    elif board[0][0] == player and board[1][1] == player and board[2][2] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin
    #check for diagonal win (right to left)
    elif board[0][2] == player and board[1][1] == player and board[2][0] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin
  else:
    playerwin = False
    return playerwin


def playerturn(player):
  print "%s's turn" % player
  turn = 1
  while(turn):
    print "Select column [1-3]: ",
    col = int(raw_input()) - 1
    print "Select row [1-3]: ",
    row = int(raw_input()) - 1
    if board[row][col] == "X" or board[row][col] == "O":
      print "Already taken!"
    else:
      board[row][col] = player
      turn = 0

def printboard():
  print board[0]
  print board[1]
  print board[2]


printboard()
while(win == False):
  playerturn(player1)
  turns += 1
  printboard()
  if checkwin(player1) == True: break
  if turns == 9:
    print "This game is a draw!"
    break

  playerturn(player2)
  turns += 1
  printboard()
  checkwin(player2)
  if checkwin(player2) == True: break

你的问题是你已经把玩家的名字放在了数组中,并且检查了数组中是否有X或者O。一个简单的解决方案是将if条件更改为…==player1而不是X。 如果这样做,还必须调整“绘制”功能

board = [['-','-','-']
        ,['-','-','-']
        , ['-','-','-']]
#player1 = 'X'
#player2 = 'O'
win = False
turns = 0
player1= raw_input("Whats ur name+")
player2= raw_input("Whats ur name")
def checkwin(player):

  for c in range(0,3):

    if board[c][0] == player and board[c][1] == player and board[c][2] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin

    elif board[0][c] == player and board[1][c] == player and board[2][c] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin
    #check for diagonal win 
    elif board[0][0] == player and board[1][1] == player and board[2][2] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin
    #check for diagonal win (right to left)
    elif board[0][2] == player and board[1][1] == player and board[2][0] == player:
      print "*********\n\n%s wins\n\n*********" % player
      playerwin = True
      return playerwin
  else:
    playerwin = False
    return playerwin


def playerturn(player):
  print "%s's turn" % player
  turn = 1
  while(turn):
    print "Select column [1-3]: ",
    col = int(raw_input()) - 1
    print "Select row [1-3]: ",
    row = int(raw_input()) - 1
    if board[row][col] == player1 or board[row][col] == player2:
      print "Already taken!"
    else:
      board[row][col] = player
      turn = 0

def printboard():
  print ["X" if x == player1 else "O" if x == player2 else "-" for x in board[0]]
  print ["X" if x == player1 else "O" if x == player2 else "-" for x in board[1]]
  print ["X" if x == player1 else "O" if x == player2 else "-" for x in board[2]]

printboard()
while(win == False):
  playerturn(player1)
  turns += 1
  printboard()
  if checkwin(player1) == True: break
  if turns == 9:
    print "This game is a draw!"
    break

  playerturn(player2)
  turns += 1
  printboard()
  checkwin(player2)
  if checkwin(player2) == True: break

我还将strinput替换为raw_输入,以允许使用字符串作为名称。

您可以用播放器名称覆盖变量player1和player2,而不是将它们保留为X和Oyes。即使在数组中写入用户输入的名称,也要检查数组中是否有X或O。