Python 优化tic-tac-toe检查

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")

对于我的一个项目,我必须做一个tic-tac-toe解算器,我想寻求一些优化代码的帮助

任务:根据获胜者(x或o),返回相应的结果

我是如何做到的:我检查了水平、垂直和对角线策略的结果

我需要帮助的是:我主要是重复相同的代码,但每种情况下的if语句不同,我只是想知道是否有更通用的方法来实现这一点

当前代码: (对角获胜)

横向胜利:

 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"))