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

数独空单元格候选值计算脚本问题:3x3宫格筛选失效及append异常

数独候选值计算脚本问题修复

你的代码主要有三个关键问题导致宫格筛选失效,同时append操作逻辑混乱:

问题分析

  • 宫格遍历提前返回:在3x3宫格的嵌套循环里,第一次迭代就执行了return True,这意味着宫格只检查了第一个单元格就直接返回,根本没完成整个3x3区域的检查,自然无法正确筛选宫格内的重复值。
  • 误用内置类型名:直接用list作为存储候选值的变量名,这会覆盖Python内置的list类型,导致后续代码出现不可预期的错误。
  • append时机错误:把添加候选值的操作放在宫格循环内部,无论n是否符合条件都会执行,完全违背了候选值的判断逻辑。

修正后的代码

# 先定义一个全局或局部的候选值列表,不要用list作为变量名
candidates = []

def possible(y, x, n):
    global grid, candidates
    # 检查行
    for i in range(9):
        if grid[y][i] == n:
            return False
    # 检查列
    for i in range(9):
        if grid[i][x] == n:
            return False
    # 计算3x3宫格的起始坐标
    x0 = (x // 3) * 3
    y0 = (y // 3) * 3
    # 遍历整个3x3宫格
    for i in range(3):
        for j in range(3):
            if grid[y0 + i][x0 + j] == n:
                return False
    # 只有当行、列、宫格都没有n时,才将其加入候选值列表
    candidates.append([y+1, x+1, n])
    return True

使用说明

  1. 提前初始化candidates列表,避免每次调用函数时重复创建或覆盖。
  2. 调用possible(y, x, n)前,确保grid是全局的9x9数独数组,y和x是0-based的空单元格坐标,n是1-9的待检查数字。
  3. 遍历所有空单元格和1-9的数字,调用该函数即可收集所有有效候选值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:57:17