我正在编写一个假定有一个盒子的代码,当您打开盒子时,您将获得一种常见,罕见,稀有或传奇的武器。但是问题在于所有武器都有相同的出现机会,因此我该如何更改代码,以使稀有武器更难产生?
答案 0 :(得分:2)
python 3.x:
您可以使用random.choices并提供随机分布:
import random
things = ["common","rare","epic"]
chance = [90,9,1]
results = random.choices(things,chance,k=1000)
from collections import Counter
print(Counter(results))
输出:
Counter({'common': 921, 'rare': 75, 'epic': 4})
分布可以是绝对分布,也可以是累积分布-绝对分布在内部转换为累积分布。参见doku
我使用collections.Counter来计算1000次随机抽奖。
python 2.x:
您可以创建一个包含正确数量事物的列表,并通过random.choice
循环绘制(抱歉,没有random.choices为您选择):
things = ["common"]*90 + ["rare"]*9 + ["epic"]
thing = random.choice(things) # only 1 item - loop if need more
有几种不完全相同的方法:
答案 1 :(得分:0)
Numpy可以帮助您解决问题,p值是概率,总和必须为1。
import numpy as np
np.random.choice(('common', 'uncommon', 'rare' , 'legendary'), p=[0.4, 0.35, 0.2, 0.05])
在示例中,我添加了Counter以显示每个项目的出现。
from collections import Counter
import numpy as np
item = []
for _ in range(1,100):
item.append(np.random.choice(('common', 'uncommon', 'rare' , 'legendary'), p=[0.4, 0.35, 0.2, 0.05]))
print(Counter(item))