所以我现在有一个输出输入高度声屏障的函数。

def soundbarier (y):
    if 0 < y < 1524:
        S = 340.3
    elif 1524 < y < 3048:
        S = 334.4
    elif 3048 < y < 4572:
        S = 328.4
    elif 4572 < y < 6096:
        S = 322.2
    elif 6096 < y < 7620:
        S = 316.0
    elif 7620 < y < 9144:
        S = 309.6
    elif 9144 < y < 10668:
        S = 303.6
    elif 10668 < y < 12192:
        S = 295.4
    else:
        S = 294.5
    return (float(S))

我想用字典把它缩短,但没法用。
def SOUND(y):
    return {
    0 < float(y) < 1524: 340.3,
    1524 < y < 3048: 334.4,
    3048 < y < 4572: 328.4,
    4572 < y < 6096: 322.2,
    6096 < y < 7620: 316.0,
    7620 < y < 9144: 309.6,
    9144 < y < 10668: 303.6,
    10668 < y < 12192: 295.4
    }.get(y, 9)

print(SOUND(1500))

我真的不需要任何默认值。我怎么能成功我基本上需要这个函数在一个范围内为某个Y输出S。

最佳答案


consts = [340.3, 334.4, 328.4, 322.2, 316.0, 309.6, 303.6, 295.4, 295.5]

def soundbarrier(y):
    return consts[
        -1 if (not (0 < y < 12192) or y % 1524 == 0) else y // 1524
    ]

In [1]: soundbarrier(1500)
Out[1]: 340.3

In [2]: soundbarrier(10000)
Out[2]: 303.6

In [3]: soundbarrier(100)
Out[3]: 340.3

In [4]: soundbarrier(1524)
Out[4]: 295.5

08-18 14:11