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函数嵌套实例
Sep 23 Python
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
Python编程之event对象的用法实例分析
Mar 23 Python
Python数据分析之获取双色球历史信息的方法示例
Feb 03 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
对Python闭包与延迟绑定的方法详解
Jan 07 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
Python玩转PDF的各种骚操作
May 06 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
python mqtt 客户端的实现代码实例
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
dedecms模板标签代码官方参考
2007/03/17 PHP
php中in_array函数用法探究
2014/11/25 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
vue项目中添加单元测试的方法
2018/07/21 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python实现控制台进度条功能
2016/01/04 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
Python字符串的一些操作方法总结
2019/06/10 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
使用python实现飞机大战游戏
2020/03/23 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
美国在线工具商店:Acme Tools
2018/06/26 全球购物
工程类专业自荐信范文
2014/03/09 职场文书
大学校务公开实施方案
2014/03/31 职场文书
社区健康教育工作方案
2014/06/03 职场文书
工作检讨书范文
2015/01/23 职场文书
培训班开班主持词
2015/07/02 职场文书