Python: random模块微信红包算法(二倍均值法)

例如:

        给10个人发送100元的红包

         第一个人得到的红包在[ 0.01,( 100/10 ) * 2 ],也就是[ 0.01,20 ]之间取随机值。

         假设前三个人领到的红包总金额为35元

         第四个人的红包金额为[ 0.01,( (100-35)/7)*2 ],也就是[ 0.01,18.57 ]之间的随机值。

测试用例:

         控制台输入两个整数,第一个整数为红包钱数,第二个为人数,输出每个人得到的红包金额。

参考代码:

import random
def hongbao(je, num):#je: 红包总金额
    lis = []         # 用以存储每个人领取的红包金额
    renshu = num     # 抢红包人数
    # 涉及红包金额可带 2 位小数部分
    # 使用先乘 100 计算,再除 100 处理小数点部分
    total_100 = je * 100
    # 这里采用的是二倍均值法
    # 除最后一人,先对前面领取红包金额进行处理
    # 最后剩下的金额,即是最后一人的金额
    for i in range(num - 1):
        amount = random.randint(1, total_100 // renshu * 2)
        # 每次减去当前随机金额,用剩余金额进行下次随机获取
        total_100 -= amount     #amount 为随机金额
        renshu -= 1
        lis.append(amount / 100)
    lis.append(total_100 / 100)
    return lis

total = float(input("请输入红包总金额:"))
num = int(input("请输入红包个数:"))
lis = hongbao(total, num)
print(lis)

random() 函数

         random() 方法返回随机生成的一个实数,它在[0,1)范围内。

注意:random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。

实例

以下展示了使用 random() 方法的实例:

实例

import random
 
# 生成第一个随机数
print "random() : ", random.random()
 
# 生成第二个随机数
print "random() : ", random.random()

以上实例运行后输出结果为:

random() :  0.281954791393
random() :  0.309090465205

random() 函数中常见的函数如下:

import random

print( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数  
print( random.random() )             # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数

a=[1,3,5,6,7]                # 将序列a中的元素顺序打乱
random.shuffle(a)
print(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的敲码工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值