首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Tac Tac Toe嵌套列表问题

Tac Tac Toe嵌套列表问题
EN

Stack Overflow用户
提问于 2018-06-07 03:23:23
回答 1查看 634关注 0票数 -2

我的Tic tac toe代码运行良好,除了一些问题。当在板上标记一个点时,用户可以覆盖并将他们自己的标记放在同一个点上。即使我有修复这个问题的代码。这是我的代码。请按照您认为合适的方式修复任何其他错误。在这方面我几乎不能通过一门课。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-06-07 03:49:32

您的问题是,您已经将玩家名称放入数组中,并检查数组中是否有"X“或"O”。一个简单的解决方案是将if条件更改为... == player1而不是"X“。如果这样做,您还必须调整绘图函数。

代码语言:javascript
复制
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

我还将raw_input()str(input())替换为允许字符串作为名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档