【发布时间】:2015-05-26 03:36:47
【问题描述】:
我正在尝试解决基于石头剪刀布的编程挑战。我的目标是给出一个游戏动作列表,确定游戏在哪个动作中获胜。我的问题是检查游戏是否获胜。我有一个获胜组合列表,例如游戏网格是:
1, 2, 3,
4, 5, 6,
6, 7, 8,
那么获胜组合将是例如:4, 5, 6,因为它是连续 3 个。
我的问题是我不知道如何有效地检查所有这些获胜组合。我试图列出获胜组合的列表,然后通过它运行游戏板以检查获胜者,这太棒了,只是它不起作用,我不知道如何合理地接近它。
这是我的代码:
def is_winner(grid):
player1_wins = ['X','X','X']
player2_wins = ['O','O','O']
player_win = [player1_wins, player2_wins]
win1 = [0,3,6] #[1,4,7]
win2 = [1,4,7] #[2,5,8]
win3 = [2,5,8] #[3,6,9]
win4 = [0,4,8] #[1,5,9]
win5 = [6,7,8] #[7,8,9]
win6 = [3,4,5] #[4,5,6]
win7 = [0,1,2] #[1,2,3]
win8 = [6,7,8] #[7,8,9]
winning_grids = [win1, win2, win3, win4, win5, win6, win7, win8]
if any(grid[winning_grids]) == any(player_win): # !!!! Broken code here !!!!
return True # Game won
else:
return False
def tic_tac_toe(games):
for game in range(games):
grid = ['1','2','3',
'4','5','6',
'7','8','9']
moves = [int(x) for x in raw_input().split()]
turn = 1
for move in moves:
if turn % 2 != 0:
grid[move-1] = 'X'
elif turn % 2 == 0:
grid[move-1] = 'O'
if is_winner(grid):
print("Game over on turn %d" % turn)
print(grid)
tic_tac_toe(input())
示例输入如下所示:
3
7 5 4 1 9 2 8 3 6
5 1 3 7 6 4 2 9 8
5 1 2 8 6 4 7 3 9
如果是 3 场比赛,玩家 1 先上,玩家 2 是每个字符串中的下一个数字。
答案是:第 1 局 - 第 7 局。第 2 局 - 第 6 局,第 3 局 - 平局。 (尚未实施)
我可以做些什么来检查获胜的举动/有人对如何修复我的代码有任何建议吗?
【问题讨论】:
标签: python arrays python-2.7 tic-tac-toe