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

Python扫雷游戏中相邻地雷计数递增功能实现问题求助

Python扫雷游戏中相邻地雷计数递增功能实现问题求助

嗨,我帮你看看这个问题!你的代码里确实有几个关键逻辑问题,导致相邻地雷的计数没有正确更新到new_grid里,咱们一步步梳理并修正:

问题分析

  1. 嵌套函数与递归逻辑混乱:你在border_check里嵌套定义了increment函数还进行递归调用,这不仅让执行流程变得混乱,而且根本没有正确触发计数的更新逻辑。
  2. 边界检查范围错误:代码里用range(len(value))来判断行的合法性,但value是单个格子的内容(比如"-"或"#"),len(value)永远是1,这完全错误,应该用整个网格的行长度len(grid)和每行的列长度len(row)来做边界判断。
  3. 计数逻辑颠倒:当前代码的逻辑是“如果周围格子是地雷,就给当前格子加1”,但扫雷的正确逻辑应该是“当当前格子是地雷时,给周围所有非地雷的格子各加1”,这才是相邻地雷计数的正确方式。
  4. 初始化的小问题:new_grid的列表推导式写法不够清晰,而且容易出错,建议先初始化全0网格,再填充地雷位置。

修正后的代码

positions = [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]]
mine = "#"

grid = [
    ["-", "-", "-", "#", "#"],
    ["-", "#", "-", "-", "-"],
    ["-", "-", "#", "-", "-"],
    ["-", "#", "#", "-", "-"],
    ["-", "-", "-", "-", "-"],
]

def minesweeper(grid):
    # 初始化new_grid为全0的二维数组,行数和列数和原网格一致
    rows = len(grid)
    cols = len(grid[0]) if rows > 0 else 0
    new_grid = [[0 for _ in range(cols)] for _ in range(rows)]
    
    # 先把地雷位置填充到new_grid里
    for row_i in range(rows):
        for col_i in range(cols):
            if grid[row_i][col_i] == mine:
                new_grid[row_i][col_i] = mine
    
    # 遍历每个格子,处理地雷周围的计数
    for row_i in range(rows):
        for col_i in range(cols):
            # 如果当前格子是地雷,就给周围8个方向的格子加1
            if grid[row_i][col_i] == mine:
                for dr, dc in positions:
                    # 计算周围格子的坐标
                    neighbor_row = row_i + dr
                    neighbor_col = col_i + dc
                    # 检查坐标是否在合法范围内,且不是地雷
                    if 0 <= neighbor_row < rows and 0 <= neighbor_col < cols:
                        if new_grid[neighbor_row][neighbor_col] != mine:
                            new_grid[neighbor_row][neighbor_col] += 1
    
    # 输出结果
    def minesweeper_output():
        for row in new_grid:
            # 把每个元素转成字符串,用空格分隔输出
            print(" ".join(str(item) for item in row))
    minesweeper_output()

minesweeper(grid)

运行结果

执行上面的代码后,会输出你需要的正确结果:

1 1 2 # #
1 # 3 3 2
2 4 # 2 0
1 # # 2 0
1 2 2 1 0

备注:内容来源于stack exchange,提问作者mworthington1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:05:28