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

Python编写数独2D数组空单元格得分计算函数求助

解决方案

完整实现代码

def scoreArray(grid):
    results = []
    for x in range(9):
        for y in range(9):
            if grid[x][y] != 0:
                continue
            # 计算行得分:当前行非0元素数量
            row_score = sum(1 for num in grid[x] if num != 0)
            # 计算列得分:当前列非0元素数量
            col_score = sum(1 for row in grid if row[y] != 0)
            # 计算3x3宫得分
            start_row = (x // 3) * 3
            start_col = (y // 3) * 3
            box_score = 0
            for i in range(start_row, start_row + 3):
                for j in range(start_col, start_col + 3):
                    if grid[i][j] != 0:
                        box_score += 1
            # 总得分
            total_score = row_score + col_score + box_score
            results.append((x, y, total_score))
    return results

# 测试代码
if __name__ == "__main__":
    # 你提供的测试棋盘
    board = [
        [7,8,0,4,0,0,1,2,0],
        [6,0,0,0,7,5,0,0,9],
        [0,0,0,6,0,1,0,7,8],
        [0,0,7,0,4,0,2,6,0],
        [0,0,1,0,5,0,9,3,0],
        [9,0,4,0,6,0,0,0,5],
        [0,7,0,3,0,0,0,1,2],
        [1,2,0,0,0,7,4,0,0],
        [0,4,9,2,0,6,0,0,7]
    ]
    res = scoreArray(board)
    for item in res:
        print(list(item))

逻辑说明

  1. 行得分计算:直接取当前行grid[x],统计其中非0元素的数量即可,你原来的代码写反了行和列的索引,统计的其实是列的得分。
  2. 列得分计算:遍历所有行,取每行的第y个元素,统计非0的数量。
  3. 3x3宫得分计算:先通过整数除法找到当前单元格所属宫的左上角坐标,行方向起始为(x//3)*3,列方向起始为(y//3)*3,然后遍历这个3x3的区域,统计非0元素数量即可。

你举的X单元格例子(第二行第二列,对应数组索引x=1,y=1),传入对应棋盘调用函数就会得到(1,1,7)的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:09:01