之前,在网上看到一篇文章,说多人抢红包时,微信红包金额的分配规则是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万次)的更多相关文章

  1. [小技巧] Python 脚本暴力破解 HC2600 机顶盒管理密码

    家里最近接入了广电有线电视,配了三个创维 HC2600 机顶盒,并且每个机顶盒还带有无线路由器功能. 免费赠送 Internet 接入服务倒也没什么,不过机顶盒内置的 WIFI 实在有点寒酸:只支持 ...

  2. 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧

    30个有关Python的小技巧 2013/07/04 · Python, 开发 · 4 评论 · Python 分享到: 66 本文由 伯乐在线 - Kevin Sun 翻译.未经许可,禁止转载!英文 ...

  3. 30个有关Python的小技巧

    从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...

  4. <转> 30 个有关 Python 的小技巧

    目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...

  5. 让你瞬间萌比的35个python小技巧

    今天在看python算法的时候,看到一篇关于python的小技巧.瞬间萌比了,原来python也可以这样玩,太神奇了.萌比的是原来这么简单的东西自己都不知道,虽然会写.废话不多说了,开始上菜. 1.拆 ...

  6. 关于Python ,requests的小技巧

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xie_0723/article/details/52790786 关于 Python Request ...

  7. Python入门:数据结构的3个小技巧

    这是关于Python的第11篇文章,主要介绍下数据结构的3个小技巧. 排序: 使用sorted函数实现排序. sorted函数按照长短.大小.英文字母的顺序给每个列表的元素进行排序.这个函数经常在数据 ...

  8. Python Requests 小技巧总结

    关于 Python Requests ,在使用中,总结了一些小技巧把,分享下. 1:保持请求之间的Cookies,我们可以这样做. import requests self.session = req ...

  9. Python语言防坑小技巧

    Python语言防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值即定义  1>.运行以下代码会出现报错 #!/usr/bin/env python #_*_ ...

随机推荐

  1. 查找默认安装的python路径,并输出到 FindPythonPathX_output.txt

    在python程序设计教学中,在汉化IDEL时.为PyCharm项目设置解释器时,经常需要查找python安装路径.对老手来说很简单,但对很多刚开始学习编程的学生来说,则很困难.所以,编写了一个批处理 ...

  2. 8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路

    ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选)   大数据是一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,而大数据作为企业运转的基础,只有经过提 ...

  3. React报错之Cannot assign to 'current' because it is a read-only property

    正文从这开始~ 总览 当我们用一个null值初始化一个ref,但在其类型中不包括null时,就会发生"Cannot assign to 'current' because it is a r ...

  4. MQ系列3:RocketMQ 架构分析

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 1 背景 我们前面两篇对主流消息队列的基本构成和技术选型做了详细的分析.从本篇开始,我们会专注当下主流MQ之一的RocketMQ. 从 ...

  5. RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  6. 【java】学习路线8-cmd带命令编译包

    /*java类包(package)package XX.XX.XX;    包名命名规则:(以域名开头,都是小写)        com.remooo.xx        编译:javac -d . ...

  7. Get请求使用请求体传递参数会报400异常的问题

    问题描述: 前端使用Get请求并且使用请求体传递参数,后端使用@RequestBody注解封装参数,这时会出现400的异常信息. 解决方法: 1.Get请求不要使用请求体,使用请求体的话用POST请求 ...

  8. 一文快速上手 Nacos 注册中心+配置中心!

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...

  9. bulk collect 在KingbaseES和Oracle的使用方法比较

    概述 BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎.通常可以在SELECT INTO.FETCH INTO以及RETURNI ...

  10. Java SE 7、接口

    接口 接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来 语法 interface 接口名{ ​ //属性 ​ //方法 } class 类名 imple ...