在Python中随机化if-else执行顺序

3 投票
4 回答
547 浏览
提问于 2025-04-16 05:34

这可能听起来像个奇怪的问题,但请耐心听我说...

我在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))

一种更有结构的方法是创建一个类来处理所有这些,或者仅仅处理路由的部分。

撰写回答