首頁>技術>

前言

每次年會都與大獎擦肩而過,自認為自己是個絕緣體質。這不是又到了年底了嗎,一個朋友想要做一個“年會抽獎”小工具。這下找到了我,讓給幫忙做一個抽獎程式。於是,有了這篇文章......

這個抽獎程式,我大概倒騰了1小時左右,就弄出來了,一共修改了三版。

第一版:這裡讀取的是一個txt文件,即所有的姓名都放在一個txt文件中,抽獎程式是讀取該文件中的姓名資料,來完成該過程的;② 第二版:增加重置功能;③ 第三版:這是final版本,鑑於大家都把資料存放在Excel中,我這裡直接從csv格式的Excel檔案中讀取姓名資料,來完成抽獎這個過程;功能邏輯敘述

程式已經被打包,不管你電腦有沒有Python環境,拿去就可以用。為了讓大家更明白的使用該程式,我這裡還是為大家介紹一些它的使用原理。

當你開啟該程式時,會出現如下提示:

提示中提到了一個names.csv檔案 ,這就是你公司員工的姓名資訊資料。你需要將這個程式和names.csv檔案,放在同一工作部錄下。之後,整個程式就是基於該檔案中的資料,完成抽獎這個過程的。

最終你就可以簡單試玩兒了。

整個程式的執行邏輯,我還給大家做了一個流程圖,大家可以體會體會。

使用注意事項

為了讓大家用起來更貼心,我給大家寫出了3條使用建議,如下:

① 員工姓名資訊必須儲存為CSV格式檔案,並且檔名必須是names.csv;② 你可以使用WPS或者Office編輯names.csv檔案,檔案表頭會自動跳過,該檔案會自動從第二行讀取第一列的姓名資訊,其他列資料不用刪除會自動被忽略;③ 針對姓名中出現同名同姓的情況,程式會給出提示並直接退出,建議是給每個同名同姓的值加上編號或部門等額外的區分資訊;

names.csv檔案,大致如圖所示即可:

開發流程

我覺得這個開發流程是有必要給你講述一下的,後面如果你有自己獨有的需求,可以繼續在此基礎上,完善這個程式。

1)姓名隨機生成

首先我們開發一些基本的函式,用於隨機姓名的生成,姓名檔案的載入等。建立本地檔案lottery_draw_func.py,部分程式碼如下:

def random_name():    xing = '趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶姜戚謝鄒喻柏水竇章雲蘇潘葛' \           '奚範彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費廉岑薛雷賀倪湯滕殷羅畢郝鄔安常樂於時傅皮卞齊康' \           '伍餘元卜顧孟平黃和穆蕭尹姚邵湛汪祁毛禹狄米貝明臧計伏成戴談宋茅龐熊紀舒屈項祝董梁杜阮藍閔' \           '席季麻強賈路婁危江童顏郭梅盛林刁鍾徐邱駱高夏蔡田樊胡凌霍虞萬支柯昝管盧莫經房裘繆幹解應宗' \           '丁宣賁鄧鬱單杭洪包諸左石崔吉鈕龔程嵇邢滑裴陸榮翁荀羊於惠甄曲家封芮羿儲靳汲邴糜松井段富巫' \           '烏焦巴弓牧隗山谷車侯宓蓬全郗班仰秋仲伊宮寧仇欒暴甘鈄厲戎祖武符劉景詹束龍葉幸司韶郜黎薊薄' \           '印宿白懷蒲邰從鄂索鹹籍賴卓藺屠蒙池喬陰鬱胥能蒼雙聞莘黨翟譚貢勞逄姬申扶堵冉宰酈雍卻璩桑桂' \           '濮牛壽通邊扈燕冀郟浦尚農溫別莊晏柴瞿閻充慕連茹習宦艾魚容向古易慎戈廖庾終暨居衡步都耿滿弘' \           '匡國文寇廣祿闕東歐殳沃利蔚越夔隆師鞏厙聶晁勾敖融冷訾辛闞那簡饒空曾毋沙乜養鞠須豐巢關蒯相' \           '查後荊紅遊竺權逯蓋益桓公万俟司馬上官歐陽夏侯諸葛聞人東方赫連皇甫尉遲公羊澹臺公冶宗政濮陽' \           '淳于單于太叔申屠公孫仲孫軒轅令狐鍾離宇文長孫慕容鮮于閭丘司徒司空丌官司寇仉督子車顓孫端木' \           '巫馬公西漆雕樂正壤駟公良拓跋夾谷宰父穀梁晉楚閆法汝鄢塗欽段幹百里東郭南門呼延歸海羊舌微生' \           '嶽帥緱亢況郈有琴梁丘左丘東門西門商牟佘佴伯賞南宮墨哈譙笪年愛陽佟第五言福'    ming = '偉剛勇毅俊峰強軍平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元全國勝學祥才發武新利清' \           '飛彬富順信子傑濤昌成康星光天達安巖中茂進林有堅和彪博誠先敬震振壯會思群豪心邦承樂紹功松善' \           '厚慶磊民友裕河哲江超浩亮政謙亨奇固之輪翰朗伯宏言若鳴朋斌樑棟維啟克倫翔旭鵬澤晨辰士以建家' \           '致樹炎德行時泰盛秀娟英華慧巧美娜靜淑惠珠翠雅芝玉萍紅娥玲芬芳燕彩春菊蘭鳳潔梅琳素雲蓮真環' \           '雪榮愛妹霞香月鶯媛豔瑞凡佳嘉瓊勤珍貞莉桂娣葉璧璐婭琦晶妍茜秋珊莎錦黛青倩婷姣婉嫻瑾穎露瑤' \           '怡嬋雁蓓紈儀荷丹蓉眉君琴蕊薇菁夢嵐苑筠柔竹靄凝曉歡霄楓芸菲寒欣瀅伊亞宜可姬舒影荔枝思麗秀' \           '飄育馥琦晶妍茜秋珊莎錦黛青倩婷寧蓓紈苑婕馨瑗琰韻融園藝詠卿聰瀾純毓悅昭冰爽琬茗羽希'    result = []    result.append(random.choice(xing))    for i in range(random.randint(1, 2)):        result.append(random.choice(ming))    if random.randint(1, 30) == 1:        result.append(random.choice(ming))    return "".join(result)

效果圖如下:

2)GUI程式介面開發

然後開發一個gui主程式,用於展示介面,檔名為lottery_draw.py,部分程式碼如下:

if not os.path.exists("names.txt"):    yes_no = sg.popup_yes_no(        "待抽獎人員姓名名單檔案names.txt沒有找到!!!\n請將所有的待抽獎人員姓名名單,"        "\n按行分割以gbk編碼儲存在names.txt檔案中,\n確認後重啟程式!!!"        "\n或者你是否要讓程式自動幫你生成隨機姓名列表用於測試?",        title="提示")    if yes_no == "Yes":        num = None        while num is None:            text = sg.popup_get_text("請輸入要生成的姓名個數:")            try:                num = int(text)            except:                sg.popup("您輸入的文字非數字或者點選了取消,請輸入數字並點選確認", title="提示")        write_random_name(num)    else:        sys.exit(0)names = load_name_list()counter = Counter(names)name_count = counter.most_common(1)[0]if name_count[1] != 1:    sg.popup(f"本地檔案data.txt存在同名同姓{name_count[0]},\n請手動改同名同姓加其他的值區分後,再重啟程式繼續", title="提示")    sys.exit(0)window = sg.Window('年會抽獎程式', layout, finalize=True)window["in"].update(f"待抽獎名單({len(names)}人):")winners = []random.shuffle(names)window["list1"].update(names)

經過簡單測試,沒有問題後,我們開始打包程式,以便於任何人拿著程式就可以用。

首先我們準備好一個圖示檔案,這個既可以透過一些網站下載,或者可以透過一些線上網站將普通圖示轉成圖示。這裡呢,我將使用我10年前上初中時開發的一個小工具:

直接將圖片往自動轉換區一拖動,然後桌面上就生成了相應的圖示。

接下來,將該圖示重新命名為a.ico後,移動到和程式在相同的資料夾下,就可以進行打包操作了。

命令列輸入:

檔案大小也只有9MB:

後面我就把程式發給朋友了,朋友使用之後覺得挺滿意的,還給我發了個紅包:

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 第三十一天,西門子S7-300 資料塊