根据百分比激活某些功能

Activate certain functions based on percent

            if chance == 1:
                function1()

            elif chance == 4:
                function2()

            elif chance == 20:
                function3()

            elif chance == 10:
                functiongettingoutofideas()

            elif chance == 40:
               function_minecraft_club_was_not_on_today_insertcryingemoji()

            elif chance == 10:
               function8()

            elif chance == 4:
                functionthesearealotoffunctions()

            elif chance == 5:
                function_above_when_i_mean_5_i_mean_5_percent_chance()

            elif chance == 6:
                function_thank_you_for_your_help()

例如,在 if 和 elifs 中,chance == 10,这意味着该功能有 10% 的几率被激活。

任何帮助都会非常感激

如果您在 0-100 之间选择一个随机数,并且希望有 10% 的几率发生某些事情,您可以这样做:

if random < 10:
    doSomething()

doSomething 会出现在数字 0-10 上,但不会出现在数字 11-100 上,给您 10% 的机会。根据需要对其他函数/概率重复。

具有三个函数的示例:

from numpy.random import choice
func_list = [function1, function2, function2]   
weights = [10,40, 50]
choice(func_list, 1, p=weights)()

请注意,要使其正常工作,weights 必须加起来为 100。

此方法仅使用 Python 个标准库。

首先将百分比转换为概率。

>>> p = [1, 4, 20, 10, 40, 10, 4, 5, 6]
>>> p = [0.01*_ for _ in p]

然后求累积概率。这些预赛只需要进行一次。

>>> cum_probs = [0]
>>> for _ in p:
...     cum_probs.append(_ + cum_probs[-1])
...     
>>> cum_probs
[0, 0.01, 0.05, 0.25, 0.35, 0.75, 0.85, 0.89, 0.9400000000000001, 1.0]

>>> from random import random

从单位区间[0, 1]中随机选择一个。

>>> selection = random()

从左边开始,找到这个随机数所属的第一个概率区间,然后停止

>>> for i, possibility in enumerate(cum_probs[1:]):
...     if selection < possibility:
...         print ('perform function number ', i)
...         break
...         
perform function number  3

这是要执行的函数的编号

这些行只是为了验证选择的随机数是否在要求的区间内。

>>> selection
0.33920981672706096

您可以将函数分配给数组中的区间。

>>> functions = [function_one, another_fn, my_function, ...]

您更有可能将它们放入字典中。 (我用的是你的名字。)

functions = {0: function1(); 1: function2(); ...}

然后你就可以这样调用想要的那个了。

functions[i]