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字符串处理之count()方法的使用
May 18 Python
Python实现的购物车功能示例
Feb 11 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
使用python3 实现插入数据到mysql
Mar 02 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
python中return如何写
Jun 18 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 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自动生成表单代码分享
2015/06/19 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
javascript history对象详解
2017/02/09 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
jquery向后台提交数组的代码分析
2020/02/20 jQuery
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
浅谈Python数据类型之间的转换
2016/06/08 Python
使用python实现ANN
2017/12/20 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
详解python如何引用包package
2020/06/07 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
销售辞职报告范文
2014/01/12 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers