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实现人人网登录示例分享
Jan 19 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
python实现在控制台输入密码不显示的方法
Jul 02 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
python中退出多层循环的方法
Nov 27 Python
python requests post多层字典的方法
Dec 27 Python
pytorch使用Variable实现线性回归
May 21 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 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
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
做网页的一些技巧(续)
2007/02/01 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
python实现简单点对点(p2p)聊天
2017/09/13 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
Skyscanner波兰:廉价航班
2017/11/07 全球购物
软件测试英文面试题
2012/10/14 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
学期评语大全
2014/04/30 职场文书
教师三严三实心得体会
2014/10/11 职场文书
整改落实自查报告
2014/11/05 职场文书
安全教育日主题班会
2015/08/13 职场文书
2019个人工作总结
2019/06/21 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers