我该如何重构这行代码:

时间:2014-10-19 21:07:25

标签: python if-statement refactoring

我正在编写程序来检查数独是否已解决。这是我无法想到重构方法的一部分:

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])    

谢谢!

2 个答案:

答案 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)

将所有块onetwo等放在一个数组中。然后根据ij选择数组中的右侧块。基本上,你想要这个索引:

index = (i / 3) * 3 + j / 3

你在做整数除法。

相关问题