random模块模拟发红包算法
需求:输入红包个数和红包的总金额,为抢红包的人随机分配金额,每抢完一个红包之后,至少要给剩下的人每人留一分钱。
import random
def hongbao(total_amount, num):#total_amount: 红包总金额 quantities: 红包个数
print("红包总金额:%7.2f, 分给%d人"%(total_amount,num))
amount_list = [] # 用以存储每个人领取的红包金额
person_num = num # 抢红包人数
# 涉及红包金额可带 2 位小数部分
# 使用先乘 100 计算,再除 100 处理小数点部分
total_100 = total_amount * 100
# 这里采用的是二倍均值法
# 除最后一人,先对前面领取红包金额进行处理
# 最后剩下的金额,即是最后一人的金额
for i in range(num - 1):
amount = random.randint(1, total_100 // person_num * 2)
# 每次减去当前随机金额,用剩余金额进行下次随机获取
total_100 -= amount
person_num -= 1
amount_list.append(amount / 100)
amount_list.append(total_100 / 100)
return amount_list
def main():
total = float(input("请输入红包总金额:"))
num = int(input("请输入红包个数:"))
amount_list = hongbao(total, num)
print('红包金额分别是:{}'.format(amount_list))
if __name__ == "__main__":
main()