如何基于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自动化测试实例解析
Sep 28 Python
Python环境变量设置方法
Aug 28 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
python剪切视频与合并视频的实现
Mar 03 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
python常量折叠基础知识点讲解
Feb 28 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 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 array 的加法操作代码
2010/07/24 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python3中exp()函数用法分析
2019/02/19 Python
详解Python中的测试工具
2019/06/09 Python
Python气泡提示与标签的实现
2020/04/01 Python
Python多线程正确用法实例解析
2020/05/30 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
办公室内勤工作职责
2013/12/11 职场文书
竟聘演讲稿范文
2013/12/31 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers
python manim实现排序算法动画示例
2022/08/14 Python