如何优化这样的代码?

2024-09-28 19:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个360度的风向有一定的台阶,这个代码怎么优化

if 348.75 <= data['wind_deg'] <= 360 or 0 < data['wind_deg'] < 11.25:
    print("wind: N")

if 11.25 <= data['wind_deg'] <= 33.75:
    print("wind: N-N-E")

if 33.75 <= data['wind_deg'] <= 56.25:
    print("wind: N-E")

if 56.25 <= data['wind_deg'] <= 78.75:
    print("wind: E-N-E")

if 78.75 <= data['wind_deg'] <= 101.25:
    print("wind: E")

if 101.25 <= data['wind_deg'] <= 123.75:
    print("wind: E-S-E")

if 123.75 <= data['wind_deg'] <= 146.25:
    print("wind: S-E")

if 146.25 <= data['wind_deg'] <= 168.75:
    print("wind: S-S-E")

if 168.75 <= data['wind_deg'] <= 191.25:
    print("wind: S")

if 191.25 <= data['wind_deg'] <= 213.75:
    print("wind: S-S-W")

if 213.75 <= data['wind_deg'] <= 236.25:
    print("wind: S-W")

if 236.25 <= data['wind_deg'] <= 258.75:
    print("wind: W-S-W")

if 258.75 <= data['wind_deg'] <= 281.25:
    print("wind: W")

if 281.25 <= data['wind_deg'] <= 303.75:
    print("wind: W-N-W")

if 303.75 <= data['wind_deg'] <= 326.25:
    print("wind: N-W")

if 326.25 <= data['wind_deg'] <= 348.75:
    print("wind: N-N-W")

我想我需要用这样的方法:

风=['N'、'NE'、'ENE'、'E'、'ESE'、'S-E'、'S'、'SSW'、'SW'、'W'、'WNW'、'NW'、'NNW']

以学位为参考,但我不知道如何正确地做


Tags: or方法代码dataifswnewind
1条回答
网友
1楼 · 发布于 2024-09-28 19:22:21

这是一个选项:

wind = ['N', 'NNE','NE','ENE','E','ESE','SE', 'SSE',
        'S', 'SSW', 'SW','WSW', 'W','WNW','NW','NNW']
delta_phi = 22.5

# this is where the directions are centered
degs = [delta_phi*d for d in range(0, len(wind))]

def get_dir(d):
    d += delta_phi/2
    d %= 360
    index = int(d/delta_phi)
    return wind[index]

或更紧凑:

def get_dir(d):
    index = int(((d+delta_phi/2) % 360)/delta_phi)
    return wind[index]

未彻底测试;刚刚做了这个测试:

for i in range(361):
    print(i, get_dir(i))

相关问题 更多 >