私はまだpythonを学んでいます。ボードの状態が次のような場合に、プレーヤーが三目並べのゲームに勝ったかどうかを判断するために、このメソッドを作成しました。'[['o','x','x'],['x','o','-'],['x','o','o']]'
def hasWon(board):
players = ['x', 'o']
for player in players:
for row in board:
if row.count(player) == 3:
return player
top, mid, low = board
for i in range(3):
if [ top[i],mid[i],low[i] ].count(player) == 3:
return player
if [top[0],mid[1],low[2]].count(player) == 3:
return player
if [top[2],mid[1],low[0]].count(player) == 3:
return player
return None
3文字のリストを数回チェックし、次のようにチェックを独自のメソッドにリファクタリングできることに気づきました。
def check(list, player):
if list.count(player) == 3:
return player
...しかし、実際には次のような行を変更するだけであることに気付きました。
if [ top[i],mid[i],low[i] ].count(player) == 3:
return player
に:
if check( [top[i],mid[i],low[i]], player ):
return player
...率直に言って、あまり改善されていないようです。これをリファクタリングするより良い方法はありますか? または、一般的に、より Pythonic なオプションですか? ぜひ聞いてみたいです!