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-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)顺带修复其他逻辑问题:
- 原判断
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
相关产品推荐
相关产品推荐

