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 logging
Apr 15 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
python数据化运营的重要意义
Nov 25 Python
Python求平面内点到直线距离的实现
Jan 19 Python
Python 保存加载mat格式文件的示例代码
Aug 04 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
深入PHP magic quotes的详解
2013/06/17 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
php提高网站效率的技巧
2015/09/29 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
python http基本验证方法
2018/12/26 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
如何对python的字典进行排序
2020/06/19 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
理工学院学生自我鉴定
2014/02/23 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
听课评语大全
2014/04/30 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
话题作文之成长
2019/12/09 职场文书