我想优化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方法之外的解决方案。 如果您有任何想法,我会在这里。
谢谢
谢谢
答案 0 :(得分:1)
第一步是使循环从0到4,以避免对不同的索引进行多次重复ifs
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
答案 1 :(得分:0)
您可以做的另一件事是为firstSum
创建两个函数pat2
和为secondSum
创建pat8
:
def firstSum(board, pat2, pos, i):
return board[pos[0] + pat2[i][0]][pos[1] + pat2[i][1]]
def secondSum(board, pat8, pos, i):
return board[pos[0] + pat8[i][0]][pos[1] + pat8[i][1]]
然后您创建两个函数multiply
和divide
来相应地修改dg
的值:
def multiply(dg):
return dg * 2
def divide(dg):
return dg / 2
然后,您创建一个字典,在其中将上述功能绑定来自if
条件(在这种情况下为1
和2
的值)
action = {"2" : multiply, "1" : divide}
最后,您创建@juvian的答案中提到的循环,如下所示:
for i in range(0,5):
first = firstSum(board, pat2, pos, i)
second = secondSum(board, pat8, pos, i)
dg = action[str(first)](dg)
dg = action[str(second)](dg)
这样,您就可以避免在代码中包含if
条条件。
答案 2 :(得分:0)
假设class MyComponent extends React.Component {
myMethod() {
const {
propOfInterest,
} = this.props
// do something with propOfInterest
}
render() {
const {
propOfInterest,
} = this.props
return (
<div className={propOfInterest}>
</div>
)
}
}
,pos
和pat2[i]
应该都是成对的,这不只是简化为:
pat8[i]