最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python可設置抽獎者權重的抽獎腳本代碼

 更新時間:2022年11月28日 14:39:06   作者:Vincent__Lai  
這篇文章主要介紹了Python可設置抽獎者權重的抽獎腳本,抽獎系統(tǒng)包含可給不同抽獎者設置不同的權重,先從價值高的獎品開始抽,已經(jīng)中獎的人,不再參與后續(xù)的抽獎,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

功能描述

抽獎系統(tǒng)包含如下特點:
1、可給不同抽獎者設置不同的權重
2、先從價值高的獎品開始抽
3、已經(jīng)中獎的人,不再參與后續(xù)的抽獎

代碼

第一個數(shù)字表示某一個用戶的中獎編號,第二個數(shù)字表示該用戶的中獎權重。
名單.txt內(nèi)容為:

1:20
2:10
3:8
4:6
5:6
6:3
7:2
8:1

main.py內(nèi)容為:

# 抽獎工具
# -*- coding:utf-8 -*-
from random import choice

def read_name_list(txt_name):
    with open(txt_name, 'r', encoding='utf-8') as f:
        txt_list = f.readlines()
    for i in range(len(txt_list)):
        txt_list[i] = txt_list[i].rstrip('\n')
    return txt_list

def lottery_draw(name_list, prize_box):
    full_number = []
    for name in name_list:
        number, weight = name.split(':')
        full_number += [number] * int(weight)
    for prize in prize_box:
        luck_number = choice(full_number)
        print('【{}】的中獎用戶編號為:{}'.format(prize, luck_number))
        full_number = [i for i in full_number if i != luck_number]

if __name__ == '__main__':
    # 導入名單
    name_list = read_name_list('名單.txt')
    # 設置獎項
    prize_box = ['汽車', '電腦', '杯子', '香蕉', '5毛紅包']
    # 抽獎
    lottery_draw(name_list, prize_box)

運行結(jié)果如下:

【汽車】的中獎用戶編號為:5
【電腦】的中獎用戶編號為:1
【杯子】的中獎用戶編號為:3
【香蕉】的中獎用戶編號為:2
【5毛紅包】的中獎用戶編號為:6

驗證

加一個統(tǒng)計函數(shù)statistics、修改下lottery_draw的輸入輸出,然后抽獎1000000次,看看結(jié)果是否和我們設想的一樣不同用戶中獎權重不同。
main.py完整代碼如下:

# 抽獎工具
# -*- coding:utf-8 -*-
from random import choice
from collections import Counter

def read_name_list(txt_name):
    with open(txt_name, 'r', encoding='utf-8') as f:
        txt_list = f.readlines()
    for i in range(len(txt_list)):
        txt_list[i] = txt_list[i].rstrip('\n')
    return txt_list

def lottery_draw(name_list, prize_box, res):
    full_number = []
    for name in name_list:
        number, weight = name.split(':')
        full_number += [number] * int(weight)
    for prize in prize_box:
        luck_number = choice(full_number)
        full_number = [i for i in full_number if i != luck_number]
        res.append(prize+':'+luck_number)
    return res

def statistics(res):
    prize_cal = {'汽車':[], '電腦':[], '杯子':[], '香蕉':[], '5毛紅包':[]}
    for i in res:
        prize, luck_number = i.split(':')
        prize_cal[prize].append(luck_number)
    for prize, number in prize_cal.items():
        print('【{}】的各用戶中獎次數(shù):{}'.format(prize, Counter(number)))


if __name__ == '__main__':
    # 導入名單
    name_list = read_name_list('名單.txt')
    # 設置獎項
    prize_box = ['汽車', '電腦', '杯子', '香蕉', '5毛紅包']
    # 驗證抽獎系統(tǒng)
    res = []
    for i in range(1000000):
        # 抽獎
        res = lottery_draw(name_list, prize_box, res)
    # 統(tǒng)計數(shù)據(jù)
    statistics(res)

結(jié)果為:

【汽車】的各用戶中獎次數(shù):Counter({'1': 356978, '2': 178116, '3': 143076, '5': 107189, '4': 107141, '6': 53638, '7': 35943, '8': 17919})
【電腦】的各用戶中獎次數(shù):Counter({'1': 262385, '2': 192168, '3': 160879, '5': 125696, '4': 125308, '6': 65905, '7': 44822, '8': 22837})
【杯子】的各用戶中獎次數(shù):Counter({'2': 189568, '1': 180131, '3': 173171, '4': 144363, '5': 143846, '6': 82818, '7': 56424, '8': 29679})
【香蕉】的各用戶中獎次數(shù):Counter({'3': 173540, '2': 170010, '4': 162484, '5': 162387, '1': 111469, '6': 104839, '7': 75181, '8': 40090})
【5毛紅包】的各用戶中獎次數(shù):Counter({'5': 173954, '4': 173772, '3': 157203, '6': 139308, '2': 136231, '7': 103678, '1': 58633, '8': 57221})

可以看出以下結(jié)論:

  • 通過第一行可以發(fā)現(xiàn),數(shù)字之間出現(xiàn)的比例是和我們設置的權重是一樣。例如1出現(xiàn)次數(shù)約等于2的兩倍、45的出現(xiàn)次數(shù)相近且均為6的兩倍。說明中獎數(shù)字出現(xiàn)的概率和預設權重是一樣的。
  • 通過后面的行可以發(fā)現(xiàn),對于權重大的數(shù)字(例如1),即使第一個獎品沒中獎,大概率會在前幾個獎品中獎,所以最后一個獎品里1出現(xiàn)的次數(shù)很少,因為1基本都是前面出現(xiàn)了。所以權重大的數(shù)字優(yōu)先中價值高的獎品,和設想的一樣。
  • 對于權重小的數(shù)字,例如7、8,不管是哪一個獎品,出現(xiàn)次數(shù)都是最小的,說明這些數(shù)字中獎概率低。原因也很簡單,因為中獎數(shù)字的個數(shù)是小于獎品數(shù)量的,所以權重小的數(shù)字中獎概率低,很可能5個獎品里都抽不到它們。如果設置為8個獎品的話,那么末尾的獎品78出現(xiàn)次數(shù)就會很高,因為此時中獎數(shù)字的個數(shù)等于獎品數(shù)量,所有數(shù)字都100%中獎,那么權重小的數(shù)字基本上都是中價值低的小獎。例如下面是8個獎品時的實驗結(jié)果:

【汽車】的各用戶中獎次數(shù):Counter({'1': 357293, '2': 178396, '3': 142964, '4': 106969, '5': 106885, '6': 53787, '7': 35860, '8': 17846})
【電腦】的各用戶中獎次數(shù):Counter({'1': 262439, '2': 191894, '3': 160317, '4': 125823, '5': 125372, '6': 66868, '7': 44747, '8': 22540})
【杯子】的各用戶中獎次數(shù):Counter({'2': 189590, '1': 179792, '3': 172228, '4': 144894, '5': 144557, '6': 82114, '7': 57173, '8': 29652})
【香蕉】的各用戶中獎次數(shù):Counter({'3': 173294, '2': 170689, '4': 162112, '5': 162085, '1': 111105, '6': 105137, '7': 75643, '8': 39935})
【5毛紅包】的各用戶中獎次數(shù):Counter({'5': 174098, '4': 173631, '3': 158224, '6': 138613, '2': 135805, '7': 103940, '1': 58826, '8': 56863})
【空氣】的各用戶中獎次數(shù):Counter({'6': 201214, '7': 162491, '4': 156446, '5': 156151, '3': 117426, '8': 95013, '2': 87502, '1': 23757})
【垃圾】的各用戶中獎次數(shù):Counter({'7': 282600, '6': 225701, '8': 187694, '5': 99963, '4': 99165, '3': 60536, '2': 38211, '1': 6130})
【一巴掌】的各用戶中獎次數(shù):Counter({'8': 550457, '7': 237546, '6': 126566, '4': 30960, '5': 30889, '3': 15011, '2': 7913, '1': 658})

到此這篇關于Python可設置抽獎者權重的抽獎腳本的文章就介紹到這了,更多相關Python抽獎腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

桦甸市| 工布江达县| 环江| 南漳县| 普陀区| 富阳市| 翼城县| 达日县| 万源市| 嘉峪关市| 惠水县| 万荣县| 泸溪县| 衡南县| 涞水县| 齐齐哈尔市| 兰州市| 苏尼特右旗| 汪清县| 大姚县| 清涧县| 鄂伦春自治旗| 莱芜市| 莱阳市| 嵩明县| 青岛市| 凭祥市| 汕尾市| 黄龙县| 霸州市| 习水县| 龙海市| 新津县| 武山县| 中山市| 西贡区| 日喀则市| 左云县| 绥中县| 台安县| 启东市|