如何基于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处理json数据中的中文
Mar 06 Python
Python正则表达式指南 推荐
Oct 09 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
python爬虫scrapy图书分类实例讲解
Nov 23 Python
Python 中的函数装饰器和闭包详解
Feb 06 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
3
2006/10/09 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
javascript add event remove event
2008/04/07 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
python爬虫使用cookie登录详解
2017/12/27 Python
python对视频画框标记后保存的方法
2018/12/07 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python文件操作方法详解
2020/02/09 Python
使用python实现多维数据降维操作
2020/02/24 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python mysql中in参数化说明
2020/06/05 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
数学专业推荐信范文
2013/11/21 职场文书
丧事主持词大全
2014/04/02 职场文书
大学社团活动总结
2014/04/26 职场文书
学生期末评语大全
2014/04/30 职场文书
节约用电标语
2014/06/17 职场文书
校本课程教学计划
2015/01/19 职场文书
《社戏》教学反思
2016/02/22 职场文书
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers