Python 作为输入传递给递归函数的列表在该函数中的作用类似于全局函数,而不是局部函数 def miniMax(列表、深度、isMaximizing、jogadas): 分数={'X':1,'O':-1,'empate':0} 结果=checkWinner(liste.copy(),jogadas) 如果结果不是(无): 返回(分数[结果]) 如果是最大化: 最佳得分=-8000000 对于范围(0,3)内的i: 对于范围(0,3)内的j: 如果liste[i][j]=“Nada”: 列表[i][j]=“X” 分数=极大极小值(liste.copy(),深度+1,False,jogadas) liste[i][j]=“O” 如果得分>最佳得分: 最佳分数 返回最佳分数 其他: 最佳分数=8000000 对于范围(0,3)内的i: 对于范围(0,3)内的j: 如果liste[i][j]=“Nada”: liste[i][j]=“O” 分数=极大极小值(liste.copy(),深度+1,真,jogadas) 列表[i][j]=“X” 如果得分
在运行函数minimax后,lista会发生更改。Python 作为输入传递给递归函数的列表在该函数中的作用类似于全局函数,而不是局部函数 def miniMax(列表、深度、isMaximizing、jogadas): 分数={'X':1,'O':-1,'empate':0} 结果=checkWinner(liste.copy(),jogadas) 如果结果不是(无): 返回(分数[结果]) 如果是最大化: 最佳得分=-8000000 对于范围(0,3)内的i: 对于范围(0,3)内的j: 如果liste[i][j]=“Nada”: 列表[i][j]=“X” 分数=极大极小值(liste.copy(),深度+1,False,jogadas) liste[i][j]=“O” 如果得分>最佳得分: 最佳分数 返回最佳分数 其他: 最佳分数=8000000 对于范围(0,3)内的i: 对于范围(0,3)内的j: 如果liste[i][j]=“Nada”: liste[i][j]=“O” 分数=极大极小值(liste.copy(),深度+1,真,jogadas) 列表[i][j]=“X” 如果得分,python,list,function,recursion,Python,List,Function,Recursion,在运行函数minimax后,lista会发生更改。 我曾尝试使用.copy()方法,但函数中的列表仍在更改据我所知,您使用的是二维列表,因此使用副本是不够的,因为它只会复制外部列表。更好的解决方案是使用copy.deepcopy: def miniMax(liste, depth,isMaximizing, jogadas): scores = {'X': 1, 'O': -1, 'empate': 0} result = checkWinner(liste.copy(), j
我曾尝试使用.copy()方法,但函数中的列表仍在更改据我所知,您使用的是二维列表,因此使用副本是不够的,因为它只会复制外部列表。更好的解决方案是使用
copy.deepcopy
:
def miniMax(liste, depth,isMaximizing, jogadas):
scores = {'X': 1, 'O': -1, 'empate': 0}
result = checkWinner(liste.copy(), jogadas)
if result is not (None):
return (scores[result])
if isMaximizing:
bestScore = -80000000
for i in range(0, 3):
for j in range(0, 3):
if liste[i][j] == "Nada":
liste[i][j] = "X"
score = miniMax(liste.copy(), depth + 1, False, jogadas)
liste[i][j] = "O"
if score > bestScore:
bestScore = score
return bestScore
else:
bestScore = 80000000
for i in range(0, 3):
for j in range(0, 3):
if liste[i][j] == "Nada":
liste[i][j] = "O"
score = miniMax(liste.copy(), depth + 1, True, jogadas)
liste[i][j] = "X"
if score < bestScore:
bestScore = score
return bestScore
score = miniMax(lista.copy(), depth, True, jogadas)
print(lista)
from copy import deepcopy
score = miniMax(deepcopy(lista), depth, True, jogadas)