Python中if-else执行的随机顺序

rob*_*ntw 3 python random

这可能听起来像一个奇怪的问题,但请耐心等待......

我在Python中有一个字典,其值如下:

'B': 23.6
'D': 0.6
'F': 35.9
'H': 35.9
Run Code Online (Sandbox Code Playgroud)

我需要用这些值做一个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
Run Code Online (Sandbox Code Playgroud)

现在问题来自于我有两个或更多相同的值(如上面的示例数据中所示).在这种情况下,我想随机选择其中一个使用.问题是:我如何在Python中做到这一点?请记住,不管字典的值是什么(如果它们都<30)或者只有一件事应该完成.

int*_*ted 11

您可以创建一系列键/值对:

pairs = angles.iteritems()
Run Code Online (Sandbox Code Playgroud)

过滤它以删除元素<= 30:

filtered = [(name, value) for name, value in pairs if value > 30]
Run Code Online (Sandbox Code Playgroud)

检查是否有任何选项

if filtered:
Run Code Online (Sandbox Code Playgroud)

然后选择一个:

    from random import choice
    name, value = choice(filtered)
Run Code Online (Sandbox Code Playgroud)

更新:添加以下内容......

正如亚伦在评论中提到的那样,这只能让你到达那里.你仍然需要编写你将要采取的行动name.

亚伦建议使用包含功能的字典.基本上,您可以定义一些函数来对您的名称/值对执行某些操作

def thing1(name, value):
    # do stuff...
def thing2(name, value):
    # do different stuff...
Run Code Online (Sandbox Code Playgroud)

设置一个字典映射名称到函数调用

routes = {'A': thing1,
          'B': thing2,
          'C': thing1}
Run Code Online (Sandbox Code Playgroud)

并定义一个分派到适当函数的路由函数:

def route(pair):
    name, value = pair
    return routes[name](name, value)
Run Code Online (Sandbox Code Playgroud)

然后,您可以route使用您获得的名称/值对进行调用choice,例如

result = route(choice(filtered))
Run Code Online (Sandbox Code Playgroud)

更结构化的方法可能涉及创建一个类来处理所有这些或仅仅是路由方面.

  • 先生,我是骗你的. (2认同)