Python--抽奖概率统计测试

背景:有个抽奖相关的需求,其中给定虚拟奖品的概率是95%,实物奖品的概率是5%,实物中又有很多价值不等的礼物,概率也不一样。想着写个脚本,把抽到的奖品记录下来,然后计算整体的抽奖概率。

 
写这个抽奖概率统计脚本思路:
1、第一步,请求抽奖接口,获取接口数据


2、接口中的rewardType,rewardName字段表示奖品的id和名称,其中rewardType<8时,都是虚拟奖品,大于8的都是实物奖品,就可以根据rewardType判断,在这5000次抽奖中,抽到了几次虚拟奖品,几次实物奖品,可以算出虚拟/实物奖品的概率


3、然后根据实物列表中,计算每个实物出现的次数,将重复的实物奖品以字典形式的输出


4、再根据每个实物出现的次数,计算概率

from time import sleep
import requests
from collections import Counter


def choujiang(**kwargs):
    shiwu_num = 0  # 实物奖品数量
    xuni_num = 0  # 虚拟奖品数量
    testList = [] # 实物名称
    totel = 5000  # 总的抽奖次数
    headers_admin = {'content-type': 'application/x-www-form-urlencoded',
                     'ua': 'xxx',
                     'Cookie': 'xxx',
                     }

    for i in range(totel):
        # 第一步,请求抽奖接口,获取接口数据
        result = requests.post("http://api.xxx.com/liveshow/activity/seventh/getReward", headers=headers_admin)
        response = result.json()
        print(response)
        # 接口中的rewardType,rewardName字段表示奖品的id和名称,其中rewardType<8时,都是虚拟奖品,大于8的都是实物奖品
        rewardType = response['data']['rewardType']
        rewardName = response['data']['rewardName']
        if rewardType < 8:
            shiwu_num = shiwu_num + 1
            testList.append(rewardName)
        else:
            xuni_num = xuni_num + 1
        sleep(2)
    print("\n*****一共抽奖%s次,抽到实物次数为:%s次,抽到虚拟奖品次数为:%s次*****\n" % (totel, shiwu_num, xuni_num))
    print("抽取到的实物为:", testList)

    # 计算每个实物出现的次数,将重复的实物奖品以字典形式的输出
    chouzhong_shiwu = dict(Counter(testList))
    print({key: value for key, value in chouzhong_shiwu.items() if value > 1})

    # 出现的次数取出来,计算概率
    avgDict = {}
    for k, v in chouzhong_shiwu.items():
        # v是每个实物出现的次数
        avgDict[k] = v / float(totel) * 100
        print("抽到%s的概率为:%.2f%%" % (k, avgDict[k]))


if __name__ == "__main__":
    choujiang()

注意:这样计算也是看概率分布,不能百分百和产品/开发给出的概率一模一样,但是至少能验证整体的概率是否正确,并且能看出一些比较贵重实物,概率是否有很大的异常,让需求上线是自己心里也有底。可以把请求接口的次数调大一点,这样会更接近于给出的概率。

猜你喜欢

转载自blog.csdn.net/yuan_ahui/article/details/126176994