用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自動關閉文件
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.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'
]]
>>>
|
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我。