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命令行参数解析模块getopt使用实例
Apr 13 Python
对于Python编程中一些重用与缩减的建议
Apr 14 Python
Python可变参数函数用法实例
Jul 07 Python
Python变量和字符串详解
Apr 29 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
Python如何访问字符串中的值
Feb 09 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHPMyAdmin 快速配置方法
2009/05/11 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
高中校园广播稿
2014/01/11 职场文书
教学质量评估实施方案
2014/03/17 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
本溪关门山导游词
2015/02/09 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
追讨欠款律师函
2015/05/27 职场文书
尼克胡哲观后感
2015/06/08 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL