我想进行随机选择,但要权重[重复]

问题描述 投票:1回答:2

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

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

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

python random
2个回答
4
投票

使用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]将获得列表中的一项。


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
© www.soinside.com 2019 - 2024. All rights reserved.