【问题标题】:Catch fish by percentage - pygame按百分比抓鱼 - pygame
【发布时间】:2021-06-11 11:10:43
【问题描述】:

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

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

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

【问题讨论】:

  • 你的意思是百分比是得到相应种类的鱼的概率?
  • 是的,每条鱼都有被捕获的概率。
  • 这是一个非常有趣且令人惊讶的高效解决方案:stackoverflow.com/a/23264253/6770384

标签: python percentage


【解决方案1】:

您可以执行以下操作:


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 这样的浮点百分比,但除此之外它效果很好。它之所以有效,是因为百分比越高,辅助列表中的元素就越多。如果你然后得到一个兰特,如果百分比更高,概率就更高

【讨论】:

    【解决方案2】:

    如果您有一个可供选择的元素列表(在您的情况下是鱼的类型)和一个权重列表(不必标准化为 1 或 100%),您可以使用 @ random 内置包的 987654323@ 方法。详情请参阅its documentation

    一个例子:

    >>> 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] 添加到函数调用的末尾会自动从列表中提取此值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多