如何基于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 Tkinter基础控件用法
Sep 03 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
Python测试人员需要掌握的知识
Feb 08 Python
3分钟学会一个Python小技巧
Nov 23 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
Python-接口开发入门解析
Aug 01 Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 Python
Python求正态分布曲线下面积实例
Nov 20 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
Python基本数据类型之字符串str
Jul 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
PHP.MVC的模板标签系统(二)
2006/09/05 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
js CSS操作方法集合
2008/10/31 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python进程间通信Queue实例解析
2018/01/25 Python
Django开发中复选框用法示例
2018/03/20 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
高中生毕业自我鉴定
2013/10/10 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
慰问信范文
2015/02/14 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书