年会将近?赶紧学学如何用Python做个抽奖界面

2023-11-05 16:20

本文主要是介绍年会将近?赶紧学学如何用Python做个抽奖界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

8b44af7e1c33f018e856cfd0c402e060.gif

在后台回复【阅读书籍】

即可获取python相关电子书~

Hi,我是山月。

明天就是元旦的最后一天了,通过you-get看了两天视频的山月终于打算收收心了。👉圣诞福利:头像戴圣诞帽+下载神器you-get

元旦一过,感觉过年就近在咫尺了,这不,群里早就开始讨论起年会的节目安排了。

说起年会,印象最深刻的莫过于抽奖环节了,可惜奖运一直不太行💔💔💔

但作为一个Python学习者,我不禁想着:能不能通过Python做个抽奖

说干就干。因此就有了这篇文章。效果👇

53d8caf4e526a426d30c646c1a02e210.gif

完整代码和所用到的excel文件在公众号后台回复【年会抽奖】即可得到。

第一步,我们得先做好准备工作:整理年会参与者的名单

山月把名单储存在了excel表格里👇

23ef6c869c78e1039814497ee870474a.png


因此,我们首先要想办法读取excel表格,得到所有参会人员的姓名,为了防止姓名重复,我们也需要把姓名对应的工号读取出来。

读取excel,大家脑海中有没有浮现出实现的办法?山月立马想到了xlrd,关于xlrd的教程,大家可以看看👉Python自动化办公:xlrd万字教程。

实现代码:

import xlrddata= xlrd.open_workbook("员工名单.xlsx") 
work_sheet = data.sheet_by_index(0) 
rows_generator = list(work_sheet.get_rows())[1:] #去除表头name_list=[]
for rows in rows_generator:number, name = int(rows[0].value), rows[1].valuename_date =' {} ({}) '.format(name, number) #以姓名(工号)的形式处理数据name_list.append(name_date)print(name_list)

结果:

[' 王晓霞 (2021001) ', ' 刘旭 (2021002) ', ' 斯基 (2021003) ', ' 乌拉 (2021004) ', ' 卡卡 (2021005) ', ' 王屋山 (2021006) ', ' 罗茨 (2021007) ', ' 纪实 (2021008) ', ' 阿 
斯顿 (2021009) ', ' 阿思翠 (2021010) ', ' 孙菲菲 (2021011) ', ' 水水 (2021012) ', ' 十三 (2021013) ', ' 十四 (2021014) ', ' 孙师傅 (2021015) ', ' 三律 (2021016) ', ' 楼望(2021017) ', ' 妮妮 (2021018) ', ' 可可 (2021019) ', ' 飞飞 (2021020) ', ' 胖胖 (2021021) ', ' 冰冰 (2021022) ', ' 彬彬 (2021023) ', ' 萍儿 (2021024) ', ' 丹丹 (2021025) ', ' 瑶瑶 (2021026) ', ' 吴杰 (2021027) ', ' 梁二 (2021028) ', ' 宋三 (2021029) ']

bingo🤞,完成。

第二步就是来实现我们的抽奖界面啦。

用到的是tkinter,tkinter基础教程请看👉初识Tkinter:一些必须掌握的基础知识。

代码:

import random
import tkinter as tkclass lottery(object):def __init__(self):self.windows = tk.Tk()self.windows.title("年会抽奖")self.windows.geometry('880x500+50+100')self.windows.configure(bg='red') text_prize = '''奖项\n\n一等奖:1名\n\n二等奖:3名\n\n三等奖:5名\n\n幸运奖:10名'''self.prize_label = tk.Label(self.windows,text = text_prize,font='楷体 -20 bold',  width=30, height=21, bg='yellow')self.prize_label.place(x=22, y=30)self.prize_label = tk.Label(self.windows, text='* * 公 司 2021 年 年 会', width=38, height=3, bg='yellow',font='楷体 -20 bold')self.prize_label.place(x=400, y=30)self.var1 = tk.StringVar(value='中 奖 中 奖 !')self.award_label = tk.Label(self.windows, textvariable = self.var1,  width=20, height=3, bg='yellow',font='楷体 -40 bold')self.award_label.place(x=400, y=120)self.button_start = tk.Button(self.windows, text='开始', command=lambda: self.award_start(self.var1, self.var2),  width=14, height=2, bg='yellow',font='楷体 -18 bold')self.button_start.place( x=400, y=280)self.button_end = tk.Button(self.windows, text='结束', command=lambda: self.award_end(),width=14, height=2, bg='yellow',font='楷体 -18 bold')self.button_end.place( x=670, y=280)self.var2 = tk.StringVar(value='大 奖 来 袭 !')self.congratulate_label = tk.Label(self.windows, textvariable = self.var2, width=38, height=3, bg='yellow',font='楷体 -20 bold')self.congratulate_label.place( x=400, y=380)self.start = Trueself.runing = Falseself.name_list = ['员工1','员工2','员工13','员工4','员工5','员工6','员工7','员工8','员工9','员工10']  #员工名单#开始按钮关联的函数def award_start(self, var1, var2):global start, runingaward_name = random.choice(self.name_list) #随机在列表里抽取一个数据self.var1.set(award_name)if self.start:self.windows.after(50, self.award_start, self.var1, self.var2)        self.runing = Truevar2.set('猜猜是不是你!!!')else:self.var2.set('恭喜{},你就是全场最亮的崽!!!'.format(award_name))self.start = True#结束按钮关联的函数def award_end(self):global start, runingif self.runing:self.start = Falsedef run(self):self.windows.mainloop()if __name__=="__main__":app = lottery()app.run()

效果:

04c57516a8a6ab5ed398b40b27dcac37.gif

下面我们来说下实现的重点:开始和结束按钮关联的函数。

借助的两个变量:start(开始)和running(运行中)的初始值:

self.start = True
self.runing = False

1)开始函数

def award_start(self, var1, var2):global start, runingaward_name = random.choice(self.name_list) #随机在列表里抽取一个数据self.var1.set(award_name)if self.start:self.windows.after(50, self.award_start, self.var1, self.var2)        self.runing = Truevar2.set('猜猜是不是你!!!')else:self.var2.set('恭喜{},你就是全场最亮的崽!!!'.format(award_name))self.start = True

首先利用global把start和running变量变成全局变量。

然后通过random.choice在列表里随机抽取一个元素,这个元素就是我们抽中的名单。并把抽中的姓名写入到award_label标签里去。

最后我们来判断,变量start的值

  • 如果变量start是True,通过after不断的重新调用award_start函数,然后把变量running由初始值False定义为True,并在congratulate_label标签里写入文本【猜猜是不是你】

  • 如果变量start是False,在congratulate_label标签里写入文本【恭喜...】,并把变量start定义为True。

2)结束函数

def award_end(self):global start, runingif self.runing:self.start = False

首先利用global把start和running变量变成全局变量。

然后当变量running的值为True的时候,把start的值定义为False。

3)总结

因为start(开始)的初始值为True,所以当我们点击开始按钮后,它会直接走start值为True的步骤,直到我们按了结束按钮,把start的值变成了False。

如果我们再次点击开始进行抽奖,由于这个时候start的值是False,所以我们先走start的值是False的步骤,把start的值变成True,再重新走start值是True的步骤。

现在,读取excel文档和抽奖界面我们都实现了,接下来需要做的就是把抽奖界面里的名单列表变成我们从excel读取出来的结果。

大家一起来试试吧,也可以借此检验下你的学习成果哦。

山月的答案👉:在公众号后台回复【年会抽奖】即可得到完整代码+excel文档。

已经到底啦~(≧▽≦*)/~

7cfdadfc21c08896be06458e7f6db727.png 往 期 推 荐 b07a570e3b761d0684dd8ce89c9a915b.png

初识Tkinter:一些必须掌握的基础知识

2021-12-09

9b5200bc71a7484aba6bc257eb88b650.png

用Python写份【幸运】的元旦祝福

2021-12-31

9e6276d45e20f76e4ff54bd41f41a0c6.png

Python自动化办公:xlwt万字教程

2021-12-20

16b9a78b4fa3a4eb6068dc44005a2b17.png

Python自动化办公:xlrd万字教程

2021-12-12

d1fa7bbc5b87ad7a2f75b688ee5580af.png

f9ece5f7b61e94a30e75426a051ba94c.gif

您的“点赞”、“在看”和 “分享”是我们产出的动力。

这篇关于年会将近?赶紧学学如何用Python做个抽奖界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351034

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At