自己想动手完成一个抽奖小程序遇到一点问题
随机性我知道怎么实现,但是我希望可以根据比重进行随机抽奖,谁比重大谁概率高,但是我查了random也没有这样的方法。你看看这个思路可以不
假设有a,b,c,a中奖的概率为70% b为20%,c为10%
那就可以random(10),a中奖的范围是1~7,b是8~9,而c要是10. 这样可否:生成一个随机目标的列表,比重越大的目标,重复项越多,然后使用random.shuffle将列表打乱,再用random.choice从列表中选择目标。 import random
def test():
global sample
s_sum = sum(sample.values())# 权重和
r = random.randint(0, s_sum)# 随机一个数
c_sum = 0
for k in sample.keys():
c_sum += sample# 当前权重梯度值
if r <= c_sum:# 如果随机数小于当前权重梯度,说明在当前人的随机值,返回当前k
return k
if __name__ == "__main__":
sample = {'小明': 10, '小红': 20, '小刚': 30, '小洋': 40, '小芳': 50}# 数字是他们的权重
result = dict([(x, 0) for x in sample.keys()])# 存测试1000次结果
for i in range(1000):
kt = test()
result += 1
print(result)
suchocolate 发表于 2021-11-1 13:57
你好,大神的代码对我有很大启发,有一个小问题想询问一下:这些代码的目的都是为了,计算出概率大小,但是没有进行随机的抽奖对吗 hrpzcf 发表于 2021-11-1 12:37
这样可否:生成一个随机目标的列表,比重越大的目标,重复项越多,然后使用random.shuffle将列表打乱,再用 ...
很好的想法!!!!我觉得已经接近成功了。 大马强 发表于 2021-11-1 12:26
你看看这个思路可以不
假设有a,b,c,a中奖的概率为70% b为20%,c为10%
那就可以random(10),a中奖的范围 ...
呜呜,我一开始的思路就是这样的,但是我有一点转不过弯,这里只能出现整数概率,不准确,我希望概率可以有53%、64%这样的,就是这种处理方法容易有些人的概率一样,不公平 suchocolate 发表于 2021-11-1 13:57
我重新理解了一下,应该是抽奖一千次后谁的比重大,谁就是中奖者对吧 suchocolate 发表于 2021-11-1 13:57
实在是太帅了!这个方法秒! W1ND123 发表于 2021-11-1 16:23
你好,大神的代码对我有很大启发,有一个小问题想询问一下:这些代码的目的都是为了,计算出概率大小,但 ...
1)不是计算概率,就是随机一个数,看他在哪个范围。属于哪个范围,那个范围的名称就是结果。比如上面的图,如果随机数落在70,它大于60,小于100,所以属于浅黄色。
2)测试1000次是为了验证函数是能够正常按照权重来随机抽选的,因为只测一次或少量次数,并不能看出我们设置的权重有没有效果。如果验证成功,可以直接使用。import random
def test():
global sample
s_sum = sum(sample.values())# 计算权重和
r = random.randint(0, s_sum)# 随机一个数
c_sum = 0# 当前权重和,配合图里就分别是:10,30,60,100,150
for k in sample.keys():
c_sum += sample
if r <= c_sum:# 如果随机数小于权重和,如随机数是70,小于100,那么就在黄色区域
return k# 返回黄色区域的key
if __name__ == "__main__":
sample = {'小明': 10, '小红': 20, '小刚': 30, '小洋': 40, '小芳': 50}# 数字是他们的权重
print(test())# 不再验证,直接应用测试
3)另外力扣上题做多了,你会发现这种题并不难。
本帖最后由 W1ND123 于 2021-11-1 18:48 编辑
suchocolate 发表于 2021-11-1 17:09
1)不是计算概率,就是随机一个数,看他在哪个范围。属于哪个范围,那个范围的名称就是结果。比如上面的 ...
不是概率,但是用法相当于是一个随机的抽奖了对吧 W1ND123 发表于 2021-11-1 18:46
不是概率,但是用法相当于是一个随机的抽奖了对吧
随机抽奖和权重抽选(选择)不是一个概念。 suchocolate 发表于 2021-11-1 19:20
随机抽奖和权重抽选(选择)不是一个概念。
是的,我的措辞不当,我想说的应该是,这个用法就相当于一个权重抽奖了对吧 W1ND123 发表于 2021-11-1 20:38
是的,我的措辞不当,我想说的应该是,这个用法就相当于一个权重抽奖了对吧
对的 suchocolate 发表于 2021-11-1 21:07
对的
太开心了~已经完美做出自己想要的效果了
页:
[1]