用python中的参数选择所需内容
我有一个函数(这个函数很大,你不需要读它,特别是因为它不是英文的,它依赖于其他函数),我有一个参数“strat”。这个函数基本上是人工智能(它是有问题的游戏机器人,tic-tac-toe),通过参数“strat”,我想过滤函数的参数。我的意思是,这个函数有6种“可能性”,通过选择不同的策略,我想缩小这些可能性。如果strat='basic',那么它将只读取参数3、5和6,但如果我写入'normal',它将读取所有内容。这意味着函数接收参数并按顺序运行,它检查满足要求的第一个参数,如果不满足,则跳到下一个。这可能会让人困惑,但我会给出一个示例,不用担心函数,只需看看有#number用python中的参数选择所需内容,python,Python,我有一个函数(这个函数很大,你不需要读它,特别是因为它不是英文的,它依赖于其他函数),我有一个参数“strat”。这个函数基本上是人工智能(它是有问题的游戏机器人,tic-tac-toe),通过参数“strat”,我想过滤函数的参数。我的意思是,这个函数有6种“可能性”,通过选择不同的策略,我想缩小这些可能性。如果strat='basic',那么它将只读取参数3、5和6,但如果我写入'normal',它将读取所有内容。这意味着函数接收参数并按顺序运行,它检查满足要求的第一个参数,如果不满足,则跳
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是一个更好的方法。它说我不能用两个函数做什么?它说你不能用两个函数做什么?你仍然可以用一个“选择”函数,但用这个逻辑来管理该函数的操作和最终输出。它说我不能用两个函数做什么?它说你不能用两个函数做什么?你仍然可以有一个单独的“选择”功能,但使用此逻辑来管理该功能的操作和最终输出