python生成随机红包的实例写法
作者:cawen 发布时间:2021-02-20 12:30:33
假设红包金额为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拿出列表中最大的元组。
来源:https://www.cnblogs.com/lcawen/p/11445904.html
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 用SHOW显示已有的数据库句法:SHOW DATABASES [LIKE wild]如果使用LIKE wild部分,wild字符串可以是一个
- 写这个的目地,主要是系统理下目前产品设计的流程,提醒自己尽量去避免一些常见的问题,也能让大家系统的了解天极网的产品设计流程。当然,不保证任何
- 一、前言一首歌热门了,参与评论的人也很多,那我们有时候想看看评论,也只能看看热门的评论,大部分人都说的什么,咱也不知道呀~那本次咱们就把歌词
- 本文实例讲述了Python中函数参数调用方式。分享给大家供大家参考,具体如下:Python中函数的参数是很灵活的,下面分四种情况进行说明。(
- 最近在用GAE开发自己的博客程序。虽然GAE的API没有显式的提供操作Cookie的方法,但他现有的架构,使我们有足够的自由来操作Cooki
- 尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替
- 运用Jmeter正则提取器,可以从请求的响应结果中取到需要的内容,从而实现关联。关联是请求与请求之间存在数据依赖关系,需要从上一个请求获取下
- golang监听消息队列rabbitmq任务脚本,当rabbimq消息队列断开连接后自动重试,重新唤起协程执行任务需求背景:goalng常驻
- pytorch 库pytorch 本身具有载入cifar10等数据集的函数,但是载入的是3*200*200的张量,当碰到要使用灰度图像时,可
- 如下所示:#!/usr/bin/python2.6 # -*- coding: utf-8 -*- import time cl
- 在Python中,生成器和函数很像,都是在运行的过程中才会去确定各种变量的值,所以在很多情况下,会导致各种各样的问题。def generat
- 1.添加新用户只允许本地IP访问create user 'test'@'localhost' identif
- 列表的逆序遍历a = [1,3,6,8,9]print("通过下标逆序遍历1:")for i in a[::-1]: &
- 1.简介堆,又称优先队列,是一个完全二叉树,它的每个父节点的值都只会小于或等于所有孩子节点(的值)。 它使用了数组来实现:从零开始计数,对于
- 实体有五种预定义的XML实体,HTML编码者应该熟悉。XML文档中的字符&、<、>、"和'被分别表示为
- 基于python的Appium进行b站直播消费记录爬取之前看文章说fiddler也可以进行爬取,但尝试了一下没成功,这次选择appium进行
- 问题,在一个程序内构建好了一个图,运行完之后想重新使用这个图进行计算,或者想同时在train完的时候做test,就会提示***变量已存在。解
- 导言:在前面的教程里我们探讨了如何为GridView控件添加radio buttons列。当用户最多只能选择一项数据时,我们可以在用户界面里
- 集合内建函数和内建方法(1)标准类型函数 len():把集合作为参数
- 如下所示:import cv2import osimport numpy as nproot_path = "I:/Images/