python實現年會抽獎程序


用python來實現一個抽獎程序,供大家參考,具體內容如下

主要功能有

1.從一個csv文件中讀入所有員工工號
2.將這些工號初始到一個列表中
3.用random模塊下的choice函數來隨機選擇列表中的一個工號
4.抽到的獎項的工號要從列表中進行刪除,以免再次抽到

初級版

這個比較簡單,缺少定制性,如沒法設置一等獎有幾名,二等獎有幾名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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中均可以運行,運行結果如下圖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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' ]]
>>>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM