如何重构这行代码:

2024-03-29 02:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序来检查数独是否解决了。我想不出重构的方法:

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

谢谢!你知道吗


Tags: and方法in程序forifrangeone
2条回答

把你所有的方块onetwo,等等。。。在数组中。然后根据ij选择数组中的正确块。基本上,你需要这个索引:

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

你在做整数除法。你知道吗

尝试使用二维阵列来容纳对象并按如下方式映射它们:

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

如果您使用的是python3,那么您将用Padraic指出的square = mapping[int(i/3)][int(j/3)]square = mapping[i//3][j//3]替换square = mapping[i/3][j/3]

原因是Python2将向下取整并返回除法的int,其中as Python3将返回float。施法到int将向下取整。你知道吗

相关问题 更多 >