一种从概率范围中获取数字的方法
假设在1 - 5
和[.50, .30, .10, .07, .03]
之间的数字范围有50%
%的返回概率这很容易,但它只适用于小数字(random.choices([1, 2, 3, 4,5], [.50, .30, .10, .07, .03])
),这次我们假设范围在1 - 100
之间,1 - 40
范围内的数字只返回20%
,以此类推。
1 - 100
个数范围的概率
1 - 40 10%
41 - 60 35%
61 - 70 25%
71 - 80 15%
81 - 90 10%
91 - 95 4%
96 - 100 1%
import random
thing = [(10, 40), (41, 60), (61, 70), (71, 80), (81, 90), (91, 95), (96, 100)]
prob = [.10, .35, .25, .15, .10, .04, .01]
[(start, stop)] = random.choices(thing, prob)
num = random.randrange(start, stop + 1, 1)
print(num)
我正要问这个问题,但意识到这其实很简单
使用random.choices
和权重选择一个范围,然后使用random.choice
从该范围中选择一个随机数。我将choices
调用设置为zip
ped的一系列元组,以便将范围与概率关联起来:
>>> random.choice(random.choices(*zip(
... (range(1, 41), 10),
... (range(41, 61), 35),
... (range(61, 71), 25),
... (range(71, 81), 15),
... (range(81, 91), 10),
... (range(91, 96), 4),
... (range(96, 101), 1),
... ))[0])
65