想做一个判断十六个风向的函数,输入角度,输出风向的字符串。感觉写十六个 if else 很不好,这个可以用字典做吗?或是其他什么方法?
1 am241 2018-04-09 16:16:43 +08:00 via Android 用除法 |
![]() | 2 ecnelises 2018-04-09 16:17:58 +08:00 如果这些范围都互相不重合的的话,你可以自己设计一个散列函数 |
3 orangeD 2018-04-09 16:20:39 +08:00 Guava 的 RangeMap 了解一下 http://www.baeldung.com/guava-rangemap |
![]() | 4 araraloren 2018-04-09 16:28:32 +08:00 |
![]() | 5 chairuosen 2018-04-09 16:34:07 +08:00 选范围中间值作为离散点,然后输入数据除以单位角度后四舍五入就行。 |
![]() | 6 zhengxiaowai 2018-04-09 16:37:35 +08:00 看看我的 《 Python 如何传递运算表达式》 https://hexiangyu.me/2018/04/02/pass-operation-expression/ 然后你就可以优雅的消除掉无脑 if-else 的写法 ``` >>> exp = Expression() >>> data = [1, 3, 4, 5, 6, 8, 9] >>> pick_range(data, 1 < exp, exp < 6) [3, 4, 5] >>> pick_range(data, 1 <= exp, exp < 6) [1, 3, 4, 5] >>> pick_range(data, 1 < exp, exp <= 6) [3, 4, 5, 6] >>> pick_range(data, 1 <= exp, exp <= 6) [1, 3, 4, 5, 6] >>> ``` |
![]() | 7 xomix 2018-04-09 16:42:11 +08:00 ![]() 你这个做个 Enum 枚举不是更好吗………… |
8 lain0 2018-04-09 17:30:36 +08:00 可以似子? horz, vert = cos(angle), sin(angle) horz_desc = '' if abs(horz) > some_threshold: horz_desc = 'east' if horz > 0 else 'west' vert_desc = '' if abs(vert) > some_threshold: vert_desc = 'north' if vert > 0 else 'south' return ' '.join([vert_desc, horz_desc]) |
![]() | 9 RuiQ 2018-04-09 17:34:53 +08:00 In [18]: from bisect import bisect In [19]: def windy(angle, base=[0,90,180,270,360], name="/北风 /东风 /南风 /西风"): ...: i = bisect(base, angle) ...: return name.split('/')[i] ...: In [20]: windy(0) Out[20]: '北风' In [21]: windy(90) Out[21]: '东风' In [22]: windy(15) Out[22]: '北风' In [23]: windy(100) Out[23]: '东风' In [24]: windy(200) Out[24]: '南风' In [25]: windy(280) Out[25]: '西风' |
![]() | 10 wizardforcel 2018-04-09 18:45:34 +08:00 via Android @zhengxiaowai 你这不就是 np.where 么。。。 |
![]() | 11 zhongkouwei 2018-04-09 19:15:15 +08:00 就用除法呗 |
12 Magentaize 2018-04-09 19:22:49 +08:00 via Android 字典并不限制你是一个非单射映射 |
![]() | 13 jadec0der 2018-04-09 19:39:29 +08:00 这个帖子在 1L 就该结束了… |
![]() | 14 Building 2018-04-09 19:40:21 +08:00 via iPhone 难以想象当你需要计算时间的时候又会提出什么提问... |