根据百分比激活某些功能

时间:2017-11-16 20:55:05

标签: python python-3.x function random percentage

            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中,当我举例,机会== 10,这意味着有10%的机会激活该功能。

任何帮助 赞赏

3 个答案:

答案 0 :(得分:1)

具有三个功能的示例:

weights

请注意,为了实现此功能,{{1}}必须添加最多100个。

答案 1 :(得分:0)

如果您选择0-100之间的随机数,并且您希望有10%的可能性发生,您可以这样做:

if random < 10:
    doSomething()

数字0-10会发生doSomething,但数字11-100会发生{{1}},给你10%的几率。根据需要重复其他功能/概率。

答案 2 :(得分:0)

此方法仅使用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]