python實(shí)現(xiàn)年會(huì)抽獎(jiǎng)程序
用python來實(shí)現(xiàn)一個(gè)抽獎(jiǎng)程序,供大家參考,具體內(nèi)容如下
主要功能有
1.從一個(gè)csv文件中讀入所有員工工號
2.將這些工號初始到一個(gè)列表中
3.用random模塊下的choice函數(shù)來隨機(jī)選擇列表中的一個(gè)工號
4.抽到的獎(jiǎng)項(xiàng)的工號要從列表中進(jìn)行刪除,以免再次抽到
初級版
這個(gè)比較簡單,缺少定制性,如沒法設(shè)置一等獎(jiǎng)有幾名,二等獎(jiǎng)有幾名
import csv #創(chuàng)建一個(gè)員工列表 emplist = [] #用with自動(dòng)關(guān)閉文件 with open('c://emps.csv') as f: empf = csv.reader(f) for emp in empf: emplist.append(emp) print("進(jìn)行一等獎(jiǎng)抽獎(jiǎng),共有一名") import random #利用random模塊的chice函數(shù)來從列表中隨機(jī)選取一個(gè)元素 e1 = random.choice(emplist) #將中獎(jiǎng)的員工從列表中剔除 emplist.remove(e1) print('一等獎(jiǎng)得主的號碼是 %s' % e1) print('進(jìn)行三個(gè)二等獎(jiǎng)的號碼抽獎(jiǎng)') 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個(gè)二等獎(jiǎng)是 %s %s %s',(e2_1,e2_2,e2_3)) #下面依次類推可以設(shè)置三等獎(jiǎng)的抽獎(jiǎng)
改進(jìn)版
上面的那個(gè)初級版,假如要設(shè)置個(gè)三等獎(jiǎng)一百名那么將要重新維護(hù)幾百行代碼,下面用比較高級點(diǎn)的辦法實(shí)現(xiàn).
我們考慮用面向?qū)ο髞韺?shí)現(xiàn),設(shè)計(jì)一個(gè)抽獎(jiǎng)?lì)悾愔邪粋€(gè)屬性(號碼來源),一個(gè)方法:產(chǎn)生所有抽獎(jiǎng)層次指定個(gè)數(shù)的抽獎(jiǎng)號碼。
用到如下知識點(diǎn):
1. csv模塊部分函數(shù)用法
2. sys模塊讀取輸入
3. random模塊函數(shù)choice函數(shù)用法
4. 列表和字典元素的添加、刪除
6. for循環(huán)中range用法
7. 類和面向?qū)ο?
8. 字符打印,print中的計(jì)算
9.open中with
#!/usr/bin/python #coding=utf-8 import csv import sys import random reload(sys) sys.setdefaultencoding('utf8') #coding=utf-8 print("開始進(jìn)行抽獎(jiǎng)") #定義個(gè)抽獎(jiǎng)?lì)?,功能有輸入抽?jiǎng)級別和個(gè)數(shù),打印出每個(gè)級別的抽獎(jiǎng)員工號碼 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 人參與抽獎(jiǎng)' % len(emplist)) levels = int(input('抽獎(jiǎng)分幾個(gè)層次,請輸入:')) #定義一個(gè)字典 level_dict = {} for i in range(0,levels): print('請輸入當(dāng)前獲獎(jiǎng)層次 %s 對應(yīng)的獎(jiǎng)品個(gè)數(shù)' % ( 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 #循環(huán)完成后抽獎(jiǎng)層次字典構(gòu)造完畢 #進(jìn)行抽獎(jiǎng)開始 print('抽獎(jiǎng)字典設(shè)置為: %s' % level_dict) for i in range(0,len(level_dict)): winers = [] #產(chǎn)生當(dāng)前抽獎(jiǎng)層次i對應(yīng)的抽獎(jiǎng)個(gè)數(shù) for j in range(0,int(level_dict[i])): #利用random模塊中的choice函數(shù)從列表中隨機(jī)產(chǎn)生一個(gè) winer = random.choice(emplist) winers.append(winer) emplist.remove(winer) print('抽獎(jiǎng)層次 %s 下產(chǎn)出的獲獎(jiǎng)人員有:' % (i + 1 )) print(winers) #類功能定義完畢,開始初始化并使用 if __name__ == '__main__': peoples = Choujiang('c://emps.csv') peoples.creat_num()
該段程序在python 2.6 以上及 3中均可以運(yùn)行,運(yùn)行結(jié)果如下圖:
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 ================================ >>> 開始進(jìn)行抽獎(jiǎng) 共有24790 人參與抽獎(jiǎng) 抽獎(jiǎng)分幾個(gè)層次,請輸入:2 請輸入當(dāng)前獲獎(jiǎng)層次 1 對應(yīng)的獎(jiǎng)品個(gè)數(shù) 1 請輸入當(dāng)前獲獎(jiǎng)層次 2 對應(yīng)的獎(jiǎng)品個(gè)數(shù) 3 抽獎(jiǎng)字典設(shè)置為: {0: 1, 1: 3} 抽獎(jiǎng)層次 1 下產(chǎn)出的獲獎(jiǎng)人員有: [['張三19826']] 抽獎(jiǎng)層次 2 下產(chǎn)出的獲獎(jiǎng)人員有: [['張三18670'], ['張三23235'], ['張三15705']] >>>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python多線程、網(wǎng)絡(luò)編程、正則表達(dá)式詳解
這篇文章主要介紹了python多線程、網(wǎng)絡(luò)編程、正則表達(dá)式,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12對python抓取需要登錄網(wǎng)站數(shù)據(jù)的方法詳解
今天小編就為大家分享一篇對python抓取需要登錄網(wǎng)站數(shù)據(jù)的方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05如何解決Visdom全藍(lán),不顯示內(nèi)容問題
這篇文章主要介紹了如何解決Visdom全藍(lán),不顯示內(nèi)容問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06python使用for循環(huán)和海龜繪圖實(shí)現(xiàn)漂亮螺旋線
這篇文章主要為大家介紹了python使用for循環(huán)和海龜繪圖實(shí)現(xiàn)漂亮螺旋線實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python項(xiàng)目管理工具Poetry使用示例詳解
這篇文章主要為大家介紹了Python項(xiàng)目管理工具Poetry使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Windows 下更改 jupyterlab 默認(rèn)啟動(dòng)位置的教程詳解
這篇文章主要介紹了Windows 下更改 jupyterlab 默認(rèn)啟動(dòng)位置,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Python機(jī)器學(xué)習(xí)之底層實(shí)現(xiàn)KNN
今天給大家?guī)淼氖顷P(guān)于Python機(jī)器學(xué)習(xí)的相關(guān)知識,文章圍繞著Python底層實(shí)現(xiàn)KNN展開,文中有非常詳細(xì)的解釋及代碼示例,需要的朋友可以參考下2021-06-06