如何基于python实现年会抽奖工具


Posted in Python onOctober 20, 2020

用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脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
常用python编程模板汇总
Feb 12 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python反射用法实例简析
Dec 22 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
解决Django Haystack全文检索为空的问题
May 19 Python
Python json格式化打印实现过程解析
Jul 21 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 #Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 #Python
Python 制作查询商品历史价格的小工具
Oct 20 #Python
python实现扫雷游戏的示例
Oct 20 #Python
python3排序的实例方法
Oct 20 #Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 #Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 #Python
You might like
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php实现文件编码批量转换
2014/03/10 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
python与php实现分割文件代码
2017/03/06 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
对python判断是否回文数的实例详解
2019/02/08 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
Python argparse模块使用方法解析
2020/02/20 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
英国手机零售商:Metrofone
2019/03/18 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
string = null 和string = ''的区别
2013/04/28 面试题
网上书店创业计划书
2014/01/12 职场文书
战略合作意向书范本
2014/04/01 职场文书
党委领导班子整改方案
2014/09/30 职场文书
优秀教师先进材料
2014/12/16 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python