Python 清理一个又长又丑的if/elif/elif/elif。。。块

Python 清理一个又长又丑的if/elif/elif/elif。。。块,python,Python,这段代码很难看,不是python。我是python新手,对编程并不陌生。与其猜测许多可能的重构,不如告诉我python的方法 正如您所看到的,向前、向左、向右等变量都是用浮点数设置的。我想在变量dir中存储包含最小值的变量的字符串名称 forward = calc_range(msg.ranges, 359, 0, 15) right = calc_range(msg.ranges, 270, 271, 15) left = calc_range(msg.ranges, 90, 91, 15)

这段代码很难看,不是python。我是python新手,对编程并不陌生。与其猜测许多可能的重构,不如告诉我python的方法

正如您所看到的,向前、向左、向右等变量都是用浮点数设置的。我想在变量dir中存储包含最小值的变量的字符串名称

forward = calc_range(msg.ranges, 359, 0, 15)
right = calc_range(msg.ranges, 270, 271, 15)
left = calc_range(msg.ranges, 90, 91, 15)
back = calc_range(msg.ranges, 180, 181, 15)
narrow_l1 = sum(msg.ranges[83:87])/5
narrow_l2 = sum(msg.ranges[88:92])/5
narrow_l3 = sum(msg.ranges[93:97])/5
narrow_r1 = sum(msg.ranges[273:277])/5
narrow_r2 = sum(msg.ranges[268:272])/5
narrow_r3 = sum(msg.ranges[263:267])/5
closest_dist = min(narrow_l1, narrow_l2, narrow_l3, narrow_r1, narrow_r2, narrow_r3,
                   forward, left, right, back)
if (closest_dist == forward):
    closest_dir = "forward"
elif (closest_dist == left):
    closest_dir = "left"
elif (closest_dist == right):
    closest_dir = "right"
elif (closest_dist == back):
    closest_dir = "back"
elif (closest_dist == narrow_l1):
    closest_dir = "narrow_l1"
elif (closest_dist == narrow_l2):
    closest_dir = "narrow_l2"
elif (closest_dist == narrow_l3):
    closest_dir = "narrow_l3"
elif (closest_dist == narrow_r1):
    closest_dir = "narrow_r1"
elif (closest_dist == narrow_r2):
    closest_dir = "narrow_r2"
elif (closest_dist == narrow_r3):
    closest_dir = "narrow_r3"
else:
    closest_dir = "bug"
使用字典

foos = {
    'forward': calc_range(msg.ranges, 359, 0, 15),
    'right': calc_range(msg.ranges, 270, 271, 15),
    'left': calc_range(msg.ranges, 90, 91, 15),
    'back': calc_range(msg.ranges, 180, 181, 15),
    'narrow_l1': sum(msg.ranges[83:87]/5),
    'narrow_l2': sum(msg.ranges[88:92])/5,
    'narrow_l3': sum(msg.ranges[93:97])/5,
    'narrow_r1': sum(msg.ranges[273:277])/5,
    'narrow_r2': sum(msg.ranges[268:272])/5,
    'narrow_r3': sum(msg.ranges[263:267])/5,
}

closest_dir = min(foos, key=foos.get)

min使用dict迭代器返回键,键参数表示foo.getx将确定每个键x的大小,以便进行比较。

@johnrsharpe你画得有点快。这个问题其实是完全不同的。这根本不是关于创建许多变量!不过。。。d={'slown_l1':值,'slown_l2':值…};对于key,d.items中的val:if val==whatever:print key