#红包生成思路
#200 块钱 10个红包
#0-200 的一个轴,随机取9个点,分成10段, 每一段的值表示一个红包的大小
#把输入的 money值 * 100 拿到的数值就是分, 不用再考虑单位是元的时候 保留2位小数
import random
def red_pocket(money,num):
money = money * 100 #把元 换算成分
ret = random.sample(range(1,money),num-1)
#random.sample 要在列表中取值,所以要range一下,range(1,money)1是1分,再随机抽取9个数 ret.sort() # ***没有返回值***
# 对抽取的数进行排列 [3016, 8109, 12859, 13762, 14179, 14329, 15012, 17230, 19200]
#在列表中插入 0 和200, 等会做减法算每一个红包的大小用
ret.insert(0,0)
ret.append(money)
# return ret [0, 2146, 2299, 2303, 5749, 8003, 8968, 14713, 17829, 19375, 20000] for i in range(len(ret)-1):
gap = (ret[i+1] - ret[i])/100 #算出每一段的差值,再除以100 转换成单位元
yield gap # 分回一个生成器, 在抽红包之前就已经分好了,然后按照抽的顺序弹出红包金额 red_g = red_pocket(200,10)
for i in red_g:
print(i)
#对生成器循环10次,查看金额的分配情况
for j in range(10):
red_g = red_pocket(200,10)
lst = []
for i in red_g:
lst.append(i)
print(lst)

#结果:
[8.8, 8.83, 55.25, 34.3, 7.5, 18.83, 25.88, 5.05, 5.44, 30.12]
[25.83, 26.8, 15.77, 50.31, 1.86, 30.71, 2.73, 14.76, 29.07, 2.16]
[2.22, 62.77, 2.76, 7.02, 2.7, 34.73, 7.72, 16.13, 21.74, 42.21]
[20.62, 2.85, 13.56, 19.2, 35.54, 13.35, 15.78, 10.49, 67.04, 1.57]
[23.94, 27.86, 6.54, 69.68, 0.64, 5.5, 2.87, 14.26, 44.74, 3.97]
[21.69, 8.92, 22.33, 8.22, 13.65, 38.69, 15.82, 3.33, 9.88, 57.47]
[32.61, 8.4, 0.14, 5.47, 4.09, 48.72, 30.4, 13.32, 12.6, 44.25]
[2.56, 31.74, 38.63, 4.93, 45.22, 10.95, 7.8, 15.75, 13.96, 28.46]
[11.31, 10.21, 1.09, 7.8, 30.58, 43.52, 29.68, 55.75, 7.05, 3.01]
[19.96, 53.82, 8.67, 18.44, 6.52, 11.43, 38.6, 1.93, 20.37, 20.26]

可以对比一下不同的思路:

# 方法二:
# 发红包
# 红包数量 钱数
# 拼手气红包
import random
def func(x,y):
count = 1
lst = []
while count <= num:
for i in range(num):
global money
bonus = random.uniform(0.01,money-(0.01*num)) #取随机小时, 范围是0.01 - money
bonus = round(bonus,2) #取小数点后保留两位
money = money - bonus
count = count + 1
lst.append(bonus)
random.shuffle(lst) #对生成的结果重新洗牌
# 但是缺点还是存在, 这种算法的缺点是因为一开始会有人先抽取一个大数,剩余的人在剩下的小范围内抽数
# 很少再有人抽到的数比第一个人的大. 虽然shuffle 把抽取结果重新洗牌了,但是还会看到数字分布有极端
return lst
num = 5 #int(input("红包个数:"))
money = 20 #int(input("金额:"))
print(func(num,money))
for i in range(10):
num = 5 #int(input("红包个数:"))
money = 20 #int(input("金额:"))
print(func(num,money)) 结果: 可以发现有一个两个比较大的数,剩余的都很小
[1.11, 0.14, 6.44, 0.19, 11.55]
[6.29, 0.04, 10.68, 0.76, 1.21]
[2.58, 0.02, 14.79, 1.01, 1.24]
[0.01, 9.85, 0.04, 9.04, 0.96]
[0.02, 2.13, 0.83, 13.3, 3.64]
[0.32, 0.25, 5.12, 3.04, 11.19]
[18.83, 0.36, 0.07, 0.05, 0.62]
[0.07, 17.4, 2.29, 0.16, 0.02]
[10.23, 1.37, 0.98, 2.31, 4.4]
[2.59, 0.12, 1.75, 0.65, 13.51]

python 微信红包生成器的更多相关文章

  1. Python微信红包算法

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  2. python 微信红包

    def redbags(money, num=10): import random choice = random.sample(range(1, money * 100), num - 1) cho ...

  3. Python自动抢红包,超详细教程,再也不会错过微信红包了!

    目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一 ...

  4. Python+Appium实现自动抢微信红包

    前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...

  5. (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

    微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class ...

  6. 基于微信红包插件的原理实现android任何APP自动发送评论(已开源)

    背景 地址:https://github.com/huijimuhe/postman 核心就是android的AccessibilityService,回复功能api需要23以上版本才行. 其实很像在 ...

  7. 腾讯大讲堂 微信红包系统设计 & 优化

    http://djt.qq.com/article/view/1349 编者按:经过2014年一年的酝酿,2015微信红包总量创下历史新高,峰值1400万次/秒,8.1亿次每分钟,微信红包收发达10. ...

  8. 微信红包系统设计 & 优化

    微信红包系统设计 & 优化 浏览次数:151次 腾讯大讲堂 2015年04月02日 字号: 大 中 小 分享到:QQ空间新浪微博腾讯微博人人网豆瓣网开心网更多0   编者按:经过2014年一年 ...

  9. python写红包的原理流程包含random,lambda其中的使用和见简单介绍

    Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...

随机推荐

  1. jquery子元素过滤器

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. Android 查看APK文件的签名算法

    查看APK使用了什么签名算法 keytool -list -printcert -jarfile xxx.apk 示例: 签名者 #1: 签名: 所有者: 发布者: 序列号: 有效期开始日期: 证书指 ...

  3. delphi文件操作(比较全)

    Delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用. 但: input:只读.output:只写.用时注意以免引起异常. 文件是由文件名标识的一组数据的集合,文件通常 ...

  4. LINQ查询表达式---------from子句

    LINQ查询表达式---------from子句 LINQ的查询由3基本部分组成:获取数据源,创建查询,执行查询. //1.获取数据源 List<, , , , , }; //创建查询 var ...

  5. 【码云周刊第 23 期】Web 高效开发必备的 PHP 框架(从这里学起)good

    码云项目推荐 1.项目名称:多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支 ...

  6. WCSTOMBS 函数不支持中文件的解决方法(设置代码页)

    代码页没有进行设置.需要调用locale.h 中定义的一个函数设置默认的代码页 _tsetlocale(LC_ALL,_T(""));//设置代码页  wcstombs(sendB ...

  7. Angucomplete —— AngularJS 自动完成输入框

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  8. C++开源库,欢迎补充

    C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C#语 ...

  9. QT---基于WinPcap的局域网络管理工具(主机扫描、包过滤、ARP攻击、端口扫描)

    主要功能 本机适配器扫描 局域网各主机扫描 类似于WinShark的抓包工具,能够简单的过滤Tcp.Udp.Arp等包 ARP攻击功能,限制局域网内指定主机上网 流量统计,统计实时网速 多线程攻击,多 ...

  10. qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(sender()取得发信号的对象后,就取得了它的全部信息,为所欲为)

    当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了. 提高代码效率,减少代码量. 代码片: void Widget::onClicked() { QPushButton* but ...