You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写函数在嵌套列表表示的扫雷棋盘上随机放置地雷

扫雷lay_mines函数正确实现方案

你之前的参考代码存在几个核心错误:

  • 不能直接遍历数字类型的number_of_mines,for _ in number_of_mines会直接触发类型错误
  • random.sample(free, number_of_mines)本身就会一次性返回指定数量的不重复坐标,不需要放在循环里重复执行
  • 列表取值赋值用方括号[],你写的field(mines)用了圆括号属于语法错误,且拿到坐标后需要分别取出行列索引再赋值
  • 你定义的field是行优先存储:field[行索引][列索引],而free里存的元组是(x,y)对应(列索引, 行索引),赋值时要注意顺序对应

方案1:用random.sample实现(推荐,不会重复选坐标)

直接一次性抽取指定数量的不重复空闲坐标,遍历赋值即可,代码如下:

import random

def lay_mines(field, free, number_of_mines):
    # 一次性抽取number_of_mines个不重复的空闲坐标
    mine_coords = random.sample(free, k=number_of_mines)
    for col, row in mine_coords:
        # field[行][列] 赋值为地雷标记"x"
        field[row][col] = "x"

如果你后续还要用free列表存储剩余空闲坐标,可以在赋值后把对应坐标从free里移除:

def lay_mines(field, free, number_of_mines):
    mine_coords = random.sample(free, k=number_of_mines)
    for col, row in mine_coords:
        field[row][col] = "x"
        free.remove((col, row))

方案2:用random.choice实现

如果要每次抽一个坐标,抽到后移除避免重复,代码如下:

import random

def lay_mines(field, free, number_of_mines):
    for _ in range(number_of_mines):
        # 随机选一个空闲坐标
        col, row = random.choice(free)
        field[row][col] = "x"
        # 从空闲列表里移除已经布雷的坐标,避免重复布雷
        free.remove((col, row))

内容的提问来源于stack exchange,提问作者Goro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:45:03