獎(jiǎng)軟件是否公正公平?
首先,我們必須承認(rèn),大多數(shù)抽獎(jiǎng)軟件都存在作弊或被破解的可能性。根據(jù)經(jīng)驗(yàn),大約有15%的企業(yè)會(huì)要求軟件具有作弊功能。因此,我們很可能會(huì)看到作弊的公告。
一些企業(yè)老板或負(fù)責(zé)人可能會(huì)要求某個(gè)員工中獎(jiǎng),或者只允許老員工中獎(jiǎng)等等。如果您希望抽獎(jiǎng)過程公正透明,我們強(qiáng)烈推薦使用五幺八抽獎(jiǎng)軟件。這是少數(shù)不支持作弊版本的抽獎(jiǎng)軟件之一,因此您可以放心使用。如果您需要更強(qiáng)大的作弊功能,例如指定中獎(jiǎng)人、內(nèi)定、名單分組、黑白名單、指定范圍和設(shè)置中獎(jiǎng)幾率等,我們也可以為您提供支持。
上就要元旦了,可以宅在家里好多天了,不會(huì)還有人在客廳圍繞茶幾走1萬步了,在客廳放幾個(gè)玩具,扔圈圈玩。太無聊了,Python好久不寫了,趕緊操練起來,反正閑著也是無聊,可以試試寫這個(gè)抽獎(jiǎng)小程序說不定可以在年前公司年會(huì)獲得大獎(jiǎng)呢~
既然是玩Python的不如自己動(dòng)手寫一個(gè)抽獎(jiǎng)軟件,我們?cè)O(shè)置一等獎(jiǎng),二等獎(jiǎng),三等獎(jiǎng)。
一等獎(jiǎng)我們放華為手機(jī),二等獎(jiǎng)我們放掃地機(jī)器人,三等獎(jiǎng)我們放手環(huán)。(當(dāng)然這個(gè)可以自己設(shè)置),而且還留一個(gè)后門(嘿嘿,可以作弊哦,這個(gè)最后講)。小伙伴快來一起看一下吧。
明確我們的程序需要實(shí)現(xiàn)哪些功能:
我們先來確定各個(gè)組件的擺放位置,這個(gè)其實(shí)很簡(jiǎn)單,首先,我們利用tkinter的畫布功能,確定我們的畫布大小,然后在畫布上的具體位置擺放我們的畫布大小即可。
例如上圖中畫布上方的老鼠圖案,其程序如圖所示。通過Image讀入老鼠的圖案,然后將其調(diào)整為合適的大小,然后通過tkinter的Label類來顯示出圖片,并規(guī)定好圖片的擺放位置即可。圖中的其他圖片和Text類也是采用同樣的方式進(jìn)行處理即可,區(qū)別在于Text不需要插入圖片,只需要規(guī)定其Text類的位置和大小即可。
現(xiàn)在我們實(shí)現(xiàn)了界面的展示,那么我們?nèi)绾螌?shí)現(xiàn)去讓界面動(dòng)起來,也就是讓名字滾動(dòng)起來抽獎(jiǎng)呢,我們只需要?jiǎng)?chuàng)建一個(gè)新的線程,并在新的線程里實(shí)現(xiàn)對(duì)于數(shù)據(jù)的動(dòng)態(tài)滾動(dòng)切換,程序如下所示:
我們通過不斷的切換抽獎(jiǎng)按鈕,來實(shí)現(xiàn)新建線程,在新建的線程里,我們通過向界面右側(cè)不斷的插入我們選出來的候選人,然后判斷該等級(jí)下的名額是否已滿,如果名額已滿,則彈出提示對(duì)話框,就想這樣:
關(guān)鍵的線程程序如下:
def rounds(self):
if self.isloop==True: # 判斷是否開始循環(huán)
return
while True:
if self.isloop==False:
self.flag +=1
if self.flag==2:
self.flag=0
if self.target==self.prise and self.name in self.data:
self.btn1['text']=self.name
print(self.btn1['text'])
if len(self.name)==2:
r=self.name[0] + " " + self.name[1]
else:
r=self.name
else:
while self.btn1['text']==self.name:
temp=random.choice(self.data)
if len(temp)==2:
r=temp[0] + " " + temp[1]
else:
r=temp
self.btn1['text']=r
if self.newloop==True:
self.newloop=False
if self.target.size()>=5:
if self.target==self.thirdwinner1:
self.target=self.thirdwinner2
else:
self.btn1['text']="OVER"
tkinter.messagebox.showinfo('提示', "恭喜拉!中獎(jiǎng)名單已產(chǎn)生")
return
self.target.insert(tkinter.END, r.center(5," "))
self.data.remove(r)
self.namelist.delete(1.0, 'end')
self.namelist.insert(tkinter.END, (" ").join(self.data))
return
time.sleep(0.1) # 延時(shí)操作
temp=random.choice(self.data)
if len(temp)==2:
r=temp[0]+" "+temp[1]
else:
r=temp
self.btn1['text']=r
線程程序中,self.target就是我們的目標(biāo)list,我們只需要選出名字,然后在目標(biāo)的list中插入名字即可。
這就實(shí)現(xiàn)了我們讓抽獎(jiǎng)界面動(dòng)起來的目的,那下面我們?nèi)绾螌?shí)現(xiàn)切換不同的獎(jiǎng)品等級(jí)呢,答案就在我們的圖標(biāo)設(shè)置上,我們一共有三種圖標(biāo)設(shè)置,分別對(duì)應(yīng)一二三等獎(jiǎng),一等獎(jiǎng)是手機(jī),二等獎(jiǎng)是掃地的機(jī)器人,三等獎(jiǎng)是手環(huán)。
我們只需要點(diǎn)擊不同的圖標(biāo)設(shè)置,便會(huì)切換不同的獎(jiǎng)品抽取,也就是切換我們的self.target所對(duì)應(yīng)的list。
每次抽獎(jiǎng)都不中,不如給自己留一個(gè)暗門,如果想讓某一個(gè)人或者自己能中獎(jiǎng),我們只要加一行代碼即可。
思路其實(shí)很簡(jiǎn)單,就是我們?cè)谠O(shè)計(jì)抽獎(jiǎng)?lì)惖牡胤剑覀儌魅胍粋€(gè)參數(shù)寫好的名字,如果名單在namelist里面,那么這個(gè)人必中。比如我把中獎(jiǎng)名單里面改成我自己。
整個(gè)抽獎(jiǎng)程序做的有點(diǎn)粗糙,沒有細(xì)細(xì)打磨。用Python自帶的tk做的,其實(shí)還有很多地方可以改善和優(yōu)化,有興趣的小伙伴可以拿源碼自己改改,寫寫代碼也是很有趣的。
后面我們會(huì)開發(fā)一個(gè)Flask版本的抽獎(jiǎng),網(wǎng)頁抽獎(jiǎng)更酷!
抽獎(jiǎng)之星,極品晚會(huì)抽獎(jiǎng)軟件,大氣美觀,功能全面,請(qǐng)安裝試用或咨詢客服。支持作弊內(nèi)定、指定中獎(jiǎng)人、名單分組、中獎(jiǎng)幾率。(www.wsgsoft.com/plds/)
1. 每個(gè)答題環(huán)節(jié)對(duì)應(yīng)一個(gè)獎(jiǎng)項(xiàng)。
2. 分組的概念: 就是每一個(gè)答題環(huán)節(jié)對(duì)應(yīng)一個(gè)題庫,多個(gè)答題環(huán)節(jié)對(duì)應(yīng)多個(gè)題庫,即每個(gè)獎(jiǎng)項(xiàng)對(duì)應(yīng)一個(gè)分組。
3. 分組的實(shí)現(xiàn): 通過黑白名單功能,為不同獎(jiǎng)項(xiàng)指定范圍,為不同獎(jiǎng)項(xiàng)添加白名單,并選中{只滾動(dòng)白名單}。
4. 名單對(duì)應(yīng)的就是題目,可以是文字名單,如果嫌文字太長,可把文字轉(zhuǎn)成圖片,用圖片抽獎(jiǎng)模式。