从xlsx文件(自己用excel创建,可以大家共享)中读出班级学生名字数组,并且模拟微信发红包的两种发放方式。能够输入领取红包人数(或通过读取文件确定人数)、发放金额,实现两种发放方式,能够显示红包发放情况,打印红包运气王的名单。
时间: 2024-03-22 20:37:00 浏览: 47
微信红包发放
为了完成这个任务,我们可以使用 Python 的 `openpyxl` 模块来读取 Excel 文件,然后实现两种发放方式。
首先,我们需要安装 `openpyxl` 模块。您可以在命令行中运行以下命令来安装:
```
pip install openpyxl
```
然后,我们可以使用以下代码从 Excel 文件中读取班级学生名字数组:
```python
import openpyxl
# 打开 Excel 文件
workbook = openpyxl.load_workbook('students.xlsx')
# 获取当前活动的工作表
worksheet = workbook.active
# 读取班级学生名字数组
students = []
for row in worksheet.iter_rows(values_only=True):
students.append(row[0])
```
在这个例子中,我们首先使用 `openpyxl.load_workbook()` 函数打开一个名为 "students.xlsx" 的 Excel 文件,并将其保存在变量 `workbook` 中。然后,我们使用 `workbook.active` 属性获取当前活动的工作表,并将其保存在变量 `worksheet` 中。
最后,我们使用 `worksheet.iter_rows()` 函数迭代每一行,并使用 `values_only=True` 参数获取每一行的值。我们只需要获取每一行的第一个单元格(即学生名字),并将其添加到 `students` 数组中。
接下来,我们可以实现两种发放红包的方式:
#### 方式一:随机分配
首先,我们定义一个 `red_packet_one()` 函数,该函数接受两个参数:领取红包人数和发放金额。
```python
import random
def red_packet_one(num_people, amount):
# 计算每个人的平均红包金额
avg_amount = amount / num_people
# 初始化红包数组
red_packets = [0] * num_people
# 随机分配红包
for i in range(num_people):
if i == num_people - 1:
red_packets[i] = amount
else:
red_packets[i] = random.uniform(0, avg_amount * 2)
# 打印红包发放情况
print("方式一:随机分配")
for i in range(num_people):
print(f"{students[i]}:{red_packets[i]} 元")
# 打印红包运气王
luckiest = students[red_packets.index(max(red_packets))]
print(f"红包运气王:{luckiest}")
```
在这个函数中,我们首先计算每个人的平均红包金额,并初始化一个长度为 `num_people` 的红包数组。然后,我们使用 `random.uniform()` 函数随机分配红包。我们将最后一个人的红包金额设置为剩余的金额,以确保所有红包的总金额等于发放的金额。
接下来,我们打印红包发放情况和红包运气王。红包运气王是收到最多金额的人。我们可以使用 `list.index()` 函数找到红包数组中的最大值,并使用此值查找对应的学生名字。
#### 方式二:平均分配
接下来,我们定义一个 `red_packet_two()` 函数,该函数也接受两个参数:领取红包人数和发放金额。
```python
def red_packet_two(num_people, amount):
# 计算每个人的平均红包金额
avg_amount = amount / num_people
# 平均分配红包
red_packets = [avg_amount] * num_people
# 打印红包发放情况
print("方式二:平均分配")
for i in range(num_people):
print(f"{students[i]}:{red_packets[i]} 元")
# 打印红包运气王
print(f"红包运气王:无")
```
在这个函数中,我们首先计算每个人的平均红包金额,并初始化一个长度为 `num_people` 的红包数组。然后,我们将红包金额平均分配给每个人。由于每个人都收到相同的金额,所以没有红包运气王。
最后,我们可以调用这两个函数来发放红包,并传递领取红包人数和发放金额作为参数。例如,以下代码将向 5 个人发放总金额为 100 元的红包:
```python
red_packet_one(5, 100)
red_packet_two(5, 100)
```
这将输出红包发放情况和红包运气王。
阅读全文