玩游戏钓鱼



我想创建一个钓鱼游戏。每当玩家按下一个按钮,游戏就会返回一条鱼。每条鱼都有一个百分比(小型鱼,45%;中型鱼,25%;大型鱼,15%;巨型鱼,4.9%;鲨鱼,0.1(。

fish_size = [("small",45),("medium",25),("big",15),("huge",4.9),("shark",0.1)]

如何按百分比从列表中随机获取一条鱼?

如果您有一个可供选择的元素列表(在您的情况下,是鱼类类型(和一个权重列表(不必归一化为1或100%(,则可以使用random内置包的choices方法。有关更多详细信息,请参阅其文档。

一个例子:

>>> import random
>>> fish = ['small', 'medium', 'big', 'huge', 'shark']
>>> weights = [45, 25, 15, 4.9, 0.1]
>>> random.choices(fish, weights)[0]
'medium'

请注意,可以使用choices返回多个元素(使用可选的k关键字参数(。因此,choices返回一个列表。默认情况下为k=1,因此列表中只返回一个值。将[0]添加到函数调用的末尾会自动从列表中提取该值。

您可以执行以下操作:


fish_size = [("small",45),("medium",25),("big",15),("huge",5),("shark",1)]
helper = []
for x in fish_size:
for y in range(x[1]):
helper.append(x[0])
rand = random.randint(0, len(helper)-1)
print(helper[rand])

返回,例如

small

唯一的问题是,你不能使用像0.1这样的浮动百分比,但除此之外,它效果很好。它之所以有效,是因为百分比越高,辅助对象列表中的元素就越多。如果你得到一个兰特,如果的百分比更高,概率就更高