对于我的一个项目,我必须做一个井字游戏求解器,我想请求一些帮助来优化一些代码。
任务:根据获胜者(x或o),返回适当的结果
我是如何做到的:我检查了水平、垂直和对角策略的结果
我需要帮助:我主要重复相同的代码,但每种情况都有不同的 if 语句,我只是想知道是否有更通用的方法来做到这一点。
当前代码: (对角线获胜)
if diagcounter==size and (board[0][0]=="x") :
print("Win Diagonally")
return "X has won"
elif diagcounter==size and (board[0][0]=="o"):
print("Win Diagonally")
横向获胜:
if vertcounter==size and board[0][x]=="x":
print("Win vertically")
return "X has won"
elif vertcounter==size and board[0][x]=="o":
print("Win vertically")
return "O has won"
正如你所看到的,它们几乎是一样的,但是由于我需要现场检查信件,所以我不知道如何优化它。
最佳答案
您可以保存每行/列/对角线的索引列表。例如,第一行应该是 sequence_indices = [(0, 0), (0, 1), (0, 2)]
。主对角线应为 sequence_indices = [(0, 0), (1, 1), (2, 2)]
。
现在,每当您在代码中编写 vertcounter
或 diagcounter
时,请使用函数 counter(sequence_indices)
,而不是 board[ 0][x]
或 board[0][0]
,使用
first_i, first_j = sequence_indices[0]
board[first_i][first_j]
另一种优化方法是使用 board,如下所示:
如果单元格包含x
,则该单元格中的board
应包含数字1
。如果单元格包含 o
,则该单元格中的 board
应包含数字 -1
,如果单元格为空,则应为 0
.
现在要计算 rowcounter
或任何计数器,只需对这些单元格求和并将它们与 +size
进行比较(x
获胜),或者-size
(o
获胜)。
关于python - 优化井字棋检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156337/