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正则表达式match和search用法实例
Mar 26 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
python 爬取B站原视频的实例代码
Sep 09 Python
python安装第三方库如xlrd的方法
Oct 31 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
python中requests库+xpath+lxml简单使用
Apr 29 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小偷的核心程序
2007/04/09 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
webpack之devtool详解
2018/02/10 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
Python实现的读写json文件功能示例
2018/06/05 Python
浅析python参数的知识点
2018/12/10 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
java判断三位数的实例讲解
2019/06/10 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python线程threading模块用法详解
2020/02/26 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python