如何基于python实现年会抽奖工具


Posted in Python onOctober 20, 2020

用python来实现一个抽奖程序,供大家参考,具体内容如下

主要功能有

1.从一个csv文件中读入所有员工工号

2.将这些工号初始到一个列表中

3.用random模块下的choice函数来随机选择列表中的一个工号

4.抽到的奖项的工号要从列表中进行删除,以免再次抽到

初级版

这个比较简单,缺少定制性,如没法设置一等奖有几名,二等奖有几名

import csv
#创建一个员工列表
emplist = []
#用with自动关闭文件
with open('c://emps.csv') as f:
 empf = csv.reader(f)
 for emp in empf:
 emplist.append(emp)
print("进行一等奖抽奖,共有一名")
import random
#利用random模块的chice函数来从列表中随机选取一个元素
e1 = random.choice(emplist)
#将中奖的员工从列表中剔除
emplist.remove(e1)
print('一等奖得主的号码是 %s' % e1)
print('进行三个二等奖的号码抽奖')
e2_1 = random.choice(emplist)
emplist.remove(e2_1)
e2_2 = random.choice(emplist)
emplist.remove(e2_2)
e2_3 = random.choice(emplist)
emplist.remove(e2_3)
print('获得3个二等奖是 %s %s %s',(e2_1,e2_2,e2_3))
#下面依次类推可以设置三等奖的抽奖

改进版

上面的那个初级版,假如要设置个三等奖一百名那么将要重新维护几百行代码,下面用比较高级点的办法实现.

我们考虑用面向对象来实现,设计一个抽奖类,类中包含一个属性(号码来源),一个方法:产生所有抽奖层次指定个数的抽奖号码。

用到如下知识点:

1. csv模块部分函数用法
2. sys模块读取输入
3. random模块函数choice函数用法
4. 列表和字典元素的添加、删除
6. for循环中range用法
7. 类和面向对象
8. 字符打印,print中的计算
9.open中with

#!/usr/bin/python
#coding=utf-8
import csv
import sys
import random
reload(sys) 
sys.setdefaultencoding('utf8')
#coding=utf-8
print("开始进行抽奖")
#定义个抽奖类,功能有输入抽奖级别和个数,打印出每个级别的抽奖员工号码
class Choujiang:
 #定义scv文件路径
 def __init__(self,filepath):
 self.empfile = filepath
 def creat_num(self):
 emplist = []
 with open(self.empfile) as f:
  empf = csv.reader(f)
  for emp in empf:
  emplist.append(emp)
 print('共有%s 人参与抽奖' % len(emplist))
 levels = int(input('抽奖分几个层次,请输入:'))
 #定义一个字典
 level_dict = {}
 for i in range(0,levels):
  print('请输入当前获奖层次 %s 对应的奖品个数' % ( i + 1))
  str_level_dict_key = sys.stdin.readline()
  int_level_dict_key = int(str_level_dict_key)
  level_dict[i] = int_level_dict_key
  #循环完成后抽奖层次字典构造完毕
 #进行抽奖开始
 print('抽奖字典设置为: %s' % level_dict)
 for i in range(0,len(level_dict)):
  winers = []
  #产生当前抽奖层次i对应的抽奖个数
  for j in range(0,int(level_dict[i])):
  #利用random模块中的choice函数从列表中随机产生一个
  winer = random.choice(emplist)
  winers.append(winer)
  emplist.remove(winer)
  print('抽奖层次 %s 下产出的获奖人员有:' % (i + 1 ))
  print(winers)
#类功能定义完毕,开始初始化并使用
if __name__ == '__main__':
 peoples = Choujiang('c://emps.csv')
 peoples.creat_num()

该段程序在python 2.6 以上及 3中均可以运行,运行结果如下

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
开始进行抽奖
共有24790 人参与抽奖
抽奖分几个层次,请输入:2
请输入当前获奖层次 1 对应的奖品个数
1
请输入当前获奖层次 2 对应的奖品个数
3
抽奖字典设置为: {0: 1, 1: 3}
抽奖层次 1 下产出的获奖人员有:
[['张三19826']]
抽奖层次 2 下产出的获奖人员有:
[['张三18670'], ['张三23235'], ['张三15705']]
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现bitmap数据结构详解
Feb 17 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
Python实现计算对象的内存大小示例
Jul 10 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
Django中的FBV和CBV用法详解
Sep 15 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
jupyter修改文件名方式(TensorFlow)
Apr 21 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
用 Python 元类的特性实现 ORM 框架
May 19 Python
python基础之函数的定义和调用
Oct 24 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 #Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 #Python
Python 制作查询商品历史价格的小工具
Oct 20 #Python
python实现扫雷游戏的示例
Oct 20 #Python
python3排序的实例方法
Oct 20 #Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 #Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 #Python
You might like
简单的cookie计数器实现源码
2013/06/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
vue生命周期的探索
2019/04/03 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
vue实现计算器功能
2020/02/22 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python selenium 弹出框处理的实现
2019/02/26 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
Python脚本调试工具安装过程
2021/01/11 Python
《最大的“书”》教学反思
2014/02/14 职场文书
违纪检讨书范文
2015/01/27 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书