我正在制作一个程序,需要检查4面相互输入的总和,并根据最高总和输出一些东西。我使用if
和elif
语句制作了一个“算法”,但是问题在于它大约有250行代码。所以我开始研究一种不同的(正确的)方法来相互检查这些变量,我创建了下面的代码。唯一的问题是,如果2或3的总和相同,则此代码不起作用。这是由于使用了max()
函数,它只输出一个最大值。现在我想知道是否有办法实现这一点,例如:sum_right
和sum_left
是相同的,它会输出字符串/键'left'
和字符串{{ 1}}。所以我可以检查然后选择要执行的哪一方。到目前为止,在浏览这个论坛并浏览python文档时,我还没有找到答案。非常感谢提前!
'right'
答案 0 :(得分:1)
您需要找到最大值:
maxval = max(sum_input_list.values())
然后获取相应的键:
sides = [k for k, v in sum_input_list.items() if v == max_val]
答案 1 :(得分:1)
from from collections import defaultdict
sum_right = sum(map(int, raw_input('Right').split(',')))
sum_left = sum(map(int, raw_input('Left').split(',')))
sum_front = sum(map(int, raw_input('Front').split(',')))
sum_back = sum(map(int, raw_input('Back').split(',')))
# create a dict to keep these values
_vals = {
"right": sum_right,
"left": sum_left,
"front": sum_front,
"back": sum_back,
}
# create a default dict, whose default value is an empty list. that means, when you create a new key in the dict, its value will set to an empty list
final_vals = defaultdict(list)
for direction, value in _vals.items():
final_vals[value].append(direction) # create keys from values and add each direction to related value
你会有一个像下面这样的词典
>> final_vals
>> {5: ["right", "front"],
4: ["left"],
1: ["back"]}
您现在可以从键中选择最大值
>> final_vals[max(final_vals.keys())]
>> ["right", "front"]
从他们构建你的字符串
best_directions = final_vals[max(final_vals.keys())]
print "do something %s" % ", ".join(best_directions)
>> "do something right, front"
您还将摆脱if
块用于打印路线。