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实现目录树生成示例
Mar 28 Python
Python中os.path用法分析
Jan 15 Python
使用Python的PEAK来适配协议的教程
Apr 14 Python
Python和C/C++交互的几种方法总结
May 11 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
Python装饰器用法实例总结
May 26 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
python如何实现视频转代码视频
Jun 17 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
python实现在一个画布上画多个子图
Jan 19 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
python程序的组织结构详解
Dec 06 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新手上路(九)
2006/10/09 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
jquery.cookie用法详细解析
2013/12/18 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
python statsmodel的使用
2020/12/21 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
租房协议书样本
2014/08/20 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
股东出资协议书
2016/03/21 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python