Python程序有太多if语句



我正在编写一个Python程序,但最终得到了一堆if语句。有没有办法缩短代码?提前谢谢。

if val == M and time == p1:
goto(0)
sleep(1)
elif val == M and time == p2:
goto(1)
sleep(1)
elif val == M and time == p3:
goto(2)
sleep(1)
elif val == M and time == p4:
goto(3)
sleep(1)
elif val == M and time == p5:
goto(4)
sleep(1)
elif val == T and time == p1:
goto(5)
sleep(1)
elif val == T and time == p2:
goto(6)
sleep(1)
elif val == T and time == p3:
goto(7)
sleep(1)
elif val == T and time == p4:
goto(8)
sleep(1)
elif val == T and time == p5:
goto(9)
sleep(1)

代码看起来不错

选项1:使用字典

cases = {
(M, p1) : 1,
(M, p2) : 2,
(M, p3) : 3,
(M, p4) : 4,
(M, p5) : 5,
(T, p1) : 6,
(T, p2) : 7,
(T, p3) : 8,
(T, p4) : 9,
}
goto(cases[(val,time)])
sleep(1)

选项2:使用case语句(在Python 3.10及更高版本中(


隐藏选项:找到其他可以实现您想要的逻辑。

例如。

if val in [T,M] and time in [p1,p2,p3,p4,p5]:
num = (val==T)*5 + [p1,p2,p3,p4,p5].index(time) + 1
goto(num)
sleep(1)

这可以让您开始。您可以将变量存储在元组中,并使用循环索引来访问它们,以及整数除法和余数:

lvalues = ('M', 'T')
rvalues = ('p1', 'p2', 'p3', 'p4', 'p5')
for i in range(9):
lvalue = lvalues[i // 5]   
rvalue = rvalues[i % 5]
print(f'val == {lvalue} and time == {rvalue}')

此输出

val == M and time == p1
val == M and time == p2
val == M and time == p3
val == M and time == p4
val == M and time == p5
val == T and time == p1
val == T and time == p2
val == T and time == p3
val == T and time == p4

将变量保存在lvaluesrvalues中。

最新更新