if-else语句很麻烦。我想用Python构造一个switch/case语句。但是Python中的switch/case语句是针对特定情况的,例如:
def switch(case):
return {
"a":fa,
"b":fb,
}.get(case, f_default)
但我希望这个案例满足以下某些条件:
def descriptor(magnitude):
return {
magnitude == 10.0: 'Meteoric',
magnitude >= 9.0: 'Great',
magnitude >= 8.0: 'Major',
magnitude >= 7.0: 'Strong',
magnitude >= 6.0: 'Moderate',
magnitude >= 5.0: 'Light',
magnitude >= 4.0: 'Minor',
magnitude >= 3.0: 'Very Minor',
magnitude <= 2.0: 'Micro'
}.get(magnitude, magnitude == True)()
我的想法是,字典中的return键是任何为真的东西。这就是我写magnitude == True
的原因。有人能给我一些指导吗,我的想法在magnitude == True
中,但是没有它,就会像预期的那样出现KeyValue错误。
发布于 2018-06-16 04:52:40
看起来您想要在排序列表中搜索元素之间插入新值的位置。幸运的是,python已经包含了使用非常高效的二分法的bisect
模块,该算法将列表分成两部分,直到找到正确的值:
import bisect
l = sorted([
(10.0, 'Meteoric'),
(9.0, 'Great'),
(8.0, 'Major'),
(7.0, 'Strong'),
(6.0, 'Moderate'),
(5.0, 'Light'),
(4.0, 'Minor'),
(3.0, 'Very Minor'),
(2.0, 'Micro'),
])
def descriptor(magnitude):
return l[bisect.bisect_left(l, (magnitude,))]
用法:
>>> descriptor(4.4)
(5.0, 'Light')
>>> descriptor(7.2)
(8.0, 'Major')
>>> descriptor(3.0)
(3.0, 'Very Minor')
https://stackoverflow.com/questions/50882225
复制相似问题