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

标签:python,随机红包
0
投稿

猜你喜欢

  • 索引在Oracle中的应用深入分析

    2023-07-04 19:50:49
  • Python 制作查询商品历史价格的小工具

    2021-10-13 06:03:16
  • asp会员系统如何实现“忘记密码”

    2007-09-19 12:17:00
  • Python程序打包工具py2exe和PyInstaller详解

    2021-04-17 05:04:12
  • 制定设计的原则

    2011-01-10 20:43:00
  • 浅谈如何使用Python控制手机(二)

    2022-05-01 20:16:28
  • IE8将是IE的最后一个版本?

    2009-03-12 12:44:00
  • 详解Python中的Lock和Rlock

    2023-08-11 18:35:20
  • oracle数据库添加或删除一列的sql语句

    2012-06-06 19:46:54
  • Python创建简单的神经网络实例讲解

    2021-12-02 05:38:41
  • ASP+SQL Server构建网页防火墙

    2009-01-21 19:56:00
  • Asp下Access无法更新的解决方法

    2012-12-04 20:19:35
  • W3C优质网页小贴士(四)

    2008-04-17 13:34:00
  • 在网页中实现细线边框的两种方法

    2011-06-14 09:47:26
  • python神经网络Pytorch中Tensorboard函数使用

    2021-03-30 04:27:01
  • 自己用的ASP分页函数

    2009-10-18 11:30:00
  • python根据txt文本批量创建文件夹

    2021-12-18 21:24:52
  • php实现HTML实体编号与非ASCII字符串相互转换类实例

    2023-11-15 06:12:14
  • Python函数中的可变长参数详解

    2022-08-01 06:04:57
  • MYSQL初学者扫盲

    2009-02-27 13:15:00
  • asp之家 网络编程 m.aspxhome.com