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 相关文章推荐
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
Python数组遍历的简单实现方法小结
Apr 27 Python
浅谈django中的认证与登录
Oct 31 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
Feb 16 Python
python playwright 自动等待和断言详解
Nov 27 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
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
浅析node.js中close事件
2014/11/26 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
浅析JS运动
2015/12/28 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
js实现下一页页码效果
2017/03/07 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
javascript中的隐式调用
2018/02/10 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
原生js实现购物车功能
2020/09/23 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
Python实现二分查找算法实例
2015/05/26 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
Python探索之pLSA实现代码
2017/10/25 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
Exception类的常用方法
2012/06/16 面试题
面试自我介绍演讲稿
2014/04/29 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
房屋维修申请报告
2015/05/18 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby