本文共 971 字,大约阅读时间需要 3 分钟。
上一篇笔记的pygame游戏对敌人和白云的移动速度使用了随机函数randint()
,游戏体验不是太好。如果是按概率随机选取设置速度的话,游戏体验会好一些。
据我了解,random.choice(seq)
是等概率选取一个,不是我想要的。而 numpy.random.choice(seq, p, k)
是按概率随机重复选取多个,这正是我想要的。
但是,我不想为这么一个函数引入巨大的numpy库,所以打算自己实现一个按概率随机选取的函数。
特此将代码记录如下:
# 作者:hhh5460# 时间:2017年6月17日import random# 根据概率随机选取def random_choice(seq, prob, k=1): ''' 功能: 按给定概率prob,从seq中选取元素。可重复k次 注意 1. seq, prob长度要相等 2. prob的概率和要等于1 3. k 表示重复选取的次数,默认为1次 4. 结果返回list 5. 用到了random模块的random()函数 例子: >>> random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35]) ['d'] >>> random_choice('abcd', [0.4, 0.15, 0.1, 0.35], k=5) ['d','d','b','a','d'] ''' res = [] for j in range(k): p = random.random() for i in range(len(seq)): if sum(prob[:i]) < p <= sum(prob[:i+1]): res.append(seq[i]) return res # 测试def test(): print(random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35], k=5))test()
转载地址:http://lpyba.baihongyu.com/