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)) / 100
                self.money -= evemoney
            else:
                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 in red_dic:
            r.set(i, j)

将红包数据存储到数据库

  用户取红包

def __init__(self, nums):
        self.ID = []  # 每个人的id
        self.nums = nums  # 红包个数

    def get_red(self):
        pnums = int(input("请输入有多少人参与抢红包:"))
        self.ID = [i for i in range(pnums)]
        random.shuffle(self.ID)  # 将id进行随机打乱,模拟抢红包前后顺序
        if pnums > self.nums:  # 红包数小于人数
            for i in range(pnums):
                if i < self.nums:
                    print("id为{}的用户抢到了{}元".format(self.ID[i], r.get(i).decode("utf-8")))
                else:
                    print("id为{}的用户未抢到红包".format(self.ID[i]))
        else:
            for j in range(pnums):
                print("id为{}的用户抢到了{}元".format(self.ID[j], r.get(j).decode("utf-8")))
            print("还有{}个红包未被抢".format(self.nums - pnums))

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

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

原文地址:https://www.cnblogs.com/xzk666/p/10581021.html

时间: 2024-10-10 09:51:02

python+redis简单实现发红包程序的相关文章

用Python编写简单的发红包程序和计算器原理

用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成分为单位 ret = random.sample(range(1,money),num-1) #在最低钱数1分与总钱数之间生成人数减1个数作为数轴的节点 ret.sort() #对列表进行排序 ret.insert(0,0) ret.append(money) for i in range(len(

使用PHP编写发红包程序

使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22 微信发红包是最近非常火的一件事情,大家或多或少的都发过或者收到过红包,那么下面来看一个我们在生活中常碰到的一个php实现微信红包的程序算法,希望这个程序对各位做微信开的朋友会带来帮助. 使用PHP发红包,当我们输入红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,每个红

python实现简单的数学小程序

冒泡法排列list利用打标记来优化 避免重复循环杨辉三角形process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=" alt="python实现简单的数学小程序" />建立二维列表,if判定打印出第一个与最后一个1,其余利用列表索引计算与上图类似将每一行列表尾部补0,利用负索引 直接

PHP实现发红包程序

我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第二个红包=10-第一个红包金额: N=3 第三个 红包1=0.01至9.99之间的某个随机数 红包2=0.01至(10-红包1-0.01)的某个随机数 红包3=10-红包1-红包2 -- 于是我们得到一个规律,在分配当前红包金额时,先预留剩余红白所需最少金额,然后在0.01至总金额-预留金额间取随机

Python实现简单的http服务器程序

主要的需求是这样的,需要调用服务器端的程序获取GPU服务器的信息并且返回给前端显示出来,那么就需要完成一个服务器端的程序,获取服务器的数据之后将数据返回(以JSON格式). 效果如下图: 页面没有内容是因为服务程序还没有启动.下面完成服务器程序: #!/usr/bin/python from bottle import route,run,template import os from bottle import get,post,request import re gpu_info_dict

python最简单的发邮件方式(不带附件)

今天在尝试使用python发送邮件,在网上看了很多教程,发觉对于初学者的我有点复杂和代码比较麻烦,而且也没有太多的注释告诉我这是干嘛用的,用法是什么 这个教程十分简单,但是我足够应付我日常工作的需要了,作为运维,我要的功能只是能够发送邮件并且正确显示其内容就够,不需要太多花俏的东西. 测试的准备工作是,我在虚拟机下把w的命令输出重定向到一个文件,作为邮件body体的发送内容. w > msg.log [[email protected] tmp]# cat msg.log 02:48:50 up

python,redis简单订阅

python连接redis import redis r =redis.Redis(host='192.168.199.11',port = 6379 ,db = 0) r.publish('chan_107','ni hao a ') 监听 : redis-cli SUBSCRIBE chan_107

python redis 简单使用类

#!/usr/bin/python #coding=utf-8 import redis class urlList(): ############################################# # create by myjack # you can call the function by urlList Class. # vertion : v-01 # date : 2015-4-5 ##########################################

《Python Network Programming Cookbook》读书笔记1---套接字, IPv4, 简单的Client/Server程序

这一部分主要介绍python中socket模块的相关内容,socket即套接字. socket是使用TCP/IP协议的应用程序通常采用的应用编程接口,它位于运输层和应用层之间,起源于UNIX,由于遵从UNIX“一切皆文件的”思想故socket可看作一种特殊的文件,对其的操作基本可以视为读写I/O.打开.关闭.关于套接字的基本概念@吴秦的Linux Socket编程(不限Linux)写的很详细,大家可以参考. 在下面列出的各个部分中我将先贴出代码,然后对其进行解释. 通过python3获得本机名和