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使用urllib2模块获取gravatar头像实例
Dec 18 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
python判断完全平方数的方法
Nov 13 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Django 响应数据response的返回源码详解
Aug 06 Python
手把手教你pycharm专业版安装破解教程(linux版)
Sep 26 Python
Python列表元素常见操作简单示例
Oct 25 Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
如何将json数据转换为python数据
Sep 04 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 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.MVC的模板标签系统(三)
2006/09/05 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
php备份数据库类分享
2015/04/14 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
基于Python os模块常用命令介绍
2017/11/03 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
Django如何自定义分页
2018/09/25 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
研究生毕业鉴定
2014/01/29 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
活动简报范文
2015/07/22 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL