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

Python数独布局异常:无法按行正确填入数字求助

解决数独布局重复打印的问题

你的代码核心问题出在多余的外层循环和错误的条件判断,导致整个数独被重复打印3次,同时分隔符逻辑混乱。下面是具体的修复方向和修正后的代码:

问题分析

  1. 多余的外层循环:for c in range(3)会让你遍历整个数独列表3次,直接导致重复打印3遍数独。
  2. 条件判断逻辑错误:if c == 0 or 2 or 8在Python中会被解析为if (c == 0) or 2 or 8,由于非0值都为True,这个条件永远成立,所以每次循环都会打印分隔线。
  3. 修改原始数据:你直接把列表中的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:21