-1

鉛筆と紙のゲームである三目並べでは、2人のプレーヤーが交代で3x3の正方形のボードに「X」と「O」をマークします。縦、横、または斜めのストライプで3つの連続した「X」または「O」をマークすることに成功したプレーヤーがゲームに勝ちます。三目並べゲームの結果を決定する関数を記述します。

>>> tictactoe([('X', ' ', 'O'), 
               (' ', 'O', 'O'), 
               ('X', 'X', 'X') ])
"'X' wins (horizontal)."
>>> tictactoe([('X', 'O', 'X'), 
...            ('O', 'X', 'O'), 
...            ('O', 'X', 'O') ])
'Draw.'
>>> tictactoe([('X', 'O', 'O'), 
...            ('X', 'O', ' '), 
...            ('O', 'X', ' ') ])
"'O' wins (diagonal)."
>>> tictactoe([('X', 'O', 'X'), 
...            ('O', 'O', 'X'), 
...            ('O', 'X', 'X') ])
"'X' wins (vertical)."




def tictactoe(moves):
for r in range(len(moves)):
    for c in range(len(moves[r])):      
        if moves[0][c]==moves[1][c]==moves[2][c]:
            a="'%s' wins (%s)."%((moves[0][c]),'vertical')
        elif moves[r][0]==moves[r][1]==moves[r][2]:
            a="'%s' wins (%s)."%((moves[r][0]),'horizontal')
        elif moves[0][0]==moves[1][1]==moves[2][2]:
            a="'%s' wins (%s)."%((moves[0][0]),'diagonal')
        elif moves[0][2]==moves[1][1]==moves[2][0]:
            a="'%s' wins (%s)."%((moves[0][2]),'diagonal')
        else:
            a='Draw.'
print(a)

私はこのようなコードを書きましたが、私の範囲は機能していません(私は思います)。なぜなら、rとcの値は0,1,2,3ではなく3となるからです。だから、誰かがこれで私を助けることができますか?ありがとうございました

4

2 に答える 2

0

プレーヤーが勝ったときにループは終了しません。私はこのようなことを試してみます:

def tictactoe_state(moves):
  for r in range(len(moves)):
    for c in range(len(moves[r])):
      if moves[0][c] == moves[1][c] == moves[2][c]:
        return "'%s' wins (%s)." % (moves[0][c], 'vertical')
      elif moves[r][0] == moves[r][1] == moves[r][2]:
        return "'%s' wins (%s)." % (moves[r][0], 'horizontal')
      elif moves[0][0] == moves[1][1] == moves[2][2]:
        return "'%s' wins (%s)." % (moves[0][0], 'diagonal')
      elif moves[0][2] == moves[1][1] == moves[2][0]:
        return "'%s' wins (%s)." % (moves[0][2], 'diagonal')

  # You still have to make sure the game isn't a draw.
  # To do that, see if there are any blank squares.

  return 'Still playing'

また、if対角線をチェックするステートメントをループの外に移動します。それらはとに依存しませrc

于 2012-08-08T02:12:19.653 に答える
0

これを試して..

def tictactoe(moves):
    for r in range(len(moves)):
        for c in range(len(moves[r])):      
            if moves[0][c]==moves[1][c]==moves[2][c]:
                return "\'%s\' wins (%s)." % ((moves[0][c]),'vertical')
            elif moves[r][0]==moves[r][1]==moves[r][2]:
                return "\'%s\' wins (%s)."%((moves[r][0]),'horizontal')
            elif moves[0][0]==moves[1][1]==moves[2][2]:
                return "\'%s\' wins (%s)."%((moves[0][0]),'diagonal')
            elif moves[0][2]==moves[1][1]==moves[2][0]:
                return "\'%s\' wins (%s)."%((moves[0][2]),'diagonal')
    return 'Draw.'
于 2014-07-14T03:46:33.197 に答える