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程序来判断文本的语种
Apr 07 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
Python for循环与range函数的使用详解
Mar 23 Python
Python 静态方法和类方法实例分析
Nov 21 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Python字符串格式化方式
Apr 07 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生成EAN_13标准条形码实例
2013/11/13 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
PHP二维数组去重实例分析
2016/11/18 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
基于python实现学生管理系统
2018/10/17 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
python文件路径操作方法总结
2020/12/21 Python
python 写一个水果忍者游戏
2021/01/13 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
学校学雷锋活动总结
2014/06/26 职场文书
董事长岗位职责
2015/02/13 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
总结Python变量的相关知识
2021/06/28 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python