使用Python模拟抢红包程序

春节将至,我决定尝试使用python来制作一个抢红包的小程序

这个程序的技术要求并不是很高,只需要掌握random模块的知识即可完成

首先,引入random模块,用户输入总金额(total),以及分配的人数(division)

import random

total=float(input('The total amount of your rad packet:'))
division=int(input('How many people are to get the red packet:'))

之后我进行了第一次尝试(失败)
第一次尝试主要是直接进行随机操作,每一次的总金额发生变化,减去上一个人得到的金额,直至分配结束。

summoney=-total
for i in range(division-1):
    money=random.uniform(0.01,total-0.01)
    print('the %d player get %.2f yuan'%(i+1,money))
    total-=money
    summoney+=money
lastone=abs(summoney)
print('the %d player get %.2f yuan'%(division+1,lastone))

运行结果如下:

总结:
使用此方法出现的结果有二:

  1. 当总数额偏大的时候前几个个抢红包的人收益总是偏大
  2. 会出现后期-0.01元的情况,即红包提前被分完的情况

因此此程序可用度不高
.

.

.

接下来是第二次尝试(失败)
在第二次尝试的时候我选择了使用函数的方法,这个方法使程序与第一次相比更加稳定,但是第一次出现的问题依然存在

def hongbao(tota,num):
    each=[]
    already=0
    for i in range(1,num):
        t=random.uniform(0.01,(tota-already-0.01))
        r=float('%.6f'%t)
        each.append(r)
        already+=t
    each.append(float('%.6f'%(tota-already)))
    return each
a=hongbao(total,division)
for i in range(division):
    print('the %d player get %.2f yuan'%(i+1,a[i]))

但是不会出现-0.01元的情况
运行结果如下:
在这里插入图片描述在这里插入图片描述
程序的可用度依然不高

于是我选择进行第三次尝试(较为成功)
这次尝试源于网上提供的思路,即为了保证每个人的收益均值,所以每次红包金额的范围被控制在(0.01,m/n*2)之间,其中m为剩余金额,n为剩余人数,这样即可以保证每次红包金额的均值是相同的。

举个例子:
假设有10个人,红包总额100元。
100/10X2 = 20, 所以第一个人的随机范围是(0,20 ),平均可以抢到10元。
假设第一个人随机到10元,那么剩余金额是100-10 = 90 元。
90/9X2 = 20, 所以第二个人的随机范围同样是(0,20 ),平均可以抢到10元。
假设第二个人随机到10元,那么剩余金额是90-10 = 80 元。
80/8X2 = 20, 所以第三个人的随机范围同样是(0,20 ),平均可以抢到10元。
以此类推,每一次随机范围的均值是相等的。

此外,前两次尝试时总是会涉及保留两位小数的问题,较为繁琐也缺少精度,因此,在此次尝试中统一将数值*100,用randint的方法取整数后在/100,由此来保证数据的可靠性。

此次尝试中还加入了运气王组件

each=[]
rest=total*100
restpeople=division
for i in range(1,division):
    if rest==0:
        print('done')
    else:
        money=random.randint(1,int((rest/restpeople)*2)-1)
        restpeople-=1
        rest-=money
        each.append(money)
        print('the %d player get %.2f yuan'%(i, money/100))
each.append(rest)
print('the %d people get %.2f yuan'%(division,rest/100))
print('the best one is %d'%(each.index(max(each))+1))

运行结果如下:
在这里插入图片描述
这个方法较优,并且会在人数不满足条件的情况下报错
在这里插入图片描述
唯一的小小的不足就是
这个方法会导致除了最后一个人以外的每个人都不会得到超过两倍均值的红包

以上就是今天的尝试

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python 微信自动抢红包是指使用Python编程语言编写一个程序,可以自动检测并抢夺微信红包。下面我将简要介绍实现此功能的一种方法: 首先,我们需要使用Python中的自动化测试工具,例如Appium或PyAutoGUI,来模拟用户在微信中的操作。这些工具可以帮助我们自动化模拟用户的点击、滑动等操作。 其次,我们需要使用Python中的图像处理库,例如OpenCV,来识别微信红包页面。我们可以通过分析红包页面的特征,例如红包图标、文字提示等,来判断红包是否出现。 一旦检测到红包出现,我们就可以使用自动化测试工具模拟点击红包,并进入红包详情页面。在该页面,我们可以使用相同的方法判断红包是否已经被抢过。 如果红包尚未被抢过,我们可以模拟点击打开红包。如果红包已被抢过,则可以返回上一页,继续检测下一个红包。 需要注意的是,为了避免被微信检测出异常行为,我们应该设置一定的点击间隔,并在每次点击后进行适当的休眠。此外,我们还应该注意不要频繁的点击红包,以免引起他人的不适或麻烦。 总结起来,Python可以通过自动化测试工具和图像处理库实现微信自动抢红包的功能。当然,红包的识别和抢夺是一个复杂的过程,需要考虑到各种情况的处理。以上只是一种简要的实现思路,具体的代码编写需要根据实际情况进行调整和完善。 ### 回答2: Python 可以通过调用微信的接口来实现自动抢红包功能。首先,我们需要安装一些必要的库,如itchat、time、random等。然后,我们可以使用itchat库来登录微信,并注册好相应的消息处理函数。 当收到红包消息时,我们可以在消息处理函数编写相应的逻辑来自动抢红包。通过itchat获取红包的发送者、红包金额等信息,并编写自动点击红包、输入口令等操作的代码。可以使用模拟点击的方式来点击屏幕上的红包图标,并模拟输入口令等操作来自动领取红包。 为了避免被封号或者频繁出现验证码等问题,我们可以在代码中加入一些延时操作、随机等待时间,并合理设置红包的打开速度。同时,为了提高代码的稳定性和可靠性,可以加入异常处理机制来处理各种异常情况。 在实际使用中,我们还可以结合一些其他技术,如图像处理、OCR识别等来提高自动抢红包的成功率。例如,可以使用图像处理技术来识别屏幕上的红包图标,并自动点击红包。也可以使用OCR识别技术来自动识别红包口令并自动输入。 需要注意的是,使用Python自动抢红包属于一种自动化行为,可能涉及到一些法律和道德问题。在进行相关操作前,请务必了解相关规定,并确保自己的行为符合法律法规和道德规范。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值