用python中的参数选择所需内容

用python中的参数选择所需内容,python,Python,我有一个函数(这个函数很大,你不需要读它,特别是因为它不是英文的,它依赖于其他函数),我有一个参数“strat”。这个函数基本上是人工智能(它是有问题的游戏机器人,tic-tac-toe),通过参数“strat”,我想过滤函数的参数。我的意思是,这个函数有6种“可能性”,通过选择不同的策略,我想缩小这些可能性。如果strat='basic',那么它将只读取参数3、5和6,但如果我写入'normal',它将读取所有内容。这意味着函数接收参数并按顺序运行,它检查满足要求的第一个参数,如果不满足,则跳

我有一个函数(这个函数很大,你不需要读它,特别是因为它不是英文的,它依赖于其他函数),我有一个参数“strat”。这个函数基本上是人工智能(它是有问题的游戏机器人,tic-tac-toe),通过参数“strat”,我想过滤函数的参数。我的意思是,这个函数有6种“可能性”,通过选择不同的策略,我想缩小这些可能性。如果strat='basic',那么它将只读取参数3、5和6,但如果我写入'normal',它将读取所有内容。这意味着函数接收参数并按顺序运行,它检查满足要求的第一个参数,如果不满足,则跳到下一个。这可能会让人困惑,但我会给出一个示例,不用担心函数,只需看看有#number

def chose(tab,n,strat):
                                    #1 Victory

    if strat != 'basic':
        if identificar_tuplos_pertencentes(obter_coluna(tab, 1), n) is True:
            if obter_coluna(tab, 1)[0] == n and obter_coluna(tab, 1)[1] == n and obter_coluna(tab, 1)[2] == 0:
                return marcar_posicao(tab,n,7)
            elif obter_coluna(tab, 1)[0] == n and obter_coluna(tab, 1)[1] == 0 and obter_coluna(tab, 1)[2] == n:
                return marcar_posicao(tab,n,4)
            elif obter_coluna(tab, 1)[0] == 0 and obter_coluna(tab, 1)[1] == n and obter_coluna(tab, 1)[2] == n:
                return marcar_posicao(tab,n,1)
            
        elif identificar_tuplos_pertencentes(obter_coluna(tab, 2), n) is True:
            if obter_coluna(tab, 2)[0] == n and obter_coluna(tab, 2)[1] == n and obter_coluna(tab, 2)[2] == 0:
                return marcar_posicao(tab,n,8)
            elif obter_coluna(tab, 2)[0] == n and obter_coluna(tab, 2)[1] == 0 and obter_coluna(tab, 2)[2] == n:
                return marcar_posicao(tab,n,5)
            elif obter_coluna(tab, 2)[0] == 0 and obter_coluna(tab, 2)[1] == n and obter_coluna(tab, 2)[2] == n:
                return marcar_posicao(tab,n,2)        
            
        elif identificar_tuplos_pertencentes(obter_coluna(tab, 3), n) is True:
            if obter_coluna(tab, 3)[0] == n and obter_coluna(tab, 3)[1] == n and obter_coluna(tab, 3)[2] == 0:
                return marcar_posicao(tab,n,9)
            elif obter_coluna(tab, 3)[0] == n and obter_coluna(tab, 3)[1] == 0 and obter_coluna(tab, 3)[2] == n:
                return marcar_posicao(tab,n,6)
            elif obter_coluna(tab, 3)[0] == 0 and obter_coluna(tab, 3)[1] == n and obter_coluna(tab, 3)[2] == n:
                return marcar_posicao(tab,n,3)
            
            #Determinar Linhas
        elif identificar_tuplos_pertencentes(obter_linha(tab, 1), n) is True:
            if obter_linha(tab, 1)[0] == n and obter_linha(tab, 1)[1] == n and obter_linha(tab, 1)[2] == 0:
                return marcar_posicao(tab,n,3)
            elif obter_linha(tab, 1)[0] == n and obter_linha(tab, 1)[1] == 0 and obter_linha(tab, 1)[2] == n:
                return marcar_posicao(tab,n,2)
            elif obter_linha(tab, 1)[0] == 0 and obter_linha(tab, 1)[1] == n and obter_linha(tab, 1)[2] == n:
                return marcar_posicao(tab,n,1)
            
        elif identificar_tuplos_pertencentes(obter_linha(tab, 2), n) is True:
            if obter_linha(tab, 2)[0] == n and obter_linha(tab, 2)[1] == n and obter_linha(tab, 2)[2] == 0:
                return marcar_posicao(tab,n,6)
            elif obter_linha(tab, 2)[0] == n and obter_linha(tab, 2)[1] == 0 and obter_linha(tab, 2)[2] == n:
                return marcar_posicao(tab,n,5)
            elif obter_linha(tab, 2)[0] == 0 and obter_linha(tab, 2)[1] == n and obter_linha(tab, 2)[2] == n:
                return marcar_posicao(tab,n,4)
            
        elif identificar_tuplos_pertencentes(obter_linha(tab, 3), n) is True:
            if obter_linha(tab, 3)[0] == n and obter_linha(tab, 3)[1] == n and obter_linha(tab, 3)[2] == 0:
                return marcar_posicao(tab,n,9)
            elif obter_linha(tab, 3)[0] == n and obter_linha(tab, 3)[1] == 0 and obter_linha(tab, 3)[2] == n:
                return marcar_posicao(tab,n,8)
            elif obter_linha(tab, 3)[0] == 0 and obter_linha(tab, 3)[1] == n and obter_linha(tab, 3)[2] == n:
                return marcar_posicao(tab,n,7)
            
            #Determinar nas diagonais
        elif identificar_tuplos_pertencentes(obter_diagonal(tab, 1), n) is True:
            if obter_diagonal(tab, 1)[0] == n and obter_diagonal(tab, 1)[1] == n and obter_diagonal(tab, 1)[2] == 0:
                return marcar_posicao(tab,n,9)
            elif obter_diagonal(tab, 1)[0] == n and obter_diagonal(tab, 1)[1] == 0 and obter_diagonal(tab, 1)[2] == n:
                return marcar_posicao(tab,n,5)
            elif obter_diagonal(tab, 1)[0] == 0 and obter_diagonal(tab, 1)[1] == n and obter_diagonal(tab, 1)[2] == n:
                return marcar_posicao(tab,n,1)
            
        elif identificar_tuplos_pertencentes(obter_diagonal(tab, 2), n) is True:
            if obter_diagonal(tab, 2)[0] == n and obter_diagonal(tab, 2)[1] == n and obter_diagonal(tab, 2)[2] == 0:
                return marcar_posicao(tab,n,3)
            elif obter_diagonal(tab, 2)[0] == n and obter_diagonal(tab, 2)[1] == 0 and obter_diagonal(tab, 2)[2] == n:
                return marcar_posicao(tab,n,5)
            elif obter_diagonal(tab, 2)[0] == 0 and obter_diagonal(tab, 2)[1] == n and obter_diagonal(tab, 2)[2] == n:
                return marcar_posicao(tab,n,7)

    
    
                                            #2 Block


    elif strat != 'basic':   
        if identificar_tuplos_nao_pertencentes(obter_coluna(tab, 1), n) is True:
            if obter_coluna(tab, 1)[0] == -n and obter_coluna(tab, 1)[1] == -n and obter_coluna(tab, 1)[2] == 0:
                return marcar_posicao(tab,n,7)
            elif obter_coluna(tab, 1)[0] == -n and obter_coluna(tab, 1)[1] == 0 and obter_coluna(tab, 1)[2] == -n:
                return marcar_posicao(tab,n,4)
            elif obter_coluna(tab, 1)[0] == 0 and obter_coluna(tab, 1)[1] == -n and obter_coluna(tab, 1)[2] == -n:
                return marcar_posicao(tab,n,1)
            
        elif identificar_tuplos_nao_pertencentes(obter_coluna(tab, 2), n) is True:
            if obter_coluna(tab, 2)[0] == -n and obter_coluna(tab, 2)[1] == -n and obter_coluna(tab, 2)[2] == 0:
                return marcar_posicao(tab,n,8)
            elif obter_coluna(tab, 2)[0] == -n and obter_coluna(tab, 2)[1] == 0 and obter_coluna(tab, 2)[2] == -n:
                return marcar_posicao(tab,n,5)
            elif obter_coluna(tab, 2)[0] == 0 and obter_coluna(tab, 2)[1] == -n and obter_coluna(tab, 2)[2] == -n:
                return marcar_posicao(tab,n,2)
            
        elif identificar_tuplos_nao_pertencentes(obter_coluna(tab, 3), n) is True:
            if obter_coluna(tab, 3)[0] == -n and obter_coluna(tab, 3)[1] == -n and obter_coluna(tab, 3)[2] == 0:
                return marcar_posicao(tab,n,9)
            elif obter_coluna(tab, 3)[0] == -n and obter_coluna(tab, 3)[1] == 0 and obter_coluna(tab, 3)[2] == -n:
                return marcar_posicao(tab,n,6)
            elif obter_coluna(tab, 3)[0] == 0 and obter_coluna(tab, 3)[1] == -n and obter_coluna(tab, 3)[2] == -n:
                return marcar_posicao(tab,n,3)
            
        elif identificar_tuplos_nao_pertencentes(obter_linha(tab, 1), n) is True:
            if obter_linha(tab, 1)[0] == -n and obter_linha(tab, 1)[1] == -n and obter_linha(tab, 1)[2] == 0:
                return marcar_posicao(tab,n,3)
            elif obter_linha(tab, 1)[0] == -n and obter_linha(tab, 1)[1] == 0 and obter_linha(tab, 1)[2] == -n:
                return marcar_posicao(tab,n,2)
            elif obter_linha(tab, 1)[0] == 0 and obter_linha(tab, 1)[1] == -n and obter_linha(tab, 1)[2] == -n:
                return marcar_posicao(tab,n,1)
            
        elif identificar_tuplos_nao_pertencentes(obter_linha(tab, 2), n) is True:
            if obter_linha(tab, 2)[0] == -n and obter_linha(tab, 2)[1] == -n and obter_linha(tab, 2)[2] == 0:
                return marcar_posicao(tab,n,6)
            elif obter_linha(tab, 2)[0] == -n and obter_linha(tab, 2)[1] == 0 and obter_linha(tab, 2)[2] == -n:
                return marcar_posicao(tab,n,5)
            elif obter_linha(tab, 2)[0] == 0 and obter_linha(tab, 2)[1] == -n and obter_linha(tab, 2)[2] == -n:
                return marcar_posicao(tab,n,4)
            
        elif identificar_tuplos_nao_pertencentes(obter_linha(tab, 3), n) is True:
            if obter_linha(tab, 3)[0] == -n and obter_linha(tab, 3)[1] == -n and obter_linha(tab, 3)[2] == 0:
                return marcar_posicao(tab,n,9)
            elif obter_linha(tab, 3)[0] == -n and obter_linha(tab, 3)[1] == 0 and obter_linha(tab, 3)[2] == -n:
                return marcar_posicao(tab,n,8)
            elif obter_linha(tab, 3)[0] == 0 and obter_linha(tab, 3)[1] == -n and obter_linha(tab, 3)[2] == -n:
                return marcar_posicao(tab,n,7)
            
        elif identificar_tuplos_nao_pertencentes(obter_diagonal(tab, 1), n) is True:
            if obter_diagonal(tab, 1)[0] == -n and obter_diagonal(tab, 1)[1] == -n and obter_diagonal(tab, 1)[2] == 0:
                return marcar_posicao(tab,n,9)
            elif obter_diagonal(tab, 1)[0] == -n and obter_diagonal(tab, 1)[1] == 0 and obter_diagonal(tab, 1)[2] == -n:
                return marcar_posicao(tab,n,5)
            elif obter_diagonal(tab, 1)[0] == 0 and obter_diagonal(tab, 1)[1] == -n and obter_diagonal(tab, 1)[2] == -n:
                return marcar_posicao(tab,n,1)
            
        elif identificar_tuplos_nao_pertencentes(obter_diagonal(tab, 2), n) is True:
            if obter_diagonal(tab, 2)[0] == -n and obter_diagonal(tab, 2)[1] == -n and obter_diagonal(tab, 2)[2] == 0:
                return marcar_posicao(tab,n,3)
            elif obter_diagonal(tab, 2)[0] == -n and obter_diagonal(tab, 2)[1] == 0 and obter_diagonal(tab, 2)[2] == -n:
                return marcar_posicao(tab,n,5)
            elif obter_diagonal(tab, 2)[0] == 0 and obter_diagonal(tab, 2)[1] == -n and obter_diagonal(tab, 2)[2] == -n:
                return marcar_posicao(tab,n,7)
    
    
                            #3 Center

    elif tab[1][1] == 0:
        return marcar_posicao(tab,n,5)

    
                       #4 Opposite Corner

    elif strat != 'basic':
        if tab[0][0] != -n and tab[2][2] == 0:
            return marcar_posicao(tab,n,9)
        elif tab[0][2] != -n and tab[2][0] == 0:
            return marcar_posicao(tab,n,7)
        elif tab[2][0] != -n and tab[0][2] == 0:
            return marcar_posicao(tab,n,3)
        elif tab[2][2] != -n and tab[0][0] == 0:
            return marcar_posicao(tab,n,1)

    
                             #5 Empty Corner

    elif tab[0][0] == 0:
        return marcar_posicao(tab,n,1)
    elif tab[0][2] == 0:
        return marcar_posicao(tab,n,3)
    elif tab[2][0] == 0:
        return marcar_posicao(tab,n,7)
    elif tab[2][2] == 0:
        return marcar_posicao(tab,n,9)

    
                           #6 What's left
    elif tab [0][1] == 0:
        return marcar_posicao(tab,n,2)
    elif tab [1][0] == 0:
        return marcar_posicao(tab,n,4)
    elif tab [1][2] == 0:
        return marcar_posicao(tab,n,6)
    elif tab [2][1] == 0:
        return marcar_posicao(tab,n,8) 
看看这个,如果我写“select(tab,n,'basic'),在这个例子中tab和n与此无关,函数将跳转1和2到3,如果3不起作用,它将跳转4,然后跳转到5,如果必要的话,再跳转到6。我所做的是把这些行放在“elif strat!=”basic':“在数字之前,但它不起作用,我不知道为什么。如果我的strat=='basic',它会起作用,但是如果strat=='normal',它就不会起作用。这特别令人讨厌,因为在我的实际代码中,strat可以是3种不同的东西。
我希望你能理解我的问题。提前谢谢大家!

更好的方法可能是将操作定义为函数,然后将这些操作存储在列表中,例如

def action_any_empty(board):
...

def action_empty_corner(board):
...

def action_opposite_corner(board):
...

easy =   [action_any_empty]
medium = [action_empty_corner] + easy
hard =   [action_opposite_corner] + medium

strats={"easy":easy,"medium":medium,"hard":hard}

for action in strats[difficulty]:
    move = action(board)
    if move:
        return move

最好将它们作为类而不仅仅是函数,然后它们都可以从某个父“action”类继承,对它们进行迭代更安全。

更好的方法可能是将动作定义为函数,然后将这些动作存储在列表中,例如

def action_any_empty(board):
...

def action_empty_corner(board):
...

def action_opposite_corner(board):
...

easy =   [action_any_empty]
medium = [action_empty_corner] + easy
hard =   [action_opposite_corner] + medium

strats={"easy":easy,"medium":medium,"hard":hard}

for action in strats[difficulty]:
    move = action(board)
    if move:
        return move

最好将它们作为类而不仅仅是函数,然后它们都可以从某个父“action”类继承,对它们进行迭代更安全。

可以将函数作为参数传递,并将函数存储在列表中,这将是一种更好的方法。可以将函数作为参数传递,并将函数存储在列表中,这将d是一个更好的方法。它说我不能用两个函数做什么?它说你不能用两个函数做什么?你仍然可以用一个“选择”函数,但用这个逻辑来管理该函数的操作和最终输出。它说我不能用两个函数做什么?它说你不能用两个函数做什么?你仍然可以有一个单独的“选择”功能,但使用此逻辑来管理该功能的操作和最终输出