Python实现基础数独校验器始终返回False问题排查求助
解决你的数独校验器总是返回False的问题
嘿,我仔细看了你的代码,发现几个核心问题导致它一直返回False,咱们一步步来梳理和修正:
1. 别用Python内置类型名当变量名
你把参数命名成了list,这会覆盖Python自带的list类型——虽然这不是直接触发错误的原因,但绝对是个不好的编程习惯,建议改成board这类更语义化的名字。
2. 行/列的校验逻辑完全错了
你的代码现在是全局统计整个数独里某个数字出现的总行数和总列数,而不是检查每一行、每一列里该数字只出现一次。比如你的4x4测试用例里,数字1在4行里各出现一次,row_count最终会累计成4,远大于你判断的1,自然直接返回False了。
修正后的代码示例
def sudoku_check(board): n = len(board) # 检查每一行:确保每行数字唯一且在1~n范围内 for row in board: if len(set(row)) != n: return False for num in row: if num < 1 or num > n: return False # 检查每一列:同理确保每列数字唯一 for col_idx in range(n): # 提取当前列的所有数字 column = [board[row_idx][col_idx] for row_idx in range(n)] if len(set(column)) != n: return False # 所有检查通过,返回True return True # 测试你的示例数独 test_board = [[1,2,3,4], [2,4,1,3], [3,1,4,2], [4,3,2,1]] print(sudoku_check(test_board)) # 现在会正确返回True
原代码问题的详细拆解
你原来的循环里,row_count是把所有行里的目标数字出现次数加起来,比如数字1在4行各出现一次,最终row_count是4,而你判断row_count != 1,这条件必然成立,所以直接返回False。正确的思路应该是逐行、逐列单独检查,而不是全局累加统计。
另外你的代码最后if col_count != 1 or row_count !=...没写完,但就算写完,逻辑也是错误的,因为统计方式从根上就不对。
可选扩展(如果需要)
如果以后要做标准9x9数独校验,还得加上3x3子网格的检查逻辑,不过你的4x4用例暂时不需要这一步~
内容的提问来源于stack exchange,提问作者Shreyash Karnik
相关产品推荐
相关产品推荐

