python - 在二维列表中的随机位置插入值
问题描述
我正在尝试使用 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 行,直到放置了足够的炸弹,但我不确定是否它会起作用(而且我无法测试它,因为我也知道如何做到这一点)。我觉得这个解决方案效率很低,所以我也想知道是否有更有效的方法来做到这一点。
解决方案
使用赋值而不是插入:
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)]
推荐阅读
- c++ - 尝试创建可变参数 C++ 输入函数
- python - Heroku,由于 bash 导致运行 django 应用程序出现问题:ps:scale: command not found
- javascript - jQuery:使用 setInterval() 淡入和淡出 html 音频
- git - Git 分支和分叉问题 - 冲突
- python - 删除 Cogs 中的默认帮助命令并替换新的自定义命令。不和谐.py
- javascript - 如何编写与 Webpack Encore 兼容的 jQuery 插件
- reactjs - 在 React 打字稿中将状态设置为对象/大数据对象的动态数组
- android - Android 应用程序,导航视图时的最佳实践
- text - 有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?
- header - 如何设置推荐人策略