python模拟微信发红包的两种发放方式。能够输入领取红包人数(或通过读取文件确定人数)、发放金额,实现两种发放方式,能够显示红包发放情况,打印红包运气王的名单;并且会抽取.xlsx表格中的人物
时间: 2024-03-21 10:42:49 浏览: 69
Python自动抢红包教程详解
好的,我可以为您解答这个问题。首先,为了模拟微信发红包的两种发放方式,我们需要了解两种发放方式的具体实现方式。
第一种方式是“平均分配法”,即将红包金额平均分配给每个领取人。这种方式的优点是简单、公平,但缺点是可能会导致某些人领取到的金额较少,无法满足个性化需求。
第二种方式是“随机分配法”,即将红包金额随机分配给每个领取人。这种方式的优点是个性化、趣味性强,但缺点是可能会导致某些人领取到的金额较多,不够公平。
下面是两种方式的具体实现代码:
平均分配法:
```python
import random
def send_hongbao_1(num, money):
avg_money = money / num # 平均每个人分配的金额
money_list = [avg_money for i in range(num)] # 初始化每个人的金额
return money_list
```
随机分配法:
```python
import random
def send_hongbao_2(num, money):
money_list = []
for i in range(num-1):
# 生成一个随机数,表示当前领取人的金额比例
rate = random.uniform(0, 1)
money_i = round(money * rate, 2) # 四舍五入保留两位小数
money_list.append(money_i)
money -= money_i
money_list.append(money) # 最后一个领取人获得剩余的金额
random.shuffle(money_list) # 打乱顺序,增加趣味性
return money_list
```
以上两个函数分别表示了两种发放方式,其中`num`表示领取红包人数,`money`表示发放金额。这两个函数返回一个列表,表示每个领取人获得的金额。
为了显示红包发放情况,并打印红包运气王的名单,我们可以在两个函数中加入一些输出语句:
```python
def send_hongbao_1(num, money):
avg_money = money / num
money_list = [avg_money for i in range(num)]
print("红包发放情况:")
for i in range(num):
print("第{}个人获得了{}元".format(i+1, money_list[i]))
max_money = max(money_list)
luckiest = [i+1 for i, j in enumerate(money_list) if j == max_money]
print("红包运气王是:", luckiest)
return money_list
def send_hongbao_2(num, money):
money_list = []
for i in range(num-1):
rate = random.uniform(0, 1)
money_i = round(money * rate, 2)
money_list.append(money_i)
money -= money_i
money_list.append(money)
random.shuffle(money_list)
print("红包发放情况:")
for i in range(num):
print("第{}个人获得了{}元".format(i+1, money_list[i]))
max_money = max(money_list)
luckiest = [i+1 for i, j in enumerate(money_list) if j == max_money]
print("红包运气王是:", luckiest)
return money_list
```
上述代码中,`max_money`表示领取金额最多的人获得的金额数,`luckiest`表示获得最多金额的人的编号列表。
最后,如果您想从`.xlsx`表格中抽取人物,可以使用`pandas`库中的`read_excel`函数读取表格,并使用`sample`函数随机抽取人物。示例代码如下:
```python
import pandas as pd
df = pd.read_excel('人物表.xlsx')
people_list = df['姓名'].tolist() # 获取所有人物的姓名列表
selected_list = random.sample(people_list, num) # 随机抽取num个人物
```
以上代码中,`num`表示需要抽取的人数。`people_list`表示所有人物的姓名列表,`selected_list`表示随机抽取的人物姓名列表。
阅读全文