<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          年會(huì),用Python做了個(gè) “抽獎(jiǎng)程序”,boss獎(jiǎng)勵(lì)我一個(gè)紅包!

          共 4130字,需瀏覽 9分鐘

           ·

          2021-02-02 09:38

          點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          含情欲說宮中事,鸚鵡前頭不敢言。

          前言

          每次年會(huì)都與大獎(jiǎng)擦肩而過,自認(rèn)為自己是個(gè)絕緣體質(zhì)。這不是又到了年底了嗎,一個(gè)朋友想要做一個(gè)“年會(huì)抽獎(jiǎng)”小工具。這下找到了我,讓給幫忙做一個(gè)抽獎(jiǎng)程序。于是,有了這篇文章......

          效果演示

          俗話說:百聞不如一見。說得再好聽,也不如一睹真容。在講述這個(gè)小程序之前,我直接上效果圖吧!如果覺得好,記得給本文留言、點(diǎn)贊、在看,三連擊哦。
          這個(gè)抽獎(jiǎng)程序,我大概倒騰了1小時(shí)左右,就弄出來了,一共修改了三版。
          • 第一版:這里讀取的是一個(gè)txt文檔,即所有的姓名都放在一個(gè)txt文檔中,抽獎(jiǎng)程序是讀取該文檔中的姓名數(shù)據(jù),來完成該過程的;
          • 第二版:增加重置功能;
          • 第三版:這是final版本,鑒于大家都把數(shù)據(jù)存放在Excel中,我這里直接從csv格式的Excel文件中讀取姓名數(shù)據(jù),來完成抽獎(jiǎng)這個(gè)過程;

          功能邏輯敘述

          程序已經(jīng)被打包,不管你電腦有沒有Python環(huán)境,拿去就可以用。為了讓大家更明白的使用該程序,我這里還是為大家介紹一些它的使用原理。
          當(dāng)你打開該程序時(shí),會(huì)出現(xiàn)如下提示:
          提示中提到了一個(gè)names.csv文件 ,這就是你公司員工的姓名信息數(shù)據(jù)。你需要將這個(gè)程序和names.csv文件,放在同一工作部錄下。之后,整個(gè)程序就是基于該文件中的數(shù)據(jù),完成抽獎(jiǎng)這個(gè)過程的。
          如果說你只是想拿來玩玩兒,你沒有這個(gè)names.csv文件 。此時(shí),請(qǐng)點(diǎn)擊上圖中的Yes按鈕,那么系統(tǒng)會(huì)給出一個(gè)提示(如圖所示),自動(dòng)為你生成若干姓名,用于抽獎(jiǎng)。
          最終你就可以簡(jiǎn)單試玩兒了。
          整個(gè)程序的運(yùn)行邏輯,我還給大家做了一個(gè)流程圖,大家可以體會(huì)體會(huì)。

          使用注意事項(xiàng)

          為了讓大家用起來更貼心,我給大家寫出了3條使用建議,如下:
          • ① 員工姓名信息必須保存為CSV格式文件,并且文件名必須是names.csv;
          • ② 你可以使用WPS或者Office編輯names.csv文件,文件表頭會(huì)自動(dòng)跳過,該文件會(huì)自動(dòng)從第二行讀取第一列的姓名信息,其他列數(shù)據(jù)不用刪除會(huì)自動(dòng)被忽略;
          • ③ 針對(duì)姓名中出現(xiàn)同名同姓的情況,程序會(huì)給出提示并直接退出,建議是給每個(gè)同名同姓的值加上編號(hào)或部門等額外的區(qū)分信息;
          names.csv文件,大致如圖所示即可:

          開發(fā)流程

          我覺得這個(gè)開發(fā)流程是有必要給你講述一下的,后面如果你有自己獨(dú)有的需求,可以繼續(xù)在此基礎(chǔ)上,完善這個(gè)程序。

          1)姓名隨機(jī)生成

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

          然后開發(fā)一個(gè)gui主程序,用于展示界面,文件名為lottery_draw.py,部分代碼如下:
          if?not?os.path.exists("names.txt"):
          ????yes_no?=?sg.popup_yes_no(
          ????????"待抽獎(jiǎng)人員姓名名單文件names.txt沒有找到!!!\n請(qǐng)將所有的待抽獎(jiǎng)人員姓名名單,"
          ????????"\n按行分割以gbk編碼保存在names.txt文件中,\n確認(rèn)后重啟程序!!!"
          ????????"\n或者你是否要讓程序自動(dòng)幫你生成隨機(jī)姓名列表用于測(cè)試?",
          ????????title="提示")
          ????if?yes_no?==?"Yes":
          ????????num?=?None
          ????????while?num?is?None:
          ????????????text?=?sg.popup_get_text("請(qǐng)輸入要生成的姓名個(gè)數(shù):")
          ????????????try:
          ????????????????num?=?int(text)
          ????????????except:
          ????????????????sg.popup("您輸入的文本非數(shù)字或者點(diǎn)擊了取消,請(qǐng)輸入數(shù)字并點(diǎn)擊確認(rèn)",?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請(qǐng)手動(dòng)改同名同姓加其他的值區(qū)分后,再重啟程序繼續(xù)",?title="提示")
          ????sys.exit(0)
          window?=?sg.Window('年會(huì)抽獎(jiǎng)程序',?layout,?finalize=True)
          window["in"].update(f"待抽獎(jiǎng)名單({len(names)}人):")
          winners?=?[]
          random.shuffle(names)
          window["list1"].update(names)
          經(jīng)過簡(jiǎn)單測(cè)試,沒有問題后,我們開始打包程序,以便于任何人拿著程序就可以用。

          程序打包exe

          首先我們準(zhǔn)備好一個(gè)圖標(biāo)文件,這個(gè)既可以通過一些網(wǎng)站下載,或者可以通過一些在線網(wǎng)站將普通圖標(biāo)轉(zhuǎn)成圖標(biāo)。這里呢,我將使用我10年前上初中時(shí)開發(fā)的一個(gè)小工具:
          直接將圖片往自動(dòng)轉(zhuǎn)換區(qū)一拖動(dòng),然后桌面上就生成了相應(yīng)的圖標(biāo)。
          接下來,將該圖標(biāo)重命名為a.ico后,移動(dòng)到和程序在相同的文件夾下,就可以進(jìn)行打包操作了。
          命令行輸入:
          pyinstaller?-wF?lottery_draw.py?-i?a.ico
          點(diǎn)擊回車后,即可完成打包操作,部分截圖如下:
          文件大小也只有9MB:
          后面我就把程序發(fā)給朋友了,朋友使用之后覺得挺滿意的,還給我發(fā)了個(gè)紅包:

          -------------------?End?-------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰碰免费网站 | 国产a级久久 | 大香蕉中文青草 | 农村三级毛片 | 狠狠狠狠狠操 |