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

Python数独求解器出现IndexError索引越界问题求助

数独求解器索引越界错误排查

核心错误原因

触发IndexError: index 9 is out of bounds for axis 0 with size 9的直接原因是变量名冲突:

  • 外层循环用for i in range(9)遍历数独的行,但在内部生成候选数字的逻辑中,你又定义了for i in range(1,10)的循环。这个内层循环会直接覆盖外层的i变量。
  • 当内层循环执行完毕时,i的值会变成9(range(1,10)的最后一个元素是9),此时外层循环继续执行,访问sudoku[i][j]就相当于访问sudoku[9][j]——而你的数独矩阵是9×9的,索引范围是0到8,自然触发索引越界错误。

修复步骤

  1. 重命名内层循环变量:把内层遍历1-9数字的循环变量从i改成其他名称(比如num),避免覆盖外层的行索引变量:

    # 原代码
    for i in range(1,10) :
        if i in setOfUnion :
            pass
        else :
            vacancy_numbers.add(i)
    # 修改后
    for num in range(1,10) :
        if num in setOfUnion :
            pass
        else :
            vacancy_numbers.add(num)
    
  2. 顺带修复其他逻辑问题:

    • 原判断if sudoku[i][j] in (1,10)逻辑错误,它只会检查单元格值是否等于1或10,正确的判断应该是检查单元格是否已填充(值在1-9之间):
      if 1 <= sudoku[i][j] <= 9:
          pass
      
    • 当vacancy_numbers长度为1时,直接赋值集合给数组元素会报错,应该取出集合中的唯一元素:
      sudoku[i][j] = next(iter(vacancy_numbers))
      
    • 输入处理部分缺少类型转换和异常处理,建议补充:
      while True:
          x = input("enter the element of {}th row and {}th column [input '0' for blank spaces in the sudoku] : ".format(i+1,j+1))
          try:
              x = int(x)
              if 0 <= x <=9:
                  break
              else:
                  print("请输入0-9之间的数字")
          except ValueError:
              print("请输入有效的数字")
      sudoku[i][j] = x
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:47