我有三个行动和它们的概率:
走路:5
说话:1
奔跑:2
我需要做所有的动作。
但是最重要的动作应该(但不一定)首先执行,并且仅执行一次。
因此,在说话之前,走路有五倍的机会被执行。
如果从未走过路,则不能奔跑。
我的当前解决方案很昂贵,但有效。现在我组成一个列表,将第一个动作插入列表开头:
actions_poll = ['walk']*5 + ['run']*2 + ['talk']*1
flow_control= []
while len(flow_control) != 3:
action = roll one action from action pool
if action not in flow_control:
* check if action is run and walk is in flow control
flow_control.append(action)
我认为在actions_poll中使用带有数量的列表并不是最好的方法,而且当walk是5000而talk是1时,反复尝试循环可能需要很长时间。
有什么建议吗?
random.choices([选项列表], [每个选项对应的概率列表])
(Python 3.6或3.7)。 - Reblochon Masqueflow_controls
需要最大尺寸为3? - Nikaidowhile len(flow_control) != 3
,它会在插入三次后停止。我不理解这一部分。因为你说它没有限制,但是...它有!我认为你的意思是len(set(flow_controls)) != 3
(每个动作至少需要在列表中出现一次)。 - Nikaido