说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)用 Python 的类编写一个年会抽奖程序,要求:
Python 代码如下
import pandas as pd
# 安装:pip install faker
from faker import Faker
class PartyLottery:
def __init__(self, pool: pd.DataFrame):
self.pool = pd.DataFrame(pool)
self.winner = pd.DataFrame()
def draw_lottery(self, level: str, cnt: int):
if level not in ['一等奖', '二等奖', '三等奖']:
raise ValueError('Invalid prize level.'
'Supported levels: '
'一等奖, 二等奖, 三等奖')
# 随机抽取指定数量获奖者
winner = self.pool.sample(cnt)
# 添加到获取名单
self.winner = pd.concat([self.winner,
winner.assign(等级=level)]
)
# 从抽奖池中移除获奖者
self.pool = self.pool.drop(winner.index)
# 打印获奖信息
print(f'****** {level} 获奖者 ******')
print(winner)
print("\n剩余参与者:")
print(self.pool, end='\n\n')
def show_winner(self):
# 展示所有获奖者
print(f'所有的获奖者:')
print(self.winner, end='\n\n')
来实例化调用:
# 示例参与者数据
f = Faker('zh-cn')
Faker.seed(4321)
department = ['财务部', '人事部', '销售部', '技术部', '市场部']
count = 10 # 模拟员工数量
data = {'姓名': [f.name() for i in range(count)],
'部门': [f.random.choice(department) for i in range(count)],
'工号': range(1001, 1001 + count)
}
df = pd.DataFrame(data)
# 创建抽奖程序实例
party_2024 = PartyLottery(df)
# 抽奖
party_2024.draw_lottery('一等奖', 1)
party_2024.draw_lottery('二等奖', 2)
party_2024.draw_lottery('三等奖', 3)
# 显示获取者
party_2024.show_winner()
输出(由于是随机米数据,每次执行结果不同):
'''
****** 一等奖 获奖者 ******
姓名 部门 工号
3 陈敏 销售部 1004
剩余参与者:
姓名 部门 工号
0 王鑫 人事部 1001
1 彭林 销售部 1002
2 万鹏 人事部 1003
4 潘淑兰 技术部 1005
5 俞欣 技术部 1006
6 李建军 财务部 1007
7 刘燕 财务部 1008
8 郑淑兰 销售部 1009
9 毛淑华 销售部 1010
****** 二等奖 获奖者 ******
姓名 部门 工号
6 李建军 财务部 1007
9 毛淑华 销售部 1010
剩余参与者:
姓名 部门 工号
0 王鑫 人事部 1001
1 彭林 销售部 1002
2 万鹏 人事部 1003
4 潘淑兰 技术部 1005
5 俞欣 技术部 1006
7 刘燕 财务部 1008
8 郑淑兰 销售部 1009
****** 三等奖 获奖者 ******
姓名 部门 工号
1 彭林 销售部 1002
2 万鹏 人事部 1003
8 郑淑兰 销售部 1009
剩余参与者:
姓名 部门 工号
0 王鑫 人事部 1001
4 潘淑兰 技术部 1005
5 俞欣 技术部 1006
7 刘燕 财务部 1008
所有的获奖者:
姓名 部门 工号 等级
3 陈敏 销售部 1004 一等奖
6 李建军 财务部 1007 二等奖
9 毛淑华 销售部 1010 二等奖
1 彭林 销售部 1002 三等奖
2 万鹏 人事部 1003 三等奖
8 郑淑兰 销售部 1009 三等奖
'''
查看相关链接中的知识。
(完)
更新时间:2024-08-18 16:56:48 标签:python 习题 类 抽奖 pandas