微信抢红包代码 python_微信红包python实现

昨天去面试一个公司的时候,和对方技术负责人聊到一半,突然叫我现场写 一个微信红包出来,当时我是懵逼的(之前叫我手写一个排序出来,我只写出了一个冒泡出来),但是想了几秒钟,觉得应该挺简单的吧,发红包不就是点击一次抢红包然后分配一次新的红包么,直接写个生成器出来不就搞定了

然后我按照我的简单思路顺序写了个生成器出来,每次新红包从上一次的余额中随机分配,我写到一半就已经发觉这个问题没那么简单了。。每次都随机分配,那么各个红包之间的差别就太大了,而且关键我还把生成器写错了。

后来稍微查了一下资料,原来真正的发红包算法里面每一次抢到红包金额

的数学期望都是相等的,主要核心算法就是每一次红包的金额为当前的(总金额/红包个数)*2,比如总金额100元,分10个红包,那么第一个红包的随机区间为(0,20),它的期望为10,同理第二个红包的理论期望值也为10,算法其实很简单,但是也很巧妙,感觉概率论的东西都忘光了,还好还记得期望是个啥东西

python实现

import random

def hb_generator(hongbao_num, money_sum):

hongbao_remain = hongbao_num

for i in range(hongbao_num -1):

min = 0.01

max = money_sum/hongbao_remain*2

money = round(random.uniform(0, max), 2)

hongbao_money = money if money > min else min

hongbao_remain -= 1

money_sum -= hongbao_money

yield hongbao_money

yield round(money_sum, 2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值