簡體   English   中英

我如何重構這一行代碼:

[英]How can I refactor this line of code:

我正在編寫一個程序來檢查數獨是否已解決。 這是我想不到的一種重構方式:

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

謝謝!

嘗試使用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將舍入。

將所有的onetwo ,等等塊放置在數組中。 然后根據ij選擇數組中的正確塊。 基本上,您需要此索引:

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

在哪里進行整數除法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM