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 21 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
Python Socket传输文件示例
Jan 16 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
分析python切片原理和方法
Dec 19 Python
Python 查看文件的读写权限方法
Jan 23 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python 为什么说eval要慎用
Mar 26 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
python 公共方法汇总解析
Sep 16 Python
python3 kubernetes api的使用示例
Jan 12 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牛逼的面试题分享
2013/01/18 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php猜单词游戏
2015/09/29 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
初识Javascript小结
2015/07/16 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
Python验证码识别处理实例
2015/12/28 Python
Python语言描述随机梯度下降法
2018/01/04 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
教师评优的个人自我评价分享
2013/09/19 职场文书
怎样写留学自荐信
2013/11/11 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
八年级作文之友谊
2019/12/02 职场文书
详细总结Python常见的安全问题
2021/05/21 Python