如何用Python做抽獎程式

閱讀時間約 1 分鐘

首先這是我們的抽獎名單(欄位名稱、欄位數量與內容不限,可自由調整增加)

raw-image


這是我們的獎品清單(欄位名稱需固定,內容可自由調整)

raw-image

抽獎程式如下

import pandas as pd
import random

#匯入抽獎名單
name_list = pd.read_excel("抽獎名單.xlsx")

#匯入獎品清單
prize_list = pd.read_excel("獎品清單.xlsx")

import pandas as pd
import random

#------------------------------------------------------------

#匯入抽獎名單
name_list = pd.read_excel("抽獎名單.xlsx")

#匯入獎品清單
prize_list = pd.read_excel("獎品清單.xlsx")

#------------------------------------------------------------

#是否可在【整場抽獎】中重複中獎(若為False則為不可重複中獎,True為可以重複中獎)
reap_winning_in_game = False

#是否可在同一【獎項類別】內重複中獎(若為False則為不可重複中獎,True為可以重複中獎)
reap_winning_in_prize_class = False

#是否可在同一【獎項名稱】內重複中獎(若為False則為不可重複中獎,True為可以重複中獎)
reap_winning_in_prize_name = False

#------------------------------------------------------------

#【整場抽獎】中獎人_list
winner_sheet_all_list = []

#【整場抽獎】中獎序號_list
winner_list_in_game = []

#【整場抽獎】中獎人_list
winner_sheet_all_list = []

#計算抽獎名單之人數
name_list_count = len(name_list)

#在每個【獎項類別】內:
for prize_class in prize_list["獎項類別"].unique():

#在該【獎項類別】中:
prize_list_ing = prize_list[prize_list["獎項類別"] == prize_class]

#在該【獎項類別】中之中獎序號_list
winner_list_in_prize_class = []

#在該【獎項類別】中,的每個獎品名稱內:
for prize_name,num_of_prizes in zip(prize_list_ing["獎項名稱"],prize_list_ing["獎項數量"]):

#在該【獎項名稱】中之中獎序號_list
winner_list_in_prize_name = []

#如果不可在【整場抽獎】內重複中獎:
if reap_winning_in_game == False:
#持續做抽獎迴圈,直到該【獎項名稱】中獎序號_list內數量=該獎品數量:
while len(winner_list_in_prize_name) < num_of_prizes:
#隨機抽出中獎序號
num = random.randint(0,name_list_count-1)
#如果抽出的序號不在【整場抽獎】中獎序號_list中,才將該序號放入該【獎項名稱】中獎序號_list
if (num not in winner_list_in_game):
winner_list_in_prize_name.append(num)
winner_list_in_prize_class.append(num)
winner_list_in_game.append(num)

#如果可以在【整場抽獎】內重複:
elif reap_winning_in_game == True:

#如果不可在同一【獎項名稱】內重複 且 不可在同一【獎項類別】內重複:
if (reap_winning_in_prize_name == False and reap_winning_in_prize_class == False):
while len(winner_list_in_prize_name) < num_of_prizes:
num = random.randint(0,name_list_count-1)
if (num not in winner_list_in_prize_name and num not in winner_list_in_prize_class):
winner_list_in_prize_name.append(num)
winner_list_in_prize_class.append(num)
winner_list_in_game.append(num)

#如果不可在同一【獎項名稱】內重複 但 可以在同一【獎項類別】內重複:
elif (reap_winning_in_prize_name == False and reap_winning_in_prize_class == True):
while len(winner_list_in_prize_name) < num_of_prizes:
num = random.randint(0,name_list_count-1)
if num not in winner_list_in_prize_name:
winner_list_in_prize_name.append(num)
winner_list_in_prize_class.append(num)
winner_list_in_game.append(num)

#如果可以在同一【獎項名稱】內重複 但 不可在同一【獎項類別】內重複:
elif (reap_winning_in_prize_name == True and reap_winning_in_prize_class == False):
while len(winner_list_in_prize_name) < num_of_prizes:
num = random.randint(0,name_list_count-1)
#如果抽出的序號不在【獎項名稱】中獎序號_list中,將該序號放入【獎項名稱】中獎序號_list
if num not in winner_list_in_prize_class:
winner_list_in_prize_name.append(num)
winner_list_in_prize_class.append(num)
winner_list_in_game.append(num)
#如果抽出的序號不在【獎項類別】中獎序號_list中,但已經存在在【獎項名稱】中獎序號名單中,將該序號放入【獎項名稱】中獎序號_list
elif (num in winner_list_in_prize_class and num in winner_list_in_prize_name):
winner_list_in_prize_name.append(num)
winner_list_in_prize_class.append(num)
winner_list_in_game.append(num)

#如果可以在同一【獎項名稱】內重複 且 可以在同一獎項類別內重複:
elif (reap_winning_in_prize_name == True and reap_winning_in_prize_class == True):
while len(winner_list_in_prize_name) < num_of_prizes:
num = random.randint(0,name_list_count-1)
winner_list_in_prize_name.append(num)
winner_list_in_prize_class.append(num)
winner_list_in_game.append(num)

#建立一個list,將抽獎名單中,所有在該【獎項名稱】中獎序號_list上的人的明細資料篩選出來,並放入此list
winner_sheet_list = []
for i in winner_list_in_prize_name:
globals()[f"winner_sheet_list_{i}"] = name_list.iloc[i:i+1,:]
winner_sheet_list.append(globals()[f"winner_sheet_list_{i}"])

#將該list上之中獎人明細資料,聚合成一張該【獎項名稱】中獎人清單
globals()[f"winner_sheet_{prize_name}"] = pd.concat(winner_sheet_list,axis=0)

#將該【獎項名稱】中獎人清單加上獎品類別、獎項名稱欄位
globals()[f"winner_sheet_{prize_name}"]["獎項類別"] = prize_class
globals()[f"winner_sheet_{prize_name}"]["獎項名稱"] = prize_name

#將該【獎項名稱】中獎人清單,放入【整場抽獎】中獎人_list
winner_sheet_all_list.append(globals()[f"winner_sheet_{prize_name}"])

#將【整場抽獎】中獎人_list的所有【獎項名稱】中獎人清單,合併為全體中獎人清單
winner_sheet_all = pd.concat(winner_sheet_all_list,axis=0)

#------------------------------------------------------------

#匯出中獎名單
winner_sheet_all.to_excel("中獎名單.xlsx")

中獎名單結果如下:

raw-image


4會員
37內容數
我是果農,這裡有我的人資職涯經驗分享,與我菜鳥般的Python資料分析筆記,還有一些讀書心得,希望對大家有幫助。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
上次有分享一個全自動的抽獎系統,的確超級方便,但是要做出全自動抽獎是有一定的難度,需要搭配不少函數與VBA的觀念。 EXCEL全自動抽獎系統-公司尾牙、各大活動必備 全自動的抽獎系統難度較高不知該從哪裡下手,那今天就來分享一個超級簡易版的抽籤系統,看完影片或文章不用1分鐘就能自己做出來了
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
Python 提供了一個功能豐富的標準函式庫,其中 random 專門用於生成隨機數。本文將介紹 random 的基本介紹,以及函式應用。
Thumbnail
上次有分享一個全自動的抽獎系統,的確超級方便,但是要做出全自動抽獎是有一定的難度,需要搭配不少函數與VBA的觀念。 EXCEL全自動抽獎系統-公司尾牙、各大活動必備 全自動的抽獎系統難度較高不知該從哪裡下手,那今天就來分享一個超級簡易版的抽籤系統,看完影片或文章不用1分鐘就能自己做出來了