python生成随机红包的实例写法


Posted in Python onSeptember 02, 2019

假设红包金额为money,数量是num,并且红包金额money>=num*0.01

原理如下,从1~money*100的数的集合中,随机抽取num-1个数,然后对这些数进行排序,在排序后的集合前后分别插入0和money*100,组成新的集合

用新的集合,(后一个数-前一个数)/100得到红包的大小

然后使用红包的时候,从num个红包集合中随机拿一个,既是随机红包了

def redbags(money, num=10):
  import random
  choice = random.sample(range(1, money * 100), num - 1)
  choice.extend([0,money*100])
  choice.sort()
  return [(choice[i + 1] - choice[i]) / 100 for i in range(num)]

扩展内容:

进入红包思路主题

好了前面简单的介绍玩今天要使用的工具该进入正题说说红包的思路了,在你发红包的时候要填写两个重要参数就是红包的金额我命名为cash,人数person,在就要思考重要的一点就是红包的最大值和最小值,不会有点红包领到0吧,一般0.01为最小值,为什么会来说还有最大值,你想假如一个10块的红包6个人抢第一个能抢了9.99,那么第二个人只有剩下0.01,后面的人没得强,这不就有问题了。所以最大值应该就是红包总金额减去最小值乘以人数(10-0.01x6)这样才保证大家都有得抢当然最贪婪的写法是10-0.01x5有人会问为什么是5,已经把第一个人排除剩下五个最惨的结局都是0.01。基本你掌握这个思路就好写代码了看看如下:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
 
import random
 
dic={}
lis = ['KeLan','Monkey','Dexter','Superman','Iron Man','Robin']
 
def redpacket(cash,person,index):
  if cash>0 and person !=1:
    n = round(random.uniform(0.01,cash-(0.01*person)),2)
    dic[lis[index]] = n
    print str(n).ljust(4,"0")
    person-=1
    cash-=n
    index+=1
    redpacket(cash,person,index)
  else:
    dic[lis[index]]=round(cash,2)
    print str(cash).ljust(4,"0")
 
redpacket(10,len(lis),0)
print dic
print "手气最佳:",max(dic.items(),key=lambda x:x[1])

我在这里用的是递减的方式来递归剩余的钱数与人数,加了个判断防止无限递归。只要钱cash大于0并且person剩余人数不是1那么继续往下走:n是随机浮点数,范围是从最小的0.01到当前的金额,round是取小数点后保留2位,这字典用来存放相应的人抢了多少红包金额,然后人数自减少1,金额自减当前抢走的金额index是从人名中顺序取值(当然实际不会按找顺序抢,这里只是掩饰介绍过程),然后递归调用自己把剩余的钱cash,剩余人数person,新位置的人重新传参,如果剩下最后一个人(测试了50次,没有发现金额小于0的情况所以这里只表述人)那么剩下的钱就都是他的并且添加到字典,打印输出,由于else内没调用自身递归自然结束最后打印字典的包含了人与抢红包金额对应,最后要答应手气最佳的人用max从列表中取最大值dic.items()返回以元组形式一一对应的列表[(person人,cash钱)],lambda写的是取每个元素的的1位置来做比较也是就是cash值来做比较,max拿出列表中最大的元组。

以上就是本次介绍的全部知识点内容,感谢大家对三水点靠木的支持。

Python 相关文章推荐
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python if not in 多条件判断代码
Sep 21 Python
Python基于递归实现电话号码映射功能示例
Apr 13 Python
基于Python log 的正确打开方式
Apr 28 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
python安装numpy和pandas的方法步骤
May 27 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
django 信号调度机制详解
Jul 19 Python
python模块导入的方法
Oct 24 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
记一次Django响应超慢的解决过程
Sep 17 Python
Opencv中cv2.floodFill算法的使用
Jun 18 Python
Django发送邮件功能实例详解
Sep 02 #Python
python读取Excel表格文件的方法
Sep 02 #Python
python将字典列表导出为Excel文件的方法
Sep 02 #Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 #Python
Python流程控制 while循环实现解析
Sep 02 #Python
Python中list循环遍历删除数据的正确方法
Sep 02 #Python
python中matplotlib条件背景颜色的实现
Sep 02 #Python
You might like
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
javascript Array.remove() 数组删除
2009/08/06 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
angular4自定义组件详解
2017/09/28 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
小学数学课题方案
2014/06/15 职场文书
工程索赔意向书
2014/08/30 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
先进个人申报材料
2014/12/30 职场文书
节水宣传标语口号
2015/12/26 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android