python - 有没有办法简化 if 语句 block ?

标签 python if-statement

有没有办法简化这个 if 语句 block ?

    if ro<=1:
        F=1.23
    elif 1<ro<=1.05:
        F=1.24
    elif 1.05<ro<=1.1:
        F=1.25
    elif 1.1<ro<=1.12:
        F=1.26
    elif 1.12<ro<=1.16:
        F=1.27
    elif 1.16<ro<=1.19:
        F=1.28
    elif 1.19<ro<=1.21:
        F=1.29
    elif 1.21<ro<=1.24:
        F=1.3
    elif 1.24<ro<=1.28:
        F=1.31
    elif 1.28<ro<=1.32:
        F=1.32
    elif 1.32<ro<=1.37:
        F=1.34
    elif 1.37<ro<=1.43:
        F=1.35
    elif 1.43<ro<=1.51:
        F=1.37
    elif 1.51<ro<=1.62:
        F=1.39
    elif 1.62<ro<=1.78:
        F=1.42
    elif 1.78<ro<=2.06:
        F=1.45
    elif 2.06<ro<=2.74:
        F=1.49

最佳答案

首先,你不需要<运算符,因为它已被 elif 过滤(else)。 所以,

    if ro <= 1:
        F = 1.23
    elif ro <= 1.05:
        F = 1.24
    elif ro <= 1.1:
        F = 1.25
    elif ro <= 1.12:
        F = 1.26
    elif ro <= 1.16:
        F = 1.27
    elif ro <= 1.19:
        F = 1.28
    elif ro <= 1.21:
        F = 1.29
    elif ro <= 1.24:
        F = 1.3
    elif ro <= 1.28:
        F = 1.31
    elif ro <= 1.32:
        F = 1.32
    elif ro <= 1.37:
        F = 1.34
    elif ro <= 1.43:
        F = 1.35
    elif ro <= 1.51:
        F = 1.37
    elif ro <= 1.62:
        F = 1.39
    elif ro <= 1.78:
        F = 1.42
    elif ro <= 2.06:
        F = 1.45
    # elif ro <= 1.74:
    #     F = 1.49

有相同的结果。 (我不确定最后一个条件的预期是什么)。

并且,您可以创建范围值表。

range_table: list[tuple[float, float]] = [
    (1.00, 1.23),
    (1.05, 1.24),
    (1.10, 1.25),
    (1.12, 1.26),
    (1.16, 1.27),
    (1.19, 1.28),
    (1.21, 1.29),
    (1.24, 1.30),
    (1.28, 1.31),
    (1.32, 1.32),
    (1.37, 1.34),
    (1.43, 1.35),
    (1.51, 1.37),
    (1.62, 1.39),
    (1.78, 1.42),
    (2.06, 1.45),
    (None, 1.49),
]

for range_, value in range_table:
    if range_ is None or ro <= range_:
        F = value
        break

如果您使用的是Python 3.7或更高版本,可以使用 dict 来完成, 也。因为顺序很重要,Python 3.7+ 版本保证 dict的顺序由其创建决定。

range_table: dict[float, float] = {
    1.00: 1.23,
    1.05: 1.24,
    1.10: 1.25,
    1.12: 1.26,
    1.16: 1.27,
    1.19: 1.28,
    1.21: 1.29,
    1.24: 1.30,
    1.28: 1.31,
    1.32: 1.32,
    1.37: 1.34,
    1.43: 1.35,
    1.51: 1.37,
    1.62: 1.39,
    1.78: 1.42,
    2.06: 1.45,
    None: 1.49,
}

for range_, value in range_table.items():
    if range_ is None or ro <= range_:
        F = value
        break

关于python - 有没有办法简化 if 语句 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74287812/

相关文章:

python - 如何使用Google Docs API和Python将本地镜像添加到Google Docs?

PHP - else, 'escape' 嵌套并跳到elseif

python - 这个Python函数应该如何调用

python - 在 python 2.7.10-Pycontrol 中全局禁用 ssl 检查

swift - if let 可以在 Swift 3.1 中以逗号分隔吗?

javascript - 这个简单的 JavaScript 代码有什么问题?

java - 仅当检查整个数组时才使用 Else 语句

java - 计算递归算法的最坏情况运行时间复杂度

python - 用于匹配 C 的多行预处理器语句的正则表达式

javascript - Bokeh 如何存储日期时间信息