python发红包问题_python 模拟发红包程序

程序源码:# -*- coding: utf-8 -*-

# @Author : guangling_lin

# @Email : guangling_lin@aliyun.com

# @File : fahongbao.py

import random

def hongbao(total, num):

total = float(total) # 红包数

num = int(num) # 红包总额

min = 0.01 # 最小红包

if (num < 1):

return

if num == 1:

print "第%d个人拿到红包数为:%.2f" % (num, total)

return

i = 1

while (i < num):

# 过程解释:

# num=4,total=10

# i=1,1<4,10-0.03=9.97,k=1,if假,max=9.97/1=9.97,money=随机数(1,997),假设650,取余得到6.50,total=10-6.5=3.5

# total=3.5 i=2,2<4,max=3.5-0.01*(4-2)=3.5-0.02=3.48,k=0,k=2,max=3.48/2=1.24 money=(1,124),假设20,取余得到0.2,total=3.5-0.2=3.3

# total=3.3 i=3,3<4,max=3.3-0.01(4-3)=3.29,k=0,k=1,max=3.3,money=(1,330),假设130,取余得1.3,total=3.3-1.3=2

# total=2,i=4不小于num=4,退出while循环,将剩余的2元钱拿到自己手里,程序结束

# 保证即使一个红包是最大的了, 后面剩下的红包, 每个红包也不会小于最小值

max = total - min * (num - i)

k = int((num - i) / 2)

# 保证最后两个人拿的红包不超出剩余红包

if num - i <= 2:

k = num - i

# 最大的红包限定的平均线上下

max = max / k

# 保证每个红包大于最小值,又不会大于最大值

money = random.randint(int(min * 100), int(max * 100))

# 保留两位小数

money = float(money) / 100

total = total - money

print "第%d个人拿到红包数为:%.2f, 余额为: %.2f" % (i, money, total)

i += 1

print "第%d个人拿到红包数为:%.2f, 余额为: %.2f" % (i, total, 0.0) # 最后一个人拿走剩下的红包

if __name__ == '__main__':

total = raw_input('输入红包总金额:')

num = raw_input('输入发红包数量:')

try:

# 模拟2次

for i in range(2):

each = hongbao(total, num)

print each

except:

print 'Error'

测试结果:输入红包总金额:88

输入发红包数量:8

第1个人拿到红包数为:1.78, 余额为: 86.22

第2个人拿到红包数为:18.98, 余额为: 67.24

第3个人拿到红包数为:0.51, 余额为: 66.73

第4个人拿到红包数为:1.31, 余额为: 65.42

第5个人拿到红包数为:34.13, 余额为: 31.29

第6个人拿到红包数为:12.56, 余额为: 18.73

第7个人拿到红包数为:10.01, 余额为: 8.72

第8个人拿到红包数为:8.72, 余额为: 0.00

None

第1个人拿到红包数为:24.33, 余额为: 63.67

第2个人拿到红包数为:16.01, 余额为: 47.66

第3个人拿到红包数为:11.43, 余额为: 36.23

第4个人拿到红包数为:8.19, 余额为: 28.04

第5个人拿到红包数为:5.85, 余额为: 22.19

第6个人拿到红包数为:7.05, 余额为: 15.14

第7个人拿到红包数为:10.09, 余额为: 5.05

第8个人拿到红包数为:5.05, 余额为: 0.00

None

每一个成功的背后都有无数个无人知晓的黑夜。

因为

夜晚,是超越对手的最佳时机。

===================== 码农1024 ========================#蔺光岭#

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值