如何用Python random库优雅地在扫雷二维方阵中放置10个不重复地雷?
优雅实现扫雷布雷方案
直接用random.sample()就能完美解决你的问题,不用循环试错,代码简洁还能保证10个地雷位置绝对不重复,思路如下:
- 把二维棋盘的所有格子转换成一维索引:比如n×n的棋盘,总共有
n*n个格子,索引从0到n*n-1 - 用
random.sample()从这些索引里随机挑选10个不重复的样本 - 把选中的一维索引转回到二维坐标:
行号 = 索引 // n,列号 = 索引 % n - 最后把这些坐标对应的棋盘位置设为1即可
完整代码示例
import random # 获取用户输入的棋盘尺寸 n = int(input("请输入正方形棋盘的尺寸:")) # 初始化全0的n×n棋盘 board = [[0 for _ in range(n)] for _ in range(n)] # 生成10个不重复的一维索引 mine_indices = random.sample(range(n * n), 10) # 给棋盘布雷 for idx in mine_indices: row = idx // n col = idx % n board[row][col] = 1
为什么这个方案更优雅?
- 完全避免了「随机选位置→判断是否已布雷→重复操作」的繁琐逻辑,
random.sample()内置就保证了样本的唯一性 - 代码行数少,逻辑清晰,可读性强
- 不管棋盘多大(只要总格子数≥10),都能稳定运行,不会出现因为重复选位置导致的额外循环耗时
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

