Python:在随机索引处更改列表的元素

时间:2014-10-17 03:55:13

标签: python list loops for-loop random

我正在使用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'只是一个没有我的板空间。

1 个答案:

答案 0 :(得分:1)

打印零的唯一方法是

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

用于每次迭代。由于"birthday paradox"

,这可能会出乎意料地降低NUM_ROWSNUM_COLS

根据Chris的建议,制作电路板的更简单方法

cells = ['O'] * NUM_ROWS * NUM_COLS
cells[:NUM_MINES] = ['X'] * NUM_MINES
random.shuffle(cells)
BOARD = [cells[i::NUM_ROWS] for i in range(NUM_ROWS)]