模拟微信发红包的两种发放方式。能够输入领取红包人数(或通过读取文件确定人数)、发放金额,实现两种发放方式,能够显示红包发放情况,打印红包运气王的名单python代码
时间: 2024-03-08 12:50:25 浏览: 52
好的,以下是实现两种发放方式并显示红包发放情况以及打印红包运气王名单的Python代码:
```python
import random
# 发放红包方式一:随机分配
def send_red_packets_random(total_amount, num):
result = []
# 将总金额转化为以分为单位的整数,避免精度误差
total_amount = int(total_amount * 100)
# 平均每人可以获得的金额
avg = total_amount // num
# 每个人先分配到平均金额
for i in range(num):
result.append(avg)
# 将剩余金额随机分配给每个人
remaining_amount = total_amount - avg * num
for i in range(remaining_amount):
index = random.randint(0, num - 1)
result[index] += 1
# 将结果转化为以元为单位的浮点数
result = [x / 100 for x in result]
return result
# 发放红包方式二:手气最佳
def send_red_packets_lucky(total_amount, num):
result = []
# 将总金额转化为以分为单位的整数,避免精度误差
total_amount = int(total_amount * 100)
# 将红包分成num份,每份的金额范围是[1, total_amount - (num-1)]
packet_list = [random.randint(1, total_amount - (num-i-1)) for i in range(num)]
packet_list.sort()
# 计算每个人获得的金额
for i in range(num-1):
result.append((packet_list[i+1]-packet_list[i]) / 100)
result.append((total_amount - packet_list[num-1]) / 100)
return result
# 显示红包发放情况
def show_red_packets(result):
print("红包发放情况:")
for i in range(len(result)):
print("第%d个人获得了%.2f元" % (i+1, result[i]))
# 打印红包运气王名单
def print_lucky_winner(result):
max_amount = max(result)
lucky_winners = []
for i in range(len(result)):
if result[i] == max_amount:
lucky_winners.append(i+1)
print("运气王名单:")
for i in range(len(lucky_winners)):
print("第%d个人" % lucky_winners[i])
# 主程序
if __name__ == "__main__":
total_amount = float(input("请输入红包的总金额:"))
num = int(input("请输入红包的领取人数:"))
print("请选择红包发放方式:")
print("1. 随机分配")
print("2. 手气最佳")
choice = int(input())
if choice == 1:
result = send_red_packets_random(total_amount, num)
else:
result = send_red_packets_lucky(total_amount, num)
show_red_packets(result)
print_lucky_winner(result)
```
这段代码实现了两种发放红包的方式:随机分配和手气最佳。用户可以输入红包的总金额和领取人数,以及选择发放方式。程序会先根据用户的输入计算出每个人获得的金额,然后显示红包发放情况,并打印红包运气王名单。其中,红包发放情况会显示每个人获得的金额;红包运气王名单会显示获得最大金额的人的编号。注意,程序中将金额以分为单位进行计算,避免了精度误差。