python实现年会抽奖程序


Posted in Python onJanuary 22, 2019

用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 正则式使用心得
May 07 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
python操作gmail实例
Jan 14 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
详解如何使用Python编写vim插件
Nov 28 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python放大图片和画方格实现算法
Mar 30 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Django开发的简易留言板案例详解
Dec 04 Python
Python常见数据结构之栈与队列用法示例
Jan 14 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
在python中实现强制关闭线程的示例
Jan 22 #Python
Python实现简单石头剪刀布游戏
Jan 20 #Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 #Python
python 对类的成员函数开启线程的方法
Jan 22 #Python
python实现石头剪刀布小游戏
Jan 20 #Python
对Python3之进程池与回调函数的实例详解
Jan 22 #Python
python多任务及返回值的处理方法
Jan 22 #Python
You might like
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
Python中os和shutil模块实用方法集锦
2014/05/13 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python定时任务sched模块用法示例
2018/07/16 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
工商企业管理应届生求职信
2014/05/04 职场文书
公司员工活动策划方案
2014/08/20 职场文书
公司员工离职证明书
2014/10/04 职场文书
四大名著读书笔记
2015/06/25 职场文书
月考总结与反思
2015/10/22 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle