如何在Python中使用不同稀有度的随机物品?

时间:2019-01-21 07:52:04

标签: python python-3.x python-2.7

我正在编写一个假定有一个盒子的代码,当您打开盒子时,您将获得一种常见,罕见,稀有或传奇的武器。但是问题在于所有武器都有相同的出现机会,因此我该如何更改代码,以使稀有武器更难产生?

2 个答案:

答案 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))