在Python中随机化if-else执行顺序
这可能听起来像个奇怪的问题,但请耐心听我说...
我在Python里有一个字典,里面的值是这样的:
'B': 23.6
'D': 0.6
'F': 35.9
'H': 35.9
我需要用这些值做一个if-else判断,根据哪个值大于30来执行不同的操作。目前我写的代码大概是这样的:
if angles['B'] > 30:
# Do stuff
elif angles['D'] > 30:
# Do other stuff
elif angles['F'] > 30:
# Do different stuf
elif angles['H'] > 30:
# Do even more different stuff
现在的问题是,当我有两个或更多相同的值时(就像上面示例数据那样)。在这种情况下,我想随机选择其中一个来使用。我的问题是:我该如何在Python中做到这一点?请记住,无论字典里的值是什么,要么什么都不做(如果它们都小于30),要么只做一件事。
4 个回答
1
你也可以这样做:
import random
angles = {'B':23,
'D': 2.6,
'F': 35.9,
'H':35.9
}
keys = angles.keys()
random.shuffle(keys) # shuffle the list of dictionary keys
for key in keys:
if angles[key] > 30:
# ...
break
2
在编程中,有时候我们需要把一些数据存储起来,以便后续使用。这就像把东西放进一个盒子里,方便我们随时拿出来用。
有几种常见的存储方式,比如:
- 变量:就像一个小盒子,可以存放一个值,比如数字或文字。
- 数组:可以想象成一个大盒子,里面可以放很多小盒子,每个小盒子里可以放不同的值。
- 对象:就像一个多功能的盒子,可以存放不同类型的数据,比如名字、年龄等,且这些数据可以有不同的标签。
选择哪种存储方式,主要看你需要存什么样的数据,以及你希望如何使用这些数据。
from random import choice
while angles:
x = choice(angles.keys())
if angles.pop(x)>30:
if x == 'B':
# Do stuff
elif x == 'D':
# Do other stuff
elif x == 'F':
# Do different stuf
elif x == 'H':
# Do even more different stuff
break
11
你可以创建一系列的键值对:
pairs = angles.iteritems()
然后过滤掉小于等于30的元素:
filtered = [(name, value) for name, value in pairs if value > 30]
检查一下是否有可选项
if filtered:
然后选择一个:
from random import choice
name, value = choice(filtered)
更新: 添加了以下内容...
正如Aaron在评论中提到的,这样做只是完成了一半。你还需要根据name
来确定你要执行的操作。
Aaron建议使用一个包含函数的字典。简单来说,你需要定义一些函数来处理你的键值对
def thing1(name, value):
# do stuff...
def thing2(name, value):
# do different stuff...
建立一个字典,把名字映射到函数调用
routes = {'A': thing1,
'B': thing2,
'C': thing1}
并定义一个路由函数,用来调用合适的函数:
def route(pair):
name, value = pair
return routes[name](name, value)
然后你只需用从choice
得到的键值对来调用route
,例如:
result = route(choice(filtered))
一种更有结构的方法是创建一个类来处理所有这些,或者仅仅处理路由的部分。