2014-10-17 83 views
0

我正在研究python中的簡單掃雷遊戲,並且試圖創建一個將地雷插入空板的函數。Python:在隨機索引中更改列表元素

注意,板是在列表中的一個列表的形式,像這樣:

[[col, col, col...],[col,col,col...],[...],[...]...] 

我的功能看起來是這樣的:

def insert_mines(NUM_MINES): 
for mine in range(NUM_MINES): 
    rand_row = randint(0, NUM_ROWS - 1) 
    rand_col = randint(0, NUM_COLS - 1) 
    if BOARD[rand_row][rand_col] == 'O': 
     BOARD[rand_row][rand_col] = 'X' 
     NUM_MINES = NUM_MINES - 1 
    else: 
     BOARD[rand_row][rand_col] = 'X' 

print NUM_MINES 

當我num_mines = 96運行,它從不打印零點,這是所有地雷插入後應打印的內容。

這可能是什麼原因造成的?

請注意'X'代表礦井,'O'只是一個沒有礦井的電路板空間。

+0

的建議順便說一句,分發礦山最均勻的辦法是把在你的網格前面需要的地雷數量,然後洗牌。 – 2014-10-17 04:02:26

+1

不能保證經過96次迭代後,所有的空白空間將被選中並替換爲我的,因爲採樣在網格上均勻地完成;即採樣的索引可能會重複。 – 2014-10-17 04:06:34

回答

1

具有零印刷的唯一途徑是如果

BOARD[rand_row][rand_col] == 'O' 

迭代。根據NUM_ROWSNUM_COLS這可能是令人驚訝的可能性不大,由於"birthday paradox"

更簡單的方法,使您的主板由克里斯

+0

比我的更優雅的答案。謝謝 – JavascriptLoser 2014-10-17 05:26:45

相關問題