如何基于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缩进区别分析
Feb 15 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
python将字符串转变成dict格式的实现
Nov 18 Python
Python中six模块基础用法
Dec 08 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
10个示例带你掌握python中的元组
Nov 23 Python
python time.strptime格式化实例详解
Feb 03 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
Vue框架之goods组件开发详解
2018/01/25 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
微信小程序实现简单购物车功能
2020/12/30 Javascript
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
python万年历实现代码 含运行结果
2017/05/20 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
python 自定义装饰器实例详解
2019/07/20 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
Python中的流程控制详解
2021/02/18 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
关于Assembly命名空间的三个面试题
2015/07/23 面试题
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
建筑工程技术应届生求职信
2013/11/17 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
工程技术员岗位职责
2014/03/02 职场文书
共产党员承诺书
2014/03/25 职场文书
活动总结格式
2014/08/30 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
Python数据结构之队列详解
2022/03/21 Python