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函数式编程指南(一):函数式编程概述
Jun 24 Python
Python出现segfault错误解决方法
Apr 16 Python
详解Python异常处理中的Finally else的功能
Dec 29 Python
Python检测网络延迟的代码
May 15 Python
python2 与 python3 实现共存的方法
Jul 12 Python
对python周期性定时器的示例详解
Feb 19 Python
Python常见的pandas用法demo示例
Mar 16 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
Eclipse配置python默认头过程图解
Apr 26 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
Django如何与Ajax交互
Apr 29 Python
pytorch损失反向传播后梯度为none的问题
May 12 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
JavaScript面向对象精要(上部)
2017/09/12 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
python 简单的多线程链接实现代码
2016/08/28 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
如何基于Python实现自动扫雷
2020/01/06 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
办公自动化专业大学生职业规划书
2014/03/06 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
毕业实习计划书
2015/01/16 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
详解jQuery的核心函数和事件处理
2022/02/18 jQuery
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle