我在Python上用字典做了一个国际象棋程序,为了建立我的棋盘,我做了。
EmptyBoard = {
8:['☐','☒','☐','☒','☐','☒','☐','☒'],
7:['☒','☐','☒','☐','☒','☐','☒','☐'],
6:['☐','☒','☐','☒','☐','☒','☐','☒'],
5:['☒','☐','☒','☐','☒','☐','☒','☐'],
4:['☐','☒','☐','☒','☐','☒','☐','☒'],
3:['☒','☐','☒','☐','☒','☐','☒','☐'],
2:['☐','☒','☐','☒','☐','☒','☐','☒'],
1:['☒','☐','☒','☐','☒','☐','☒','☐'],
' ':['⒜','⒝','⒞','⒟','⒠','⒡','⒢','⒣']
} #regular letters aren't wide enough
Default = {
8:['♜','♞','♝','♛','♚','♝','♞','♜'],
7:['♟','♟','♟','♟','♟','♟','♟','♟'],
2:['♙','♙','♙','♙','♙','♙','♙','♙'],
1:['♖','♘','♗','♕','♔','♗','♘','♖']
}
Board = {}
def NewGame():
Board.update(EmptyBoard)
Board.update(Default)
# some more code
NewGame()
这是很好的,直到我必须编辑一个区块在 Board
像这样。
Board[3][2] = "X"
print(EmptyBoard[3][2]) # ==> Results in 'X', should stay '☐' or '☒'
这就改变了 Board[x][y]
而无论哪一个 EmptyBoard
和 Default
该 [x][y]
碰巧在。
这样就可以在棋子第一次下棋后的每一步棋中克隆出棋子。
我怎样才能让它只在 Board
是编辑过的?
两者 Default
和 EmptyBoard
是字典从东西到列表。当你调用 update
在 NewGame
,你设置 Board[3]
乃是指完全相同的列表,如 EmptyBoard[3]
. 然后,如果你写一些类似:
Board[3][4] = X
你改变了那个列表--它是由 Board
和 EmptyBord
(或 Board
和 Default
).
要修复它,请使用 deepcopy
:
import copy
def NewGame():
Board.update(copy.deepcopy(EmptyBoard))
Board.update(copy.deepcopy(Default))
...
还有一件事--python中的惯例是以小字母开头的变量。