Python 优化tic-tac-toe检查
对于我的一个项目,我必须做一个tic-tac-toe解算器,我想寻求一些优化代码的帮助 任务:根据获胜者(x或o),返回相应的结果 我是如何做到的:我检查了水平、垂直和对角线策略的结果 我需要帮助的是:我主要是重复相同的代码,但每种情况下的if语句不同,我只是想知道是否有更通用的方法来实现这一点 当前代码: (对角获胜) 横向胜利:Python 优化tic-tac-toe检查,python,optimization,tic-tac-toe,Python,Optimization,Tic Tac Toe,对于我的一个项目,我必须做一个tic-tac-toe解算器,我想寻求一些优化代码的帮助 任务:根据获胜者(x或o),返回相应的结果 我是如何做到的:我检查了水平、垂直和对角线策略的结果 我需要帮助的是:我主要是重复相同的代码,但每种情况下的if语句不同,我只是想知道是否有更通用的方法来实现这一点 当前代码: (对角获胜) 横向胜利: if vertcounter==size and board[0][x]=="x": print("Win vertically")
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_index=[(0,0)、(0,1)、(0,2)]
。主对角线应该是sequence_index=[(0,0)、(1,1)、(2,2)]
现在,每当您在代码vertcounter
或diagcounter
中写入代码时,请使用函数计数器(序列索引)
,而不是板[0][x]
或板[0][0]
first_i, first_j = sequence_indices[0]
board[first_i][first_j]
另一种优化方法是像这样使用电路板: 如果一个单元格包含
x
,则该单元格中的board
应包含编号1
。如果单元包含o
,则该单元中的板应包含编号-1
,如果单元为空,则应为0
现在要计算rowcounter
或任何计数器,只需对这些单元格求和,并将它们与+size
(x
wins)或-size
(o
wins)进行比较。您可以创建一个函数来处理“winning”,并让您的if语句调用它
def win(method, team):
print("Win "+method)
return team+" has won"
if diagcounter==size and (board[0][0]=="x") :
return(win("diagonally", "x"))
elif diagcounter==size and (board[0][0]=="o"):
return(win("diagonally", "o"))
if vertcounter==size and board[0][x]=="x":
return(win("vertically", "x"))
elif vertcounter==size and board[0][x]=="o":
return(win("vertically", "o"))
可能的副本谢谢!我会在不太忙的时候研究这些指标,但是你的数值方法非常好。
def win(method, team):
print("Win "+method)
return team+" has won"
if diagcounter==size and (board[0][0]=="x") :
return(win("diagonally", "x"))
elif diagcounter==size and (board[0][0]=="o"):
return(win("diagonally", "o"))
if vertcounter==size and board[0][x]=="x":
return(win("vertically", "x"))
elif vertcounter==size and board[0][x]=="o":
return(win("vertically", "o"))