首页 > 解决方案 > 在二维列表中的随机位置插入值

问题描述

我正在尝试使用 python 中的列表制作扫雷游戏。到目前为止我有这个代码:

import random as r
import sys

#dimension of board and number of bombs
width = int(sys.argv[1])
height = int(sys.argv[2])
b = int(sys.argv[3])

#creates the board
board = [[0.0] * width] * height

#places bombs
for i in range(b):
    x = r.randint(0, width - 1)
    y = r.randint(0, height - 1)
    board.insert(x, y, 0.1)

#prints board
for i in range(len(board)):
    for j in range(len(board[i]))
        print(board[i][j], end=" ")

我试图将炸弹放置在板上的随机位置,但insert()只接受 2 个参数。有没有其他方法可以做到这一点?

我有一个想法,在第 1 行放置一个随机炸弹,然后在第 2 行放置一个随机炸弹,依此类推,一旦它击中第 n 行,它就会循环回到第 1 行,直到放置了足够的炸弹,但我不确定是否它会起作用(而且我无法测试它,因为我也知道如何做到这一点)。我觉得这个解决方案效率很低,所以我也想知道是否有更有效的方法来做到这一点。

标签: pythonlist2dminesweeper

解决方案


使用赋值而不是插入: board[x][y] = 0.1

此外,请小心初始化您的 2D 板。board = [[0.0] * width] * height将创建一个大小列表,width然后将指针复制到所有的列表,height即如果您将 0.1 分配给第一行中的第一个单元格,则将分配board[0][0]行中的第一项,因为它们都是相同的列表。你必须改为使用

   board = [[0.0]*width for _ in range(height)]

推荐阅读