卑微小测试的一天-----年会抽奖系统1.0

年底了,又到了一年一度咸鱼转卖年会奖品的好时节,对于年会没有中大奖的我来说,心里自然是愤愤不平。说起来工作这么长时间,就没有中过大奖,基本就是阳关普照。所以突发奇想,自己动手来写一个小小的抽奖系统吧

技术选型

因为是个小项目,而且娱乐为主,开发速度当然是最重要的,再加上自己有段时间没有用python了,所以我们就用python来完成吧。

  • Python3.7
  • fastapi

因为目前没有其他数据的需求,我们就用excel来存储抽奖名单吧,后期再改用其他的方式吧!

模拟数据

python 有个faker包,专门用来模拟测试数据的,使用起来也非常简单,这里我们用它来生成中文名字用来做抽奖员工

if __name__ == "__main__":
    from faker import Faker

    f = Faker(locale='zh_CN')
    name_list = []
    for i in range(100):
        name_list.append(f.name())
    for i in range(100):
        excel_write(name_list)

生成员工如下
抽奖员工

随机选取员工

要不说python 快呢,随机抽取员工也是一个random包就能搞定

import random
# 随机选取员工
def random_employees(lists, nums):
    employees_list = random.sample(lists, nums)
    return employees_list

其中lists 就是从excel中读取的员工列表数据,而nums 就是抽取的员工数

已中奖的不能再参加抽奖

年会抽奖的规则一般都是如果你已经中了一次,后面的奖项自然与你无缘。所以我以往参加年会的时候不到最后一刻,我都以为自己是大奖,最后获得个阳光普照。。。。
这里的逻辑我们先需要通过openpyxl来获取和删除数据

from openpyxl import load_workbook, Workbook

file = "/Users/le/Documents/pyproject/lottery/utils/抽奖员工.xlsx"
class ExcelUtils:
    def __init__(self):
        self.file = file
        self.wb = load_workbook(self.file)
        self.ws = self.wb['Sheet']

    def excel_read(self):
        lists = []
        print(self.ws.max_row)
        # 遍历excel中数据
        for i in range(1, self.ws.max_row + 1):
            name = self.ws.cell(i, 1).value
            lists.append(name)
        return lists

    # 通过值获取行数
    # 通过值获取行数
    def get_cell_row(self, cell_value):
        lists = []
        for i in range(1, self.ws.max_row + 1):
            name = self.ws.cell(i, 1).value
            for value in cell_value:
                if name == value:
                    lists.append(i)
        return lists

    # 删除一行
    def delete_row(self, which_rows):
        for i in which_rows:
            self.ws.delete_rows(int(i))
            self.wb.save(self.file)

然后我们再取消已中间员工的抽奖名单

# 已获奖的员工不能再抽奖
def del_employees(list_employees):
    utils = ExcelUtils()
    list_had_lottery = utils.get_cell_row(list_employees)
    try:
        utils.delete_row(list_had_lottery)
    except Exception as e:
        print("删除数据失败 :{}".format(e))

启动项目

打开官方文档,查看示例
官网示例

@app.get("/lottery/{id}/{nums}")
async def lottery(nums):
    lists = ExcelUtils().excel_read()
    employees_list = employess.random_employees(lists, int(nums))
    # 删除已中奖的员工
    employess.del_employees(employees_list)
    return employees_list

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)

我们将id 的意思为几等奖,nums 为抽取的人数
启动项目后我们来抽奖

3等奖抽10个
三等奖
这时我们的excel 中会删除10个员工,剩下90个
剩余员工
然后我们直接抽2等奖5个
2等奖
剩余85人参与1等奖的瓜分
在这里插入图片描述

项目总结

如果真的只拿这个东西去抽奖那可是太简陋了,年会抽奖玩的是气氛,前端要有动效,有音效才刺激。如果真要我写年会抽奖项目,我肯定要往代码里面"下毒",我必须要拿个大奖啊!我的好伙伴 二狗子们,必须榜上有名啊!
先将项目上传,后面慢慢整活。。。
https://github.com/627886474/lottery

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值