python 微信红包生成器
#红包生成思路
#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 微信红包生成器的更多相关文章
- Python微信红包算法
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- python 微信红包
def redbags(money, num=10): import random choice = random.sample(range(1, money * 100), num - 1) cho ...
- Python自动抢红包,超详细教程,再也不会错过微信红包了!
目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一 ...
- Python+Appium实现自动抢微信红包
前言 过年的时候总是少不了红包,不知从何时开始微信红包横空出世,对于网速和手速慢的人只能在一旁观望,做为python的学习者就是要运用编程解决生活和工作上的事情. 于是我用python解决我们的手速问 ...
- (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class ...
- 基于微信红包插件的原理实现android任何APP自动发送评论(已开源)
背景 地址:https://github.com/huijimuhe/postman 核心就是android的AccessibilityService,回复功能api需要23以上版本才行. 其实很像在 ...
- 腾讯大讲堂 微信红包系统设计 & 优化
http://djt.qq.com/article/view/1349 编者按:经过2014年一年的酝酿,2015微信红包总量创下历史新高,峰值1400万次/秒,8.1亿次每分钟,微信红包收发达10. ...
- 微信红包系统设计 & 优化
微信红包系统设计 & 优化 浏览次数:151次 腾讯大讲堂 2015年04月02日 字号: 大 中 小 分享到:QQ空间新浪微博腾讯微博人人网豆瓣网开心网更多0 编者按:经过2014年一年 ...
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
随机推荐
- ASP .NET Views文件夹下面的文件找不到
习惯将页面和它对应的js,css文件放在一个文件夹下,将这些都放在Views文件夹下 运行的时候发现找不到js和css文件 因为在MVC中,是不建议直接去访问Views文件夹的我们建立的ASP ...
- siliverlight某些事件无法响应
对一些无法响应的时间,需要注册 控件名:XZWT_TreeViewItem 事件:this.XZWT_TreeViewItem_MouseLeftButtonDown 具体注册方法: XZWT_Tre ...
- Z-Order
The z-order of a window indicates the window's position in a stack of overlapping windows. This wind ...
- fileapi.h里的API函数(包括LockFileEx和FindFirstChangeNotification函数)
/** * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file ...
- 零元学Expression Blend 4 - Chapter 44 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(下)
原文:零元学Expression Blend 4 - Chapter 44 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(下) 抱歉久等了!!!! 终於到了动画MenuBar ...
- 修复VirtualBox "This kernel requires the following features not present on the CPU: pae Unable to boot – please use a kernel appropriate for your CPU"(安装深度Linux的时候就需要)
异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 修复VirtualBox "This kernel requires ...
- Channel 9视频整理【1】
David Dong 微软mvp https://www.facebook.com/DotNetWalker http://studyhost.blogspot.tw/ https://ch ...
- SetForegroundWindow API函数还不够(好多好多解决方案,真是奇思妙想)
好多好多解决方案: var Input: TInput; begin ZeroMemory(@Input, SizeOf(Input)); SendInput(, Input, SizeOf(Inpu ...
- SQLite实现内存键值存储
SQLite数据文件往Linux内存文件系统/dev/shm/data.sqlite3一放,就是内存级读写性能的SQL系统.用SQLite实现内存键值存储:CREATE TABLE IF NOT EX ...
- WSAAsyncSelect Demo
#include <WinSock2.h> #include <Windows.h> #include <StrSafe.h> #pragma comment(li ...