如何基于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中的join()函数的用法
Apr 07 Python
详解python的数字类型变量与其方法
Nov 20 Python
Python学习小技巧之列表项的排序
May 20 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
django_orm查询性能优化方法
Aug 20 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
Python多项式回归的实现方法
Mar 11 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
pytorch 6 batch_train 批训练操作
May 28 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函数之子字符串替换 str_replace
2011/03/23 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
js获取单选按钮的数据
2006/11/27 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
类、抽象类、接口的差异
2016/06/13 面试题
Servlet面试题库
2015/07/18 面试题
师范应届生语文教师求职信
2013/10/29 职场文书
小松树教学反思
2014/02/11 职场文书
篮球赛口号
2014/06/18 职场文书
大连星海广场导游词
2015/02/10 职场文书
优秀英文求职信范文
2015/03/19 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
教师网络培训心得体会
2016/01/09 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android