python自学数据结构和算法分析

类似微信随机红包算法及代码

2019-02-13  本文已影响4人  六天天天向上

接了老板一个需求,做一个类似微信随机红包的功能,具体需求如下:

整个需求相对来说比较简单,红包填写表单+微信分享+队列抢红包+红包随机算法,这篇文章主要介绍一下红包随机算法。
以前光只顾抢微信红包了,没有仔细思考过微信随机红包发放算法,这次接到这个需求后,对微信红包仔细研究了一番,发现以下规律:

  1. 红包金额从小到大呈现正态分布。
    小红包和大红包占少数,大部分人抢到的都是不大不小的红包。
  2. 最大红包和最小红包出现的位置随机。

了解了微信随机红包的呈现规律后,自己的红包算法就比较好完成了,核心使用random随机函数。
Python代码如下:

import random

"""
amount 积分总数
num 红包个数
"""
def randomRedPackets(amount, num):
    minMoney = 100 #一个红包中最小的积分数
    totleMoney = amount * 100 #精确2位小数,统一扩大100倍
    safeMoney = 0 #每个红包的安全上线
    resdata = []
    for x in range(1,num+1):
        tmpMul = 1 if((num - x) // 2 == 0) else (num - x) // 2      
        safeMoney = (totleMoney - (num - x) * minMoney) // tmpMul #随机安全上限
        if x != num:
            money = random.randint(minMoney,safeMoney)
            totleMoney -= money
        else:
            money = totleMoney
        resdata.append(money/100)
    print(resdata)

每个红包500积分,分8个包,运行100次,统计结果如下图所示:


统计散点图
上一篇 下一篇

猜你喜欢

热点阅读