python实现的发红包程序全功能_python+redis简单实现发红包程序

redis是什么?

Redis 是一个高性能的key-value数据库!

想进一步了解请移步搜索引擎自行查找。

编写这个小程序的目的就是对redis进行一个简单的小操作,对redis有一个初步的了解,并未有什么高大尚的骚操作,适合小白阅读。

程序共分为三个部分。

1.创建红包

2.将红包存储到数据库

3.取出红包

1.创建红包

首先需要确定创建红包需要哪些参数。

1.红包的最小金额0.01

2.红包的数量

3.红包总金额

4.红包需要一个ID号(存储数据库的时候需要使用)

5.每个红包的金额

1 def __init__(self):2 self.min = 0.01 #红包最小金额

3 self.nums = 1 #红包数量

4 self.money = 0 #红包总金额

5 self.ID = [] #为每一个红包分配一个ID号。

6 self.evePm = [] #每个红包的分配金额

输入红包总金额和红包数量这里需要进行判断(避免出现平均金额小于0.01的尴尬局面)

while self.money / self.nums < 0.01:

self.money= float(input("请输入红包金额:"))

self.nums= int(input("请输入红包数量:"))if self.money / self.nums < 0.01:print("输入不符合红包规则,请重新输入")

这里需要提示一下,在获取金额和数量的是时候一定要进行类型转换,否则会报类型错误。

有了金额和红包数量就可以进行红包金额的分配了。这里就难住了我,红包的金额要怎么分配呢。于是我就在网上进行了查找,不查不知道,一查真奇妙。分发红包的算法还是蛮复杂的。所以我为了省时省力就选择了一个比较马虎的方法。虽然对于小白也不是一下子就能看懂的,但是慢慢读还是能看懂的。

for i in range(self.nums): #简单的红包分配计算方法

if i != self.nums-1:

safe_total= (self.money - (self.nums - i) * self.min) / (self.nums - i) #随机安全上限

evemoney = random.randint(self.min * 100, int(safe_total * 100)) / 100self.money-=evemoneyelse:

evemoney= round(self.money, 2) #精确到小数点后两位

self.evePm.append(evemoney)

在红包分配的时候有几个地方需要注意。第一个是利用这个计算方法分配红包时一定要有判断,因为如果没有判断,而是直接算出每个红包的金额,你会发现所有红包的金额加起来不等于总红包金额。原因也是随机数惹的祸。第二个虽然进行了判断,但是当红包金额有点大时,最后一个红包的金额会精确到小数点后好多位。这是很多语言都有的问题。那么就要强制精确到后两位。这样还是总金额嘛?放心,是的。

将红包发送到数据库(有关redis安装请参考其他技术博客)

pool = redis.ConnectionPool(host=‘127.0.0.1‘, password=‘‘) #创建redis连接池

r = redis.Redis(connection_pool=pool) #创建redis连接

全局创建redis连接池

self.ID = [i for i in range(self.nums)] #为每一个红包分配id

red_dic = zip(self.ID, self.evePm) #将id号与红包进行绑定

#for i, j in red_dic:

#print("id:{} 金额:{}".format(i, j))

for i, j inred_dic:

r.set(i, j)

将红包数据存储到数据库

用户取红包

def __init__(self, nums):

self.ID= [] #每个人的id

self.nums = nums #红包个数

defget_red(self):

pnums= int(input("请输入有多少人参与抢红包:"))

self.ID= [i for i inrange(pnums)]

random.shuffle(self.ID)#将id进行随机打乱,模拟抢红包前后顺序

if pnums > self.nums: #红包数小于人数

for i inrange(pnums):if i

这里的代码没有一点点的难度,仔细看都看得懂得。我就不做解释了。

想获取程序源代码,请点击获取

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值