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 字符串中的字符倒转
Sep 06 Python
Python中列表元素转为数字的方法分析
Jun 14 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
Python实现统计代码行的方法分析
Jul 12 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
Python并发之多进程的方法实例代码
Aug 15 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
Django与pyecharts结合的实例代码
May 13 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python编写五子棋游戏
May 25 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
jquery等待效果示例
2014/05/01 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
AngularJs 常用的过滤器
2017/05/15 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
通报表扬范文
2015/01/17 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
计划生育目标责任书
2015/05/09 职场文书
雷锋的故事观后感
2015/06/10 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL