假设红包金额为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.01×6)这样才保证大家都有得抢当然最贪婪的写法是10-0.01×5有人会问为什么是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生成随机红包的实例写法相关推荐

  1. python生成随机的测验试卷_python生成随机的测验试卷文件

    假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验.不妙的是,班里有几个坏蛋,你无法确信学生不会作弊.你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能 ...

  2. python输出姓名_Python生成随机不重复姓名昵称

    姓采用百家姓,名字从常用名字高频字选取两个汉字,再和当前时间戳组合,估计应该是不会重复了,代码如下: # -*- coding:utf-8 -*- import random import time ...

  3. python生成随机整数列表_python生成随机整数

    原博文 2019-10-08 11:09 − python生成随机不重复的整数,用random中的sample index = random.sample(range(0,10),10) 上面是生成不 ...

  4. python随机生成验证码_Python生成随机验证码

    #生成随机验证码 from PIL importImagefrom io importBytesIOfrom PIL importImageDraw,ImageFontdefcheck_code(re ...

  5. 大乐透python预测程序_Python生成随机验证码,大乐透号码

    随机生成验证码 示例代码: import random # 导入标准模块中的random if __name__ == '__main__': check_code = "" # ...

  6. python随机生成一个地区地址_Python生成随机MAC地址

    利用python代码生成一个随机的MAC地址,使用python网络编程时或可用上,如果使用scapy模块则可直接利用RandMAC()函数来生成MAC. python 复制代码 代码如下: impor ...

  7. 基于python的随机森林回归实现_python实现随机森林

    定义: 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器.可回归可分类. 所以随机森林是基于多颗决策树的一种集成学习算法,常见的决策树算法主要有以下几种: 1. ID3:使用信息增益g(D ...

  8. mysql随机生成数据并插入_python生成随机数据插入mysql

    import random as r import pymysql first=('张','王','李','赵','金','艾','单','龚','钱','周','吴','郑','孔','曺','严' ...

  9. python随机森林变量重要性_Python中随机森林的实现与解释

    使用像Scikit-Learn这样的库,现在很容易在Python中实现数百种机器学习算法.这很容易,我们通常不需要任何关于模型如何工作的潜在知识来使用它.虽然不需要了解所有细节,但了解机器学习模型是如 ...

最新文章

  1. 专访小书作者刘传君:练太极的“读书机器”
  2. python编程入门指南磁力下载-使用python 将bt转磁力链接
  3. slidingmenu能否实现菜单页在内容页上方,而不是把内容页挤到一边去????...
  4. 数据结构-排序-分配类排序-知识点总结归纳3
  5. 聊聊并发——生产者消费者模式
  6. lighthouse使用_如何在CircleCI中使用Lighthouse
  7. 【稀疏向量技术是什么?】差分隐私系统学习记录(六)
  8. POJ 3481 treap
  9. anaconda windows theano keras 完全安装教程,没有gpu忽略那段话也成功了
  10. mysql slave_mysql master slave
  11. Eclipse 中 去掉控制台最大行数限制
  12. 【路径规划】基于matlab果蝇优化算法机器人路径规划【含Matlab源码 677期】
  13. Linux chmod权限详解
  14. Minitab散点图技巧
  15. 打印机驱动 - HP LaserJet P1008(适用于大部分惠普打印机)
  16. MCMC算法原理及其实例
  17. 【SSM分布式架构电商项目-14】后台CMS内容管理系统管理前台首页广告
  18. win10易升_win10上跑Ubuntu不用虚拟机不用双系统!
  19. pop3邮箱服务器地址,常用邮箱服务器(smtp,pop3)地址,端口(示例代码)
  20. 百度女程序员半夜打车被司机嘲讽:加班到一点,收入不如我,图啥

热门文章

  1. 怎样计算机科学导论答案,计算机科学导论相关论文题目 计算机科学导论专业论文题目怎样拟...
  2. February 2007
  3. linux手动连接网络打印机驱动_Linux下安装HP打印机的驱动程序
  4. canvas_html_制作三行情书的弹幕
  5. 2020 HGAME WEB_Week2
  6. 天猫团队开源跨平台模块化 UI 界面开发框架 Tangram
  7. 【推免攻略】三.2020年北交计算机学院夏令营、预推免保研经验
  8. 在制定调薪计划和沟通调薪结果时我们到该什
  9. 一文读懂 Uniswap 做市商协议 Multiple Protocol
  10. PTA20+逻辑思维