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实现包含min函数的栈
Apr 29 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
python 获取当天凌晨零点的时间戳方法
May 22 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
Python中print函数简单使用总结
Aug 05 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
python实现复制文件到指定目录
Oct 16 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
解析PHP跨站刷票的实现代码
2013/06/18 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python 变量的创建过程详解
2019/09/02 Python
人力资源专员自我评价怎么写
2013/09/19 职场文书
营业员演讲稿
2013/12/30 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
同学聚会策划方案
2014/06/06 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
学习十八大的心得体会
2014/09/12 职场文书
个人工作表现评价材料
2014/09/21 职场文书
人事代理委托书
2014/09/27 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书