欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python可設(shè)置抽獎(jiǎng)?wù)邫?quán)重的抽獎(jiǎng)腳本代碼

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

功能描述

抽獎(jiǎng)系統(tǒng)包含如下特點(diǎn):
1、可給不同抽獎(jiǎng)?wù)咴O(shè)置不同的權(quán)重
2、先從價(jià)值高的獎(jiǎng)品開(kāi)始抽
3、已經(jīng)中獎(jiǎng)的人,不再參與后續(xù)的抽獎(jiǎng)

代碼

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

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

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

# 抽獎(jiǎng)工具
# -*- 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('【{}】的中獎(jiǎng)用戶編號(hào)為:{}'.format(prize, luck_number))
        full_number = [i for i in full_number if i != luck_number]

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

運(yùn)行結(jié)果如下:

【汽車】的中獎(jiǎng)用戶編號(hào)為:5
【電腦】的中獎(jiǎng)用戶編號(hào)為:1
【杯子】的中獎(jiǎng)用戶編號(hào)為:3
【香蕉】的中獎(jiǎng)用戶編號(hào)為:2
【5毛紅包】的中獎(jiǎng)用戶編號(hào)為:6

驗(yàn)證

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

# 抽獎(jiǎng)工具
# -*- 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('【{}】的各用戶中獎(jiǎng)次數(shù):{}'.format(prize, Counter(number)))


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

結(jié)果為:

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

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

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

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

到此這篇關(guān)于Python可設(shè)置抽獎(jiǎng)?wù)邫?quán)重的抽獎(jiǎng)腳本的文章就介紹到這了,更多相關(guān)Python抽獎(jiǎng)腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django修改端口號(hào)與地址的三種方式

    Django修改端口號(hào)與地址的三種方式

    Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成,下面這篇文章主要給大家介紹了關(guān)于Django修改端口號(hào)與地址的三種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python中進(jìn)程和線程的區(qū)別詳解

    Python中進(jìn)程和線程的區(qū)別詳解

    這篇文章主要介紹了Python中進(jìn)程和線程的區(qū)別詳解,需要的朋友可以參考下
    2017-10-10
  • python3字符串輸出常見(jiàn)面試題總結(jié)

    python3字符串輸出常見(jiàn)面試題總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python3字符串輸出常見(jiàn)面試題總結(jié)內(nèi)容,有需要的朋友們可以參考下。
    2020-12-12
  • Python如何給你的程序做性能測(cè)試

    Python如何給你的程序做性能測(cè)試

    這篇文章主要介紹了Python如何給你的程序做性能測(cè)試,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    這篇文章主要為大家介紹了python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • apache部署python程序出現(xiàn)503錯(cuò)誤的解決方法

    apache部署python程序出現(xiàn)503錯(cuò)誤的解決方法

    這篇文章主要給大家介紹了關(guān)于在apahce部署python程序出現(xiàn)503錯(cuò)誤的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • python獲取交互式ssh shell的方法

    python獲取交互式ssh shell的方法

    今天小編就為大家分享一篇python獲取交互式ssh shell的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • pycharm社區(qū)版安裝node.js插件運(yùn)行js代碼方法

    pycharm社區(qū)版安裝node.js插件運(yùn)行js代碼方法

    PyCharm可以說(shuō)是當(dāng)今最流行的一款Python IDE了,下面這篇文章主要給大家介紹了關(guān)于pycharm社區(qū)版安裝node.js插件運(yùn)行js代碼的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 使用python制作一個(gè)解壓縮軟件

    使用python制作一個(gè)解壓縮軟件

    這篇文章主要介紹了python制作一個(gè)解壓縮軟件的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解Bagging算法的原理及Python實(shí)現(xiàn)

    詳解Bagging算法的原理及Python實(shí)現(xiàn)

    Bagging算法(Bootstrap aggregating,引導(dǎo)聚集算法),又稱裝袋算法,是機(jī)器學(xué)習(xí)領(lǐng)域的一種團(tuán)體學(xué)習(xí)算法。最初由Leo Breiman于1996年提出。Bagging算法可與其他分類、回歸算法結(jié)合,提高其準(zhǔn)確率、穩(wěn)定性的同時(shí),通過(guò)降低結(jié)果的方差,避免過(guò)擬合的發(fā)生
    2021-06-06

最新評(píng)論