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用ConfigObj读写配置文件的实现代码
Mar 04 Python
python处理文本文件并生成指定格式的文件
Jul 31 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
使用python 和 lint 删除项目无用资源的方法
Dec 20 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
Python3模拟登录操作实例分析
Mar 12 Python
django admin后台添加导出excel功能示例代码
May 15 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
Python编写单元测试代码实例
Sep 10 Python
Python天气语音播报小助手
Sep 25 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
学习jquery之一
2007/04/27 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
js更优雅的兼容
2010/08/12 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
行政内勤岗位职责
2014/04/07 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书