Python 实现发红包

news/2024/12/5 11:46:43/

问题描述

  • 使用 python 实现类似微信发红包的功能,尽量保持每个人收获的红包平均,要求输入总金额 money(元-float)及红包个数 num(个-int),且每人最小获得的红包额度不能小于0.01元(不考虑 money/num < 0.01此种输入情况,如money=0.1,int=100,平均每个人0.001元,输入非法)
  • 返回一个列表,长度为num,包含了每个红包的额度,顺序随机,且列表中数字总和为money

思路分析

  • 难点在于如何确定红包的随机性和每个红包的总和恰好等于总金额
  • 如果我们在输入的money长度的坐标轴上随机取 num-1个点,那么这些点之间的间距肯定是随机的,当左侧添加上0点,右侧添加上money点,那么每一段线段的长度和恰好等于money的长度。
    如下图所示:
    在这里插入图片描述
    这样的思路可以保证数据的随机性,和总金额的准确
  • Tips:随机取0-money范围的数值直接作为红包的面额,易于造成分配严重不均,导致剩余的其它红包不够分的问题。如果使用二分法,只取剩余总额度的一半的取值,又不能满足随机性,因为这样的方法先抢的人得到较大额度的概率更大。

代码实现

import randomdef redbags(money, num):# 使用random.sample()可以得到1分-money*100分以内的 num-1个随机值valueList = random.sample(range(1, int(money * 100)), num - 1)# 加入 0 和 money*100 两个值,此时valueList的长度使 num+1valueList.extend([0, money * 100])# 排序valueList.sort()res = []for i in range(num):  # 因为只需要num个数值,所以循环num次cost = valueList[i + 1] - valueList[i]  # 两个随机数之间的长度res.append(cost)res2 = [str(i / 100.0) for i in res]  # 除以100.0 是为了精度精确到分return res2if __name__ == '__main__':total = float(input("请输入红包总金额(回车继续):"))num = input("请输入红包个数(回车结束):")if num.isdigit():print("红包配额为:%s" % (",".join(redbags(total, int(num)))))else:print("Error:输入红包个数必需为整数")

输入: money=100, num=10
输出:
在这里插入图片描述

如有错误,欢迎指正!
参考自:
https://www.jb51.net/article/169096.htm


http://www.ppmy.cn/news/465438.html

相关文章

利用Python制作一个发红包的小游戏

本系统的内容是综合应用python程序设计的知识&#xff0c;实际并实现了一款简单发红包的小游戏&#xff0c;具体功能如下&#xff1a; &#xff08;1&#xff09;拼手气红包&#xff1a;随机金额 &#xff08;2&#xff09;普通红包&#xff1a;能够通过输入的红包人数与红包…

微信公众号怎么发红包?

#微信公众号怎么发红包# 利用微信公众号给粉丝派发红包是日常运营中不可或缺的一种营销方式&#xff0c;活动中植入了微信红包元素&#xff0c;可以大大吸引用户的关注&#xff0c;不管是给公众号引流还是提升粉丝活跃度都是非常有效的&#xff0c;但是还有不少公众号运营者不…

python模拟简单发红包

import random def redEnv(k,rest):mround(round(random.random()/100.01,2)*rest,2)return m totalfloat(input(请输入红包金额&#xff1a;)) numint(input(请输入红包个数:)) remaintotal for i in range(num-1):moneyredEnv(i,remain)remain-moneyprint(红包{0:d}:{1:.2f}.…

python 发红包import random用redenv_python 发红包

红包1 import random def redpacket(cash,person): lst[] sum10 cash cash * 100 while cash>0 and person >1: money random.randint(1,cash) person-1 cash-money lst.append(money/100) sum1 money/100 else: lst.append(cash/100) sum1 cash/100 random.… import…

Python发红包

文章目录 1. 题目&#x1f50d;1.1 输入样例1.2 输出样例 2. 题解✨2.1 代码 1. 题目&#x1f50d; 使用random()模拟10次发红包的情况。 1.1 输入样例 请输入红包总金额&#xff1a;100 请输入红包总数量&#xff1a;8​ 1.2 输出样例 [11, 34, 16, 14, 2, 16, 2, 5] [65…

ipad上能免费下载Python并运行吗?

前言 一般也是可以&#xff0c;直接 在 Ipad App store 里搜索 python 即可&#xff0c;如下: 不过小编并不觉得 ipad 适合 写 python&#xff0c;建议最好还是在电脑上如 mac 进行编程。 读者福利&#xff1a;知道你对Python感兴趣&#xff0c;便准备了这套python学习资料 …

模仿微信发红包代码

package test; import java.util.ArrayList; import java.util.List; /** * Description: <br> * * author <a hrefmailto:lianle1jd.com>连乐</a> * date 2016/3/1 12:10 */ public class Test { public static void main(String[] args) { int size 10;…

python发红包实现

import randomdef lucky_money(n, amount):""":param n: 红包个数:param amount: 红包金额&#xff08;以元为单位&#xff09;:return: 生成器&#xff0c;n个红包的金额&#xff0c;以分为单位 """lst list(random.sample(range(1, amount*…