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

跟随TechWithTim编写的Python数独求解器代码无法执行求助

问题分析与修复

你的代码存在两个核心问题导致无法正常执行:

1. 缩进错误

print_board函数中,遍历列的for j循环被错误嵌套在if i % 3 == 0的代码块内,导致只有当行数是3的倍数时才会打印该行内容,其他行完全不输出。

2. 运算符误用

你用了位运算& 3来判断行/列是否为3的倍数,但数独的分隔逻辑是每3行/列,应该用取模运算% 3。另外代码中的&是HTML转义后的符号,实际要写成%。


修正后的完整代码

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]
]

def print_board(bo):
    for i in range(len(bo)):
        # 每3行打印分隔线(跳过第0行)
        if i % 3 == 0 and i != 0:
            print('- - - - - - - - - - - - -')
        # 遍历列的循环要和上面的if同级,不能嵌套
        for j in range(len(bo[0])):
            # 每3列打印分隔符(跳过第0列)
            if j % 3 == 0 and j != 0:
                print(' | ', end='')
            if j == 8:
                print(bo[i][j])
            else:
                print(str(bo[i][j]) + ' ', end='')

print_board(board)

def find_empty(bo):
    for i in range(len(bo)):
        for j in range(len(bo[0])):
            if bo[i][j] == 0:
                return (i, j)  # row, col

修复说明

  • 调整了for j循环的缩进,确保每一行都会被遍历打印
  • 将& 3替换为% 3,正确实现每3行/列的分隔逻辑
  • 修正了HTML转义的&符号为Python的取模运算符%

运行修正后的代码,就能正常打印出格式化的数独棋盘了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:32:24