DEMO:
分析:谈到随机我们首先会想到Python里面有个random的模块,负责处理随机数。首先看看里面有没有现成的方法来处理这类根据权重出随机数。
看到所有方法中貌似没有。
通过编写函数自己实现:
思路一、既然要在产生随机数的时候考虑到元素的权重,就上面这个例子而言,不如就将card的个数看成权重数,比如card1有10张,card2有20张,card3有15张。再把所有张数的卡片加到一个列表中。card_list = [card1,card1,......card2,......card3......],然后再用random.choice(card_list)从列表中随机抽出一张卡片,这样抽出的就是基于卡片概率的了。
思路二、更加通用的实现。比如有N张卡片,权重和为1,根据权重来随机选出卡片。那么可以根据他们概率划分区间。比如20的就是0~0.2区间 40的就是0.2~0.6 30的就是0.6~0.9
剩下10的就是0.9~1,然后直接用random.random()生成一个0~1的随机数,可看成概率,然后看看落在哪个区间,就返回哪张卡片。区间就是他们的概率比,这样也能随机根据概率选出的卡片了。
更多思路读者可以自行思考、集思广益,请留言。
子彦