2010-07-24 182 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