如何基于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使用Srapy框架爬虫模拟登陆并抓取知乎内容
Jul 02 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
python中学习K-Means和图片压缩
Nov 20 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
python实现K最近邻算法
Jan 29 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
Python Matplotlib 基于networkx画关系网络图
Jul 10 Python
python可以用哪些数据库
Jun 22 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 Python
写好Python代码的几条重要技巧
May 21 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php 中英文语言转换类代码
2011/08/11 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python实现图片文件批量重命名
2020/03/23 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
党员自我评价分享
2013/12/13 职场文书
厂长助理岗位职责
2013/12/27 职场文书
教堂婚礼主持词
2014/03/14 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
维修工先进事迹
2014/05/29 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
致运动员的广播稿
2015/08/19 职场文书