我有两个很长的名单。 示例:
}
玩家数量可以改变:
good = ["Good thing1", "Good thing2", "Good thing3", "Good thing4", "Good thing5", ...]
bad = ["Bad thing1", "Bad thing2", "Bad thing3", "Bad thing4", "Bad thing5", ...]
每位玩家有43%的可能性会发生好事(或者有57%的可能性会发生坏事)。没有两个球员可以有相同的好或坏结果。
我试图做这样的加权结果:
players = 5
但我得到重复。如果我这样做,那么加权结果就会变得不加权,如下例所示:
weighted_outcome = good * 43 + bad *57
random.sample(weighted_outcome, 5) # Where 5 is the number of players
我是否正确假设加权的唯一方法是创建一个新的唯一加权列表?就像在这个例子中我有70%的好结果和30%的糟糕结果:
weighted_outcome = good * 43 + bad *57
random.sample(list(set(weighted_outcome)), 5) # Where 5 is the number of players
我觉得这仍然是错误的,因为在70%的情况下,每位球员都应该有机会发生一些好事,并且每个球员都有可能发生不好的事情。
答案 0 :(得分:1)
为什么不能使用if
?这是一个例子
from random import randint
good_things = [good1, good2]
bad_things = [bad1, bad2]
players = [player1, player2]
temp_good_things = good_things[:] # coping the lists
temp_bad_things = bad_things[:]
chance_for_good = 47
for player in players:
if randint(0, 100) <= change_for_good:
good_thing = get_random_element(temp_good_things)
temp_good_things.remove(good_thing)
player.do_thing(good_thing)
elif:
bad_thing= get_random_element(temp_bad_things)
temp_bad_things.remove(bad_thing)
player.do_thing(bad_thing)
为玩家提供唯一things
的关键是从列表中删除已使用的元素。为了节省基数things
,我将列表复制到临时列表中。