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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
将python代码和注释分离的方法
Apr 21 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
python3 深浅copy对比详解
Aug 12 Python
如何基于python测量代码运行时间
Dec 25 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
python属于软件吗
Jun 18 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 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/03/18 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
用Python写冒泡排序代码
2016/04/12 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
学习python的前途 python挣钱
2019/02/27 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
python Shapely使用指南详解
2020/02/18 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
JVM是一个编译程序还是解释程序
2012/09/11 面试题
应届大学生的推荐信
2013/11/20 职场文书
小学运动会入场词
2015/07/18 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
写作之关于描写老人的好段摘抄
2019/11/14 职场文书
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
volatile保证可见性及重排序方法
2022/08/05 Java/Android