列表副本修改原始列表python

时间:2017-07-13 00:05:06

标签: python list copy

我正在尝试制作一款游戏,该游戏实现了修剪过的a-b极小极大游戏树搜索井字游戏(X和Os,结和十字架等)。但是,我还没有。我目前正在编写代码来创建tic-tac-toe板并为板分配点。 这是tic-tac-toe板的代码 - 它现在使用+和 - 而不是X和O,这样我就可以直观地测试我的minimax代码。

class Tictactoe:
__game = [[0, 0, 0] for i in range(0, 3)]

def print(self):
    for i in range(0, 3):
        for j in self.__game[i]:
            print(j, end=" ")
        print()

def playMove(self, max, i, j):
    if max:
        self.__game[i][j] = '+'
    else:
        self.__game[i][j] = '-'

def testMove(self, max, i, j):
    temp = list(self.__game)
    if max:
        temp[i][j] = '+'
    else:
        temp[i][j] = '-'
    return temp

def getState(self):
    return list(self.__game)

def getValue(self, symbol, game):
    diag1 = True
    diag2 = True
    for i in range(0, 3):
        column = True
        row = True
        for j in range(0, 3):
            row &= game[i][j] == symbol
            column &= game[j][i] == symbol
            if i==j:
                diag1 &= game[i][j] == symbol
                diag2 &= game[i][2-j] == symbol
    if row or column or diag1 or diag2:
        return 1
    return 0

使用Tictactoe的程序如下:

from tictactoe import Tictactoe

t = Tictactoe()

def main():
    global t
    t.playMove(True,0,2)
    t.playMove(True,1,1)
    t.playMove(True,2,2)

    t.print()
    print(t.getValue('+',t.getState()))
    print(t.getValue('-',t.getState()))
    print(t.getValue('+',t.testMove(True,2,0)))
    t.print()

main()

暂时忽略表单 - 我只是想让Tictactoe方法正常工作。运行代码时,我得到了这个:

0 0 + 
0 + 0 
0 0 + 
0
0
1
0 0 + 
0 + 0 
+ 0 + 

我的问题是,我希望能够在做出特定动作后得到一块板的暂定分数 - 这就是这条线

(t.getValue('+',t.testMove(True,2,0))

应该制作游戏板的副本以测试移动。

def testMove(self, max, i, j):
    temp = list(self.__game)
    if max:
        temp[i][j] = '+'
    else:
        temp[i][j] = '-'
    return temp

但是,正如您所看到的,我的打印方法仅打印ACTUAL游戏板 - 不应该通过测试移动板的副本来影响它。但是,我们可以看到在(2,2)处添加一个点的测试实际上增加了游戏的这一点。如果有人能够确切地看到这里发生的事情会很棒。

0 个答案:

没有答案