跟随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
相关产品推荐
相关产品推荐

