2017-08-01 67 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