python - 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)
推荐阅读
- angular - 是否可以为 mat-tree 设置动画?(角材料)
- maven - 项目 org.wso2.carbon.apimgt.publisher.feature 的命令执行失败
- mysql - 一般错误:1364 禁用 STRICT_TRANS_TABLES
- mongodb - 如何在更新时重写模型中的嵌套对象
- c# - ASP.NET Core 中 Redis 中频道的订阅方法
- python-3.x - 如何通过 python anaconda 安装 dltpy 库
- database - PostgreSQL 中 Cassandra 的 TimeUUID 的替代方案,支持关系操作
- visual-studio - VS 2019/TFS Shell 扩展:未显示在 Windows 上下文菜单中
- hadoop - 根据 hdfs 中的模式列出文件名
- c# - 使用 BaseAdapter 到 Listview.Adapter 的 JSON 内容对象