2017-08-01 77 views
0

我正在嘗試我的手在基於文本的國際象棋遊戲,我目前正在制定一個系統,我可以用來計算板上的位置。下面是我目前採用的方法的一個片段:訪問嵌套在字典中的元組的索引

_file = ('A','B','C','D','E','F','G','H') 

A1 = {'File' : _file[0], 'Rank' : _rank[0], 
'Color' : color['Dark'], 'Piece' : pieces['None']}, 

字典A1描述了方形的棋盤上,並具有爲方形,其顏色的文件和等級的參數,並且是它哪塊。所有值當前都引用與_file相似的元組。這些作品使用相同的系統來描述它們在哪裏以及它們是什麼。

我希望能夠寫一些代碼段來改變我的字典裏面的值的元組索引,這樣它看起來像這樣:

A1 = {'File' : _file[1], 'Rank' : _rank[0], 
'Color' : color['Dark'], 'Piece' : pieces['None']}, 

但一切我到目前爲止已經試過對由_file [0]引用的字符串'A'的索引進行操作。例如,

print (A1['File'][1]) 

給了我們一個錯誤索引是超出了範圍,因爲我們真的告訴它這一點:

print (_file[0][1]) # which means this: 
print 'A'[1] 

當然,一個字母串不具有索引[1]。

爲了簡單起見,我最終可能會拋棄這種方法並使用整數而不是元組,但如果我能得到這個工作,它會更容易閱讀(我認爲)。有什麼方法可以在一個嵌套元組的索引?

+0

爲什麼' A1 = {'File':_file [0],'Rank':_rank [0], 'Color':color ['Dark'],'Piece':pieces ['None']}''File' :_file [0]'不''文件':_file' –

+0

因爲它的文件d是A,它位於_file [0] – John

+1

是的,有辦法,但你沒有嵌套元組。 –

回答

1

如果你想改變在字典中的File的價值,你需要用新的指標,以重新分配它,例如:

_file = ('A','B','C','D','E','F','G','H') 
A1 = {'File' : _file[0], 'Rank' : _rank[0], 
'Color' : color['Dark'], 'Piece' : pieces['None']}, 
# _file[0] will be replaced with 'A' in the above dicitonary 

A1['File'] = _file[1] 

# now it will be 'B' instead 
+0

這可以改變附加在'文件'上的值,但是從長遠來看,我需要一些方法來檢查,添加和從該索引中減去。例如,如果我在A1上有一輛車,並且想將它移動到右側三個方格,我需要在其_file索引中加3。或者,如果我想將一塊棋子移動到任意方格中,我需要檢查目標方格的等級和檔案,以確保友好棋子不會先到達那裏。如果沒有簡單的方法來獲取該索引,我可能需要取消這個並嘗試一種不同的方法。 – John

+1

如果是這種情況,則只能改爲存儲索引。就像'A1 = {'File':0}'然後打印位置:'print _file [A1 ['File']]' –

+0

@John您不存儲索引,因此沒有檢查或更改的索引。 – Goyo

1

該字典包含對_file對象中的插槽的引用。 當您致電A1['File']它實際上指向_file[0]對象。你得到這個對象,而不是你想象中的元組。

您可以更新字典裏面的元組的索引值: A1['File'] = _file[1],然後當你打電話A1['File']你會得到_file[1]。你需要保持元組的索引作爲A字典的一部分,並且每當索引更新時,也要更新元組索引。

_file = ('A','B','C','D','E','F','G','H') 
A1 = {'File' : _file[0], 'idx': 0} 

def move_up(d): 
    d['idx'] += 1 
    d['File'] = _file[d['idx']] 

輸出

>>> A1 
{'idx': 0, 'File': 'A'} 
>>> move_up(A1) 
>>> A1 
{'idx': 1, 'File': 'B'} 
+0

這可能工作!我會玩弄它,並會讓你知道它是如何發生的。 – John

+1

你可以將3個第一行'move_up'壓縮成一個單獨的'd ['idx'] + = 1'語句...... –

+0

@brunodesthuilliers我編輯了答案,這看起來更優雅。謝謝 – Vinny