我想做出随机选择,但要权重取其值

时间:2019-10-18 17:18:59

标签: python random

我正在制作RPG战利品生成器,并且尝试对每种稀有物品使用权重进行随机选择。我该怎么办?

Item_rarity = ["Common", "Uncommon", "Superior", "Rare", "Legendary"]
Rarity_choice = random.choice(Item_rarity)

我希望Common = 50%;罕见= 30%;上等= 14%;稀有= 5%;传奇人物= 1%。 我该怎么办?

2 个答案:

答案 0 :(得分:5)

使用random.choices

  

random.choices(人口,权重=无,*,cum_weights =无,k = 1)

     

返回从总体中选择的k大小的元素列表   替换。

     

如果指定了权重序列,则会根据相对权重进行选择。

import random

item_rarity = ["Common", "Uncommon", "Superior", "Rare", "Legendary"]
weights = [50, 30, 14, 5, 1]

print(random.choices(item_rarity, weights)[0])
# 'Common'

请注意,即使您只想要一项,它也会返回一个列表,因此[0]会获得列表中的一项。

答案 1 :(得分:0)

不是最有效的,而是通用的。

在这里,我们从{'thing':how_many_times}的字典中获取列表:

import random

def listProb(adcit):
    res=[]
    for k,v in adcit.items():
        for occur in range(v):
            res.append(k)
    return res

Item_rarity = listProb({'common':50, 'uncommon':30,})
print(Item_rarity)

Rarity_choice = random.choice(Item_rarity)
print(Rarity_choice)

得到类似的东西

['common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'common', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon', 'uncommon']
uncommon