python中用5个模块写一个简易发红包抢红包
时间: 2024-02-15 11:01:37 浏览: 116
好的,下面是一个简易的发红包抢红包的Python程序,使用了`random`、`time`、`math`、`decimal`和`collections`这五个模块。
```python
import random
import time
import math
import decimal
import collections
def send_red_packet(total_amount, num):
"""
发红包函数,total_amount为总金额,num为红包个数
"""
if total_amount < num * 0.01:
raise ValueError('红包金额太少,无法分给这么多人')
amount_list = []
remain_amount = total_amount
remain_num = num
for i in range(num - 1):
min_amount = decimal.Decimal('0.01')
max_amount = decimal.Decimal(remain_amount - remain_num * min_amount)
amount = random.uniform(min_amount, max_amount)
amount = round(amount, 2)
amount_list.append(amount)
remain_amount -= amount
remain_num -= 1
amount_list.append(round(remain_amount, 2))
random.shuffle(amount_list)
return amount_list
def grab_red_packet(red_packet_list):
"""
抢红包函数,red_packet_list为红包金额列表
"""
if not red_packet_list:
raise ValueError('红包已被抢完')
red_packet = red_packet_list.pop(0)
return red_packet
if __name__ == '__main__':
total_amount = decimal.Decimal('10')
num = 5
red_packet_list = send_red_packet(total_amount, num)
print('发出的红包金额为:', red_packet_list)
red_packet_dict = collections.defaultdict(decimal.Decimal)
for i in range(num):
red_packet = grab_red_packet(red_packet_list)
print('第{}个人抢到了{}元的红包'.format(i + 1, red_packet))
red_packet_dict[i + 1] += red_packet
print('抢红包的结果为:', red_packet_dict)
```
以上代码中,`send_red_packet`函数用于发红包,它接受两个参数:`total_amount`为总金额,`num`为红包个数。函数内部使用了随机数生成算法来随机生成每个红包的金额,保证每个红包的金额都在0.01元到剩余金额平均值的两倍之间。最后将生成的红包金额列表随机打乱后返回。
`grab_red_packet`函数用于抢红包,它接受一个参数:`red_packet_list`为红包金额列表。函数内部弹出红包金额列表中的第一个元素作为抢到的红包金额,并返回。
在主程序中,我们先使用`send_red_packet`函数生成红包金额列表,然后使用`grab_red_packet`函数模拟多个人抢红包的过程,最后将每个人抢到的红包金额统计起来输出。
阅读全文