首页 > 解决方案 > python优化if语句

问题描述

我想在 python 中优化这个 IF 语句森林。我真的不知道是怎么回事。但我必须减少代码的大小。

def function(pos):
    dg = 2
    if (board[pos[0] + pat2[0][0]][pos[1] + pat2[0][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat2[1][0]][pos[1] + pat2[1][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat2[2][0]][pos[1] + pat2[2][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat2[3][0]][pos[1] + pat2[3][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat2[4][0]][pos[1] + pat2[4][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat8[0][0]][pos[1] + pat8[0][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat8[1][0]][pos[1] + pat8[1][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat8[2][0]][pos[1] + pat8[2][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat8[3][0]][pos[1] + pat8[3][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat8[4][0]][pos[1] + pat8[4][1]] == 2):
            dg *= 2
    if (board[pos[0] + pat2[0][0]][pos[1] + pat2[0][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat2[1][0]][pos[1] + pat2[1][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat2[2][0]][pos[1] + pat2[2][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat2[3][0]][pos[1] + pat2[3][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat2[4][0]][pos[1] + pat2[4][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat8[0][0]][pos[1] + pat8[0][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat8[1][0]][pos[1] + pat8[1][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat8[2][0]][pos[1] + pat8[2][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat8[3][0]][pos[1] + pat8[3][1]] == 1):
            dg /= 3
    if (board[pos[0] + pat8[4][0]][pos[1] + pat8[4][1]] == 1):
            dg /= 3
    return dg

如您所见,不同的行非常相似,我正在寻找另一种解决方案而不是 while 方法。如果你有任何想法我在这里。

谢谢

谢谢

标签: pythonoptimization

解决方案


第一步是从 0 到 4 进行循环,以避免针对不同索引的许多重复 if:

for i in range(0, 5):
    if (board[pos[0] + pat2[i][0]][pos[1] + pat2[i][1]] == 2):
        dg *= 2
    if (board[pos[0] + pat8[i][0]][pos[1] + pat8[i][1]] == 2):
        dg *= 2
    if (board[pos[0] + pat2[i][0]][pos[1] + pat2[i][1]] == 1):
        dg /= 2
    if (board[pos[0] + pat8[i][0]][pos[1] + pat8[i][1]] == 1):
        dg /= 2

推荐阅读