按百分比捕鱼 - pygame
Catch fish by percentage - pygame
我想制作一个钓鱼游戏。每当玩家按下一个按钮时,游戏就会 return 一条鱼。
每条鱼都有一个百分比(小鱼,45%;中鱼,25%;大鱼,15%;巨鱼,4.9%;鲨鱼,0.1)。
fish_size = [("small",45),("medium",25),("big",15),("huge",4.9),("shark",0.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])
return 例如
small
唯一的问题是,您不能使用像 0.1 这样的浮点百分比,但除此之外效果很好。它之所以有效,是因为百分比越高,辅助列表中的元素就越多。如果再得到一个兰特,百分比越高概率越高
如果您有一个可供选择的元素列表(在您的例子中是鱼的类型)和一个权重列表(不必标准化为 1
或 100%),您可以使用 random
内置包的 choices
方法。有关详细信息,请参阅 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
到 return 多个元素(使用可选的 k
关键字参数)。因此,choices
return 是一个列表。默认情况下,k=1
,因此列表中只有一个值 returned。在函数调用末尾添加 [0]
会自动从列表中提取此值。
我想制作一个钓鱼游戏。每当玩家按下一个按钮时,游戏就会 return 一条鱼。 每条鱼都有一个百分比(小鱼,45%;中鱼,25%;大鱼,15%;巨鱼,4.9%;鲨鱼,0.1)。
fish_size = [("small",45),("medium",25),("big",15),("huge",4.9),("shark",0.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])
return 例如
small
唯一的问题是,您不能使用像 0.1 这样的浮点百分比,但除此之外效果很好。它之所以有效,是因为百分比越高,辅助列表中的元素就越多。如果再得到一个兰特,百分比越高概率越高
如果您有一个可供选择的元素列表(在您的例子中是鱼的类型)和一个权重列表(不必标准化为 1
或 100%),您可以使用 random
内置包的 choices
方法。有关详细信息,请参阅 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
到 return 多个元素(使用可选的 k
关键字参数)。因此,choices
return 是一个列表。默认情况下,k=1
,因此列表中只有一个值 returned。在函数调用末尾添加 [0]
会自动从列表中提取此值。