微信抢红包小技巧(python模拟100万次)
之前,在网上看到一篇文章,说多人抢红包时,微信红包金额的分配规则是0.01元到当前剩余金额平均数的2倍(最后一个人金额为当前剩下的所有金额),所以写了一个python程序,模拟量一百万次,分析了一下抢微信红包的小技巧。
(所有结论都基于某篇文章所说的微信红包金额的分配规则,如果实际规则不是这样,那么以下分析就都是错的)
假设金额50元,有5个人抢,那么计算可得:
第1个人抢,他的金额区间就是[0.01,20](50除以5乘以2)
第2个人抢,他的金额区间就是[0.01,24.99]
第3个人抢,他的金额区间就是[0.01,33.32]
第4个人抢,他的金额区间就是[0.01,49.97]
第5个人抢,他的金额区间就是[0.01,49.96]
可以看到:越往后抢的,理论上能拿到的红包上限越高(虽然可能性很小,但理论上运气好还是能拿到的)
那是不是越往后拿的红包就普遍更大呢???
并不是!!!理论上限高,不代表平均值更大,通过100万次模拟数据统计加以分析,可以得到5人按先后顺序得到手气王的可能性分别为0.22, 0.2, 0.2, 0.19, 0.19,即在人数较少时,先抢后抢差异不大。,(但是当人数较多时,比如几十个人,则后抢手气最佳的可能性更大)
运行结果如下图:
***********************
第1个人
max:20.00 min:0.01
average:10.01
***********************
第2个人
max:24.99 min:0.01
average:10.00
***********************
第3个人
max:32.92 min:0.01
average:10.00
***********************
第4个人
max:47.88 min:0.01
average:10.00
***********************
第5个人
max:47.39 min:0.01
average:9.99
手气最佳概率分布: [0.22, 0.2, 0.2, 0.19, 0.19]
附上代码,大家可以自己运行一次试试。
from random import randint,random,uniform
import numpy as np
people = 5#人数
times = 1000000#模拟次数
luck = []
for i in range(people):
luck.append([])
for i in range(times):
money = 50
for j in range(people):
if(j == people - 1):#最后一个人金额即为当前剩下的所有金额
packet = round(money,2)
elif(money > 0.01):
if(money - money/(people-j)*2 < 0.01*(people-j-1)):
packet = round(uniform(0.01,money/(people-j)*2 - 0.01*(people-j-1)),2)
#不能提前抢光红包
else:
packet = round(uniform(0.01,money/(people-j)*2),2)
else:
packet = 0.01
luck[j].append(packet)
money = money - packet
#print(luck)
for i in range(people):
print('***********************')
print('第{}个人'.format(i+1))
print('max:%.2f'%max(luck[i]),'min:%.2f'%min(luck[i]))
#print('min:%.2f'%min(luck[i]))
print('average:%.2f'%np.mean(luck[i]))
most_luck = [0]*people
matrix = np.array(luck).T
for i in range(times):
a = list(matrix[i])
position = a.index(max(a))
most_luck[position] = most_luck[position] + 1
for i in range(people):
most_luck[i] = round(most_luck[i]/times,2)
print(most_luck)
总结如下:
1.先抢不可能有大红包,后抢可能有大额红包
2.人少时,手机最佳的可能性均等;人多时,后抢手气最佳的可能性更大
(但这并不意味着后抢更好,毕竟后抢有可能抢不到!!!)
微信抢红包小技巧(python模拟100万次)的更多相关文章
- [小技巧] Python 脚本暴力破解 HC2600 机顶盒管理密码
家里最近接入了广电有线电视,配了三个创维 HC2600 机顶盒,并且每个机顶盒还带有无线路由器功能. 免费赠送 Internet 接入服务倒也没什么,不过机顶盒内置的 WIFI 实在有点寒酸:只支持 ...
- 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧
30个有关Python的小技巧 2013/07/04 · Python, 开发 · 4 评论 · Python 分享到: 66 本文由 伯乐在线 - Kevin Sun 翻译.未经许可,禁止转载!英文 ...
- 30个有关Python的小技巧
从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...
- <转> 30 个有关 Python 的小技巧
目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...
- 让你瞬间萌比的35个python小技巧
今天在看python算法的时候,看到一篇关于python的小技巧.瞬间萌比了,原来python也可以这样玩,太神奇了.萌比的是原来这么简单的东西自己都不知道,虽然会写.废话不多说了,开始上菜. 1.拆 ...
- 关于Python ,requests的小技巧
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xie_0723/article/details/52790786 关于 Python Request ...
- Python入门:数据结构的3个小技巧
这是关于Python的第11篇文章,主要介绍下数据结构的3个小技巧. 排序: 使用sorted函数实现排序. sorted函数按照长短.大小.英文字母的顺序给每个列表的元素进行排序.这个函数经常在数据 ...
- Python Requests 小技巧总结
关于 Python Requests ,在使用中,总结了一些小技巧把,分享下. 1:保持请求之间的Cookies,我们可以这样做. import requests self.session = req ...
- Python语言防坑小技巧
Python语言防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值即定义 1>.运行以下代码会出现报错 #!/usr/bin/env python #_*_ ...
随机推荐
- nginx代理与反向代理原理
简介: nginx是一个http服务器,稳定性好,底层由c编写,一个高性能的http 服务器/反向代理服务器及电子邮件代理服务器. nginx可以做web服务器,也可以做网关,主要应用于代理和方向代理 ...
- ABP vNext系列文章03---依赖注入
一.依赖注入的类型注册 ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的.因此,它的 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- 论文解读(NWR)《Graph Auto-Encoder via Neighborhood Wasserstein Reconstruction》
论文信息 论文标题:Graph Auto-Encoder via Neighborhood Wasserstein Reconstruction论文作者:Shaked Brody, Uri Alon, ...
- Hadoop集群搭建的详细过程
Hadoop集群搭建 一.准备 三台虚拟机:master01,node1,node2 时间同步 1.date命令查看三台虚拟机时间是否一致 2.不一致时间同步:ntpdate ntp.aliyun.c ...
- UIView Animation 动画学习总结
目录 一.前言 二.UIView Animation 2.1 简单动画 2.2 关键帧动画 2.3 View 的转换 三.CALayer Animation 3.1 基本动画(CABasicAnima ...
- C# using()的本质
" 程序世界没有秘密,所有答案都在源码里 " 01.点明观点 C#中,非托管资源使用之后必须释放,而using()是使用非托管资源的最佳方式,可以确保资源在代码块结束之后被正确释放 ...
- 第二十二篇:有关插槽solt的使用
1.什么是插槽? 插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示, 父组件可以在这个占位符中填充任何模板代码,如 HTML.组件等,填充的内 ...
- 【PMP学习笔记】第5章 项目范围管理
一.规范管理的内涵 项目范围管理:包括确保项目做且只做所需的全部工作,以成功完成项目的各个过程. 项目范围:为交付具有规定特性与功能的产品.服务或成果而必须完成的工作. 预测型:开始时定义可交付成果, ...
- 新增 Oracle 兼容函数-V8R6C4B0021
KingbaseES V8R6C4B0021新增加以下Oracle 兼容函数. 一.bin_to_num Oracle bin_to_num 函数用于将二进制位转换成十进制的数. 1.传入参数 tes ...