前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【 Python 办公】抽奖小工具

【 Python 办公】抽奖小工具

原创
作者头像
花花Binki
发布2024-03-20 00:06:43
13600
代码可运行
发布2024-03-20 00:06:43
举报
文章被收录于专栏:Python高级编程Python高级编程
运行总次数:0
代码可运行

前言

本系列的理想是:让"非专业"人员通过少量python代码达到10X办公效率。

你现在是公司的HR,领导想让你在做一个抽奖系统在年会用,参与人员与奖品全在Excel里。见下图

人员与奖品Excel
人员与奖品Excel

回想起你刚学会用python,于是心血来潮,开始编码。

实现

思路梳理

脑海里回想起无数个抽奖画面,觉得都有点太过花哨,你所需要的只有一个抽奖按钮,一个奖品显示。所以这一定需要:

  • 图形化界面
  • 抽奖算法。

接着你在纸上画下设计草图:

设计草图
设计草图

界面搭建

为了减少不必要依赖,你决定使用python自带的tkinter

Tkinter 是 Python 的标准 GUI 库,基于 Tcl/Tk。它随 Python 标准库一起提供,不需要额外安装即可使用。 优点:简单易学,适合快速开发小型应用;跨平台支持良好。

代码语言:python
代码运行次数:0
复制
import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title('抽奖系统')

# 设置长宽
root.geometry('400x300')

# 显示抽奖结果
result_label = tk.Label(root, text='点击按钮开始抽奖', font=('Arial', 24))
result_label.pack(pady=20)

# 抽奖按钮,Button的参数command可以指定点击事件
lottery_button = tk.Button(root, text='开始抽奖', font=('Arial', 16))
lottery_button.pack(pady=60)

# 运行Tkinter事件循环
root.mainloop()

运行结果

UI图运行结果
UI图运行结果

抽奖逻辑

奖品设置的比较固定可以手动录入,公司员工的数量较多,考虑从Excel直接读取。

读取Excel

以下需要用到pandas和openpyxl,需要手动安装。

代码语言:shell
复制
pip install pandas openpyxl

读取第一列的代码

代码语言:python
代码运行次数:0
复制
import pandas as pd
import openpyxl

# 读取Excel文件
df = pd.read_excel('data.xlsx')
# 获取第一列的数据
column_data = df.iloc[:, 0].tolist()

# 输出数据
print(column_data)

输出结果

['李四', '王五', '赵六', '花花']

以上代码的输出结果没有张三,因为第一行默认是序列。

如果想要取消预设,可以在读取的时候追加参数,写成如下:

df = pd.read_excel('data.xlsx', header=None)

抽奖算法

最简单就是,根据数量在Excle中另起一列,然后和职工做随机。

以下算法片段可运行尝试

代码语言:python
代码运行次数:0
复制
from random import choice

# 假设我们有以下奖项列表
awards = ['一等奖', '二等奖', '三等奖', '谢谢参与']

# 随机抽取一个奖项
result = choice(awards)

print(result)

这时可能会注意到一个问题,奖品数量有限,如何做到每个都只会抽到一次呢?

不同于Java,python可以直接删除掉这个元素,优化后的代码如下

代码语言:python
代码运行次数:0
复制
from random import choice

# 假设我们有以下奖项列表(实际应从Excel中读取)
awards = ['一等奖', '二等奖', '三等奖', '谢谢参与']

def draw_lottery():
    # 随机抽取一个奖项
    result = choice(awards)
    awards.remove(result)
    print(result)

for i in range(len(awards)):
    draw_lottery()

remove方法的另外一个特点:如果有多个重复的,也只会删除一个。


不想在Excel里面操作,也可通过代码生成奖品列表。

最后,把职工和对应的他们抽到的奖品全都列在label中就可以了

代码语言:python
代码运行次数:0
复制
result_label.config(text=result)

总结

相比于其他语言做图形化的抽奖,python依旧发挥着他简洁的特点。在一些小的细节上,比如随机抽取,也是一步搞定。当真效率神器!

one more thing

说到效率神器,一键搞定当然是最想要的了。然后就在最近我发现腾讯云出了一款高性能应用服务器HAI,可以一键部署Stable Diffusion、语言模型、Pytorch等环境。如果你也想拥有一个自己的大模型助手,又担心本地电脑性能有限,那就来点击下方体验快速部署的乐趣吧!

高性能应用服务HAIGPU云服务器腾讯云

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实现
    • 思路梳理
      • 界面搭建
        • 抽奖逻辑
          • 读取Excel
          • 抽奖算法
      • 总结
      • one more thing
      相关产品与服务
      GPU 云服务器
      GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档