Python数独布局异常:无法按行正确填入数字求助
解决数独布局重复打印的问题
你的代码核心问题出在多余的外层循环和错误的条件判断,导致整个数独被重复打印3次,同时分隔符逻辑混乱。下面是具体的修复方向和修正后的代码:
问题分析
- 多余的外层循环:
for c in range(3)会让你遍历整个数独列表3次,直接导致重复打印3遍数独。 - 条件判断逻辑错误:
if c == 0 or 2 or 8在Python中会被解析为if (c == 0) or 2 or 8,由于非0值都为True,这个条件永远成立,所以每次循环都会打印分隔线。 - 修改原始数据:你直接把列表中的0替换为'.',会破坏原始的数独数据,应该在打印时临时转换,不要修改原列表。
修复后的代码
sudoku = [[5,0,0,0,0,0,0,0,0],[0,9,0,7,0,0,8,0,0],[0,0,0,0,3,0,0,7,0],[6,0,1,0,0,0,9,8,0],[0,0,0,6,0,0,0,0,0],[0,0,9,0,0,0,7,0,1],[0,0,0,0,0,8,1,9,0],[0,4,0,5,0,1,0,0,8],[0,7,0,3,0,6,0,4,0]] # 打印顶部分隔线 print('+-------+-------+-------+') for idx, row in enumerate(sudoku): line = '| ' for col_idx, num in enumerate(row): # 临时转换0为'.',不修改原始列表 line += '.' + ' ' if num == 0 else str(num) + ' ' # 每3列添加一个竖分隔符 if (col_idx + 1) % 3 == 0: line += '| ' print(line) # 每3行打印一次分隔线(最后一行之后不打印) if (idx + 1) % 3 == 0 and idx != 8: print('+-------+-------+-------+') # 打印底部分隔线 print('+-------+-------+-------+')
关键修改点
- 用
enumerate获取行索引,方便判断何时打印分隔线。 - 每3行(索引0、3、6之后)打印一次中间分隔线,最后再打印底部分隔线。
- 每3列添加竖分隔符,用取余操作替代多个
if判断,逻辑更简洁。 - 打印时临时转换0为'.',保留原始数独数据的完整性。
内容的提问来源于stack exchange,提问作者KrugerSigma
相关产品推荐
相关产品推荐

