为了账号安全,请及时绑定邮箱和手机立即绑定

一个抽奖的算法

一个抽奖的算法

牛魔王的故事 2019-05-21 09:53:53
求一个抽奖的算法,在下面数组的8个对象中抽奖,根据后面的中奖概率,返回a,b,c中奖概率这个可以不遵循全加起来为100%[{"a",20.00%},{"b",20.00%},{"c",20.00%},{"d",10.00%},{"e",10.00%},{"f",10.00%},{"g",10.00%},{"h",0.05%},]
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

程序思路:1.中奖概率的理解:概率越大,被抽中的几率就越大,假设字母a-h(可以有重复)总个数为S,字母a的的个数为A,那么字母a被抽中的概率为:p=A/S2.如题目所给出的字母对象及概率。假设字母a-h总个数为2000,那么根据概率,a应为400个,b为400个,c为400个,d为200个,e为200个,f为200个,g为200个,h为1个。3.将所有字母想象成球,放在一个口袋里,随机抽取。程序语言说明为,将字母全部存储在一个数组里,每次随机一个数作为下标,根据下标所得的字母就是抽取的结果。简单编程(python)
#usr/bin/python
#-*-coding=utf-8-*-
#初始化
data=[
["a",20.00%],
["b",20.00%],
["c",20.00%],
["d",10.00%],
["e",10.00%],
["f",10.00%],
["g",10.00%],
["h",0.05%],
]
#为了保证字母个数为非负整型,假设h为1个,总个数为2000个
all=2000
arr=[]
foriinrange(len(data)):
letter=data[i][0]
num=data[i][1]*all
forjinrange*(num):
arr.append(letter)
#产生一个随机索引
index=random.randint(0,len(arr))
#根据随机索引寻找字母
result=arr[index]
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 889 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信