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使用htpasswd实现基本认证授权的例子
Jun 10 Python
让python在hadoop上跑起来
Jan 27 Python
深入理解python函数递归和生成器
Jun 06 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
对python3 urllib包与http包的使用详解
May 10 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
python保留小数位的三种实现方法
Jan 07 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
pandas DataFrame运算的实现
Jun 14 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
pytorch损失反向传播后梯度为none的问题
May 12 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
用PHP实现登陆验证码(类似条行码状)
2006/10/09 PHP
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
Vue页面骨架屏注入方法
2018/05/13 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
python的变量与赋值详细分析
2017/11/08 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
django页面跳转问题及注意事项
2019/07/18 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
银行柜员应聘推荐信范文
2013/11/24 职场文书
电脑教师的教学自我评价
2013/11/26 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
火灾现场处置方案
2014/05/28 职场文书
节水口号标语
2014/06/19 职场文书
高中生毕业评语
2014/12/30 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
同意转租证明
2015/06/24 职场文书
羊脂球读书笔记
2015/06/30 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python