微信抢红包小技巧(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中,可以使用selenium库模拟微信网页版的操作,实现自动抢红包的功能。具体步骤如下: 1. 安装selenium库和Chrome浏览器驱动。 2. 打开微信网页版,并使用扫码登录。 3. 进入指定的聊天窗口,找到红包消息并点击。 4. 在弹出的红包界面中,获取红包金额和“开”按钮的位置。 5. 点击“开”按钮,红包后返回红包金额。 代码示例: ```python from selenium import webdriver import time # 打开Chrome浏览器 driver = webdriver.Chrome() # 打开微信网页版并扫码登录 driver.get('https://wx.qq.com/') time.sleep(10) # 进入指定的聊天窗口 chat_window = driver.find_element_by_xpath('//div[@title="好友昵称"]') chat_window.click() # 找到红包消息并点击 red_packet = driver.find_element_by_xpath('//div[@class="bubble_containner"]') red_packet.click() # 获取红包金额和“开”按钮的位置 red_packet_amount = driver.find_element_by_xpath('//div[@class="money_num"]') open_button = driver.find_element_by_xpath('//div[@class="open"]/a') # 点击“开”按钮,红包后返回红包金额 open_button.click() time.sleep(1) red_packet_amount = red_packet_amount.text print('红包,金额为:', red_packet_amount) # 关闭浏览器 driver.quit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值