2010-07-24 181 views
1

嗨我一直在编写一个控制台版本的扫雷,只是为了学习一些Python的基础知识。它使用记录在字典中的坐标系。现在,我已经能够成功实现它,但是使用坐标的“x,y”变量访问或分配值给特定的坐标键看起来很笨重。我提出了两种不同的方式,但当我必须经常使用它们时,它们看起来并不优雅。Python:使用变量访问字典键的值

for i in range(1, ROWS+1): 
     for j in range(1, COLS+1): 
      mine_field["%i,%i" % (i,j)] = 0 

for i in range(1, ROWS+1): 
     for j in range(1, COLS+1): 
      mine_field[",".join([i, j])] = 0 

它的工作不够好,但它并开始转让或交换价值时显得凌乱。有没有更好的办法可以做到这一点?

在此先感谢。

回答

5

为什么不能简单地用一个元组的关键?

for i in range(1, ROWS+1): 
    for j in range(1, COLS+1): 
     mine_field[(i, j)] = 0 # you don't even need the parentheses! 

使用这种方法,你可以用逗号分隔的指标,像这样:

d = {(1,2):3} 
print d[1, 2] # will print 3 

而且顺便说一下你为什么要使用基于一个指标?

+0

啊元组是我的问题的完美解决方案。谢谢。而基于单一指标的印刷主要是为了美观。 1,1本来就是第一列中的第一个盒子。 – 2010-07-24 16:21:18

+0

在处理输入/输出和内部学习使用基于0的Python(C等)方式时,我经常发现它足以处理+ 1/-1转换。 – 2010-07-24 21:13:52

+0

我第二。使用基于零的索引更容易,只有在打印坐标时才转换它。 – AndiDog 2010-07-25 11:47:12

1

如果您mine_field列表的列表,那么你可以使用更好的语法:

mine_field = [[0]*ROWS for i in range(COLS)] 

mine_field[i][j] = 1 
+0

这是一个好点!我还没有尝试在Python中使用列表的列表,所以我想我会创建一个v2.0并实现它来获得一些练习。谢谢! – 2010-07-24 16:21:46