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合并文本文件示例
Feb 07 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
python代码编写计算器小程序
Mar 30 Python
python 进程的几种创建方式详解
Aug 29 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
Sep 11 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
python推导式的使用方法实例
Feb 28 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扩展编写点滴 技巧收集
2010/03/09 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python返回昨天日期的方法
2015/05/13 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
python实现Zabbix-API监控
2018/09/17 Python
Python列表对象实现原理详解
2019/07/01 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
大学生毕业的自我鉴定
2013/11/13 职场文书
运动会800米加油稿
2014/02/22 职场文书
经典广告词大全
2014/03/14 职场文书
公司应聘自荐书
2014/06/14 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2016年会开场白台词
2015/06/01 职场文书
公司周年庆典致辞
2015/07/30 职场文书