我正在编写程序来检查数独是否已解决。这是我无法想到重构方法的一部分:
for i in range(0, 9):
for j in range(0, 9):
if i < 3:
if j < 3:
one.append(sudoku[i][j])
if j >= 3 and j < 6:
two.append(sudoku[i][j])
if j >= 6:
three.append(sudoku[i][j])
if i >= 3 and i < 6:
if j < 3:
four.append(sudoku[i][j])
if j >= 3 and j < 6:
five.append(sudoku[i][j])
if j >= 6:
six.append(sudoku[i][j])
if i >= 6:
if j < 3:
seven.append(sudoku[i][j])
if i >= 6 and j >= 3 and j < 6:
eight.append(sudoku[i][j])
if j >= 6:
nine.append(sudoku[i][j])
谢谢!
答案 0 :(得分:2)
尝试使用2D数组来保存对象并按如下方式映射它们:
mapping = [[one, two, three], [four, five, six], [seven, eight, nine]]
for i in range(0, 9):
for j in range(0, 9):
square = mapping[i/3][j/3]
square.append(sudoku[i][j])
如果您使用的是Python 3,则应将square = mapping[i/3][j/3]
替换为square = mapping[int(i/3)][int(j/3)]
或square = mapping[i//3][j//3]
,因为Padraic指出
原因是Python2将向下舍入并返回int
进行除法,其中Python3将返回float
。投射到int
会向下舍入。
答案 1 :(得分:1)
将所有块one
,two
等放在一个数组中。然后根据i
和j
选择数组中的右侧块。基本上,你想要这个索引:
index = (i / 3) * 3 + j / 3
你在做整数除法。