Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 作为输入传递给递归函数的列表在该函数中的作用类似于全局函数,而不是局部函数 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

在运行函数minimax后,lista会发生更改。
我曾尝试使用.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)