如何基于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 相关文章推荐
Linux下用Python脚本监控目录变化代码分享
May 21 Python
使用Django的模版来配合字符串翻译工作
Jul 27 Python
python 查找字符串是否存在实例详解
Jan 20 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
对numpy中shape的深入理解
Jun 15 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
使用Python函数进行模块化的实现
Nov 15 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
Python流程控制语句的深入讲解
Jun 15 Python
Python中time与datetime模块使用方法详解
Mar 31 Python
Elasticsearch 索引操作和增删改查
Apr 19 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连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
python 随机森林算法及其优化详解
2019/07/11 Python
django 信号调度机制详解
2019/07/19 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python 变量初始化空列表的例子
2019/11/28 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
遇到的Mysql的面试题
2014/06/29 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
历史学专业毕业生求职信
2013/09/27 职场文书
机修工岗位职责
2013/11/24 职场文书
共产党员公开承诺书
2014/03/25 职场文书
刊首寄语大全
2014/04/11 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
Golang jwt身份认证
2022/04/20 Golang
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers