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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
python实现ip查询示例
Mar 26 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python时间获取及转换知识汇总
Jan 11 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
python zip()函数的使用示例
Sep 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向js函数传参的几种方法
2014/08/10 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python设置值及NaN值处理方法
2018/07/03 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
python hashlib加密实现代码
2019/10/17 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
ASP.NET Core中的配置详解
2021/02/05 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
比利时香水网上商店:NOTINO
2018/03/28 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
药学专业大专生的自我评价
2013/12/12 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL