亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現抽獎系統

發布時間:2023-05-10 16:05:15 來源:億速云 閱讀:113 作者:iii 欄目:開發技術

今天小編給大家分享一下Python怎么實現抽獎系統的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    一、文章主題

    在看到相關的抽獎詐騙報道,有的人卻不明白是怎么回事。為了預防被抽獎詐騙,因此,我們通過一些簡單的例子來說一說,抽獎更深層的邏輯,讓大家直觀的看到抽獎背后隱藏的東西,防止上當受騙。

    二、抽獎設計思路

    首先,先來實現一個簡單的抽獎邏輯,我們需要確定每個獎品的概率,并根據概率進行抽取。

    第一步:需求

    有獎品列表。每一個獎品都有對應的概率。用戶抽獎獲得對應概率商品。

    第二步:建立獎品列表

    根據上面的要求,我們建立對應的獎品表,概率我們選用1-100的整數,當然也可以選擇0-1。

    # 獎品列表和對應的概率,和為100
    prizes = {"一等獎": 10,"二等獎": 20,"三等獎": 30,"參與獎": 40 }

    第三步:概率實現

    這就是一個基礎的抽獎邏輯,代碼實現難點主要是概率,如何去實現概率,能獲得抽中的獎品。

    關于概率我們需要使用到random模塊,也就是我們需要使用到隨機數。這里我這里有兩種方式可供選擇。

    第一種:通過區間實現

    抽獎概率選用區間的方式實現,將抽獎的概率分成若干個區間,每個區間對應一個獎品,然后根據隨機數的范圍來確定中獎的區間。例如,我們可以將抽獎的概率分成以下幾個區間:

    • - 區間1:0%~20%,對應獎品A

    • - 區間2:20%~50%,對應獎品B

    • - 區間3:50%~80%,對應獎品C

    • - 區間4:80%~100%,對應獎品D

    當用戶抽獎時,我們可以生成一個0~100之間的隨機數,然后根據隨機數所在的區間來確定中獎的獎品。例如,如果生成的隨機數是35,那么就會中獎區間2,對應獎品B。

    優點:這種方式實現抽獎概率的好處是可以靈活地控制各個獎品的中獎概率,同時也可以根據實際情況進行調整。

    缺點:各個獎品的中獎概率之和必須等于100%,否則會導致抽獎結果不準確。

    import random
     
    # 獎品列表和對應的概率
    prizes = {"一等獎":10,"二等獎":20,"三等獎":30,"參與獎":40}
    #我們可以看做:
    # 一等獎:(0,10]
    # 二等獎:(10,30]
    # 三等獎:(30,60]
    # 參與獎:(60,100]
     
    # 抽獎函數
    def lottery():
        # 生成一個1~100之間的隨機數
        lucky_number = random.randint(0,100)
        # 初始化區間值和獎品名稱
        prob_sum_start = 0
        prob_sum_end = 0
        prize_name = None
     
        # 遍歷獎品列表
        for name, prob in prizes.items():
            # 累加后一個區間值
            prob_sum_end += prob
            # 如果隨機數在計算區間內,則中獎
            if prob_sum_start<lucky_number <= prob_sum_end:
                prize_name = name
                break
    # 累加前一個區間值
            prob_sum_start = prob
        #返回隨機值和中獎產品
        return lucky_number,prize_name
    第二種:通過獎品概率累加實現

    我們可以通過概率累加的方式來實現抽獎,首先生成一個1到100之間的隨機數,表示本次抽獎的結果。

    然后按照獎品的概率依次累加,直到累加的結果大于等于隨機數為止。

    最后停止累加的獎品概率即為本次抽中的獎品。

    例如,如果隨機數為50,則按照概率累加的方式,可以得到以下結果:

    # 獎品列表和對應的概率,和為100
    prizes = {"一等獎": 10,"二等獎": 20,"三等獎": 30,"參與獎": 40 }

    10< 50,不是一等獎;

    10 + 20 = 30 < 50,不是二等獎;

    10 + 20 + 30 = 60 >= 50,是三等獎。

    因此,本次抽中的獎品為三等獎。

    優點:可以靈活地調整獎品的概率,以達到不同的抽獎效果。這種方法也可以應用于多個獎品的情況,只需要按照相應的概率進行累加即可,簡單易懂、實現方便。

    缺點:缺點是需要計算每個獎品的累加概率,如果獎品數量較多,計算量可能較大。

    import random
     
    # 獎品列表和對應的概率
    prizes = {"一等獎": 10, "二等獎": 20, "三等獎": 30, "參與獎": 40}
     
     
    # 抽獎函數
    def lottery():
        # 生成一個1~100之間的隨機數
        lucky_number = random.randint(1, 100)
        print(lucky_number)
        # 初始化概率總和和獎品名稱
        prob_sum = 0
        prize_name = None
     
        # 遍歷獎品列表
        for name, prob in prizes.items():
            # 累加概率總和
            prob_sum += prob
            # 如果隨機數小于等于概率總和,則中獎
            if lucky_number <= prob_sum:
                prize_name = name
                break
        return prize_name

    第四步:增加特殊機制

    在我們參與某些活動,或者某些抽獎之后,總是會被人引誘,被大獎沖昏頭腦,那抽獎機制是什么,我們也不清楚,這可如何解決。前面我們可以讓每一個獎品按照設置的獎品概率進行抽獎,這時,我們需要增加一些特殊機制,這些機制就是被“詐騙”的機制,或者說,被“安排”的機制。

    第一種:想讓誰中獎,就讓誰中獎

    這種方式,主要用在聚會惡搞場合,大家可要注意了,這種就不要線上了,因為你不知道這個抽獎程序是誰寫的。

    針對這種方式,我們需要增加白名單。判斷如果是白名單內的人,那我們就讓他種指定獎品。

    代碼如下:

    import random
     
    # 獎品列表和對應的概率
    prizes = {"一等獎": 10, "二等獎": 20, "三等獎": 30, "參與獎": 40}
    #白名單列表
    whitelist = ["Tom", "Jerry", "Lucy"]
    # 抽獎函數
    def lottery(white_user):
        # 生成一個1~100之間的隨機數
        lucky_number = random.randint(1, 100)
        print(lucky_number)
        # 初始化概率總和和獎品名稱
        prob_sum = 0
        prize_name = None
        
        #判斷在白名單內,中一等獎
        if white_user in whitelist:
            return "恭喜您中一等獎"
            # 遍歷獎品列表
        else:
            for name, prob in prizes.items():
                # 累加概率總和
                prob_sum += prob
                # 如果隨機數小于等于概率總和,則中獎
                if lucky_number <= prob_sum:
                    prize_name = name
                    break
        return prize_name
    第二種:參與了另外一個活動,才可以來抽獎

    這種方式增加了資格的驗證,也可以是,有用戶信息之后,才能參與抽獎,也算是增加了一些安全限制。

    如果用戶參與了另外一個活動,或者是登錄了,才能參與活動,進入活動流程。

    代碼如下:

    import random
     
    # 獎品列表和對應的概率
    prizes = {"一等獎": 10, "二等獎": 20, "三等獎": 30, "參與獎": 40}
    #已參加另外一個活動列表
    active_user = []
     
    #加法活動
    def addition(name):
        active_user.append(name)
        return name+"參加了活動"
     
     
    # 抽獎函數
    def lottery(name):
        # 生成一個1~100之間的隨機數
        lucky_number = random.randint(1, 100)
     
        # 初始化概率總和和獎品名稱
        prob_sum = 0
        prize_name = None
     
        # 判斷在白名單內,中一等獎
        if name not in active_user:
            return "很抱歉,您沒有資格參與活動"
     
        else:
            # 遍歷獎品列表
            for name, prob in prizes.items():
                # 累加概率總和
                prob_sum += prob
                # 如果隨機數小于等于概率總和,則中獎
                if lucky_number <= prob_sum:
                    prize_name = name
                    break
        return prize_name
     
    #測試一下
    print(lottery("Tom"))#如果沒有參與加法活動,來參與,無法抽獎
    print(addition("Tom"))#Tom先來參與加法活動再去參與活動
    print(lottery("Tom"))#參與活動抽獎
    第三種:打死都不讓你中

    這種活動純純就是惡心人而做的,但是所有參加的用戶完全就是不知道,都會以為是自己的運氣差。大獎就在哪里,就是拿不到。

    這都不用概率,直接給你出結果,完全就是他的營銷手段。

    代碼如&hellip;&hellip;不如了,都不需要,直接一個return搞定。

    第四種:概率都是百分比,但是效果不一樣

    這種就需要和我們設置的隨機范圍撤上關系,我們的隨機范圍是1-100,比例為百分比1-100的整數,但是當我們加上小數之后,就不一樣。比如:

    1%和1.00%

    那現在這兩種概率你覺得是一樣的嗎?

    答案肯定是不一樣的,第一個是百分之一,第二個則是萬分之一。因為第一個沒有算小數,第二個還有兩位小數,看似相等,其實已經變了。

    如下圖:這三個箭頭指向,所占比例大概就是80%,20%,當我們數據越多,范圍就會越廣,如果隨機,那數據會更容易落到80%。

    抽獎概率正確性,我們其實可以從概率的統計定義中來看待。

    在一定條件下,重復做n次試驗,nA為n次試驗中事件A發生的次數,如果隨著n逐漸增大,頻率nA/n逐漸穩定在某一數值p附近,則數值p稱為事件A在該條件下發生的概率。

    就是說數值越多,越是能證明概率的正確性。但是,我們抽獎只有一次機會。對于我來說80%肯定比20%更加容易隨機。

    代碼控制:控制隨機值,1-10000。

    第五種:某榮耀-有機率

    有機率估計是某王常用套路了,有機率基本等于沒有。文字游戲算是被玩明白了。當然因為用戶體量比較大,因此,也可能采用第4種方式,萬分之一,或者是百萬分之一。

    第六種:保底機制

    這種機制就是比較明確的,整體意思就是,我已經做好坑你準備了,但是坑了我就收手,讓你看到希望,給你大獎。常見的有抽了多少次,我就給你中什么獎品。

    這里我們設置保底機制為10次必中一等獎。如果前9次都沒有中獎,第10次一定中一等獎。

    代碼如下:

    import random
     
    # 獎品列表和對應的概率
    prizes = {"一等獎": 1, "二等獎": 2, "三等獎": 3, "參與獎": 94}
     
    lottery_num = 0  # 記錄已經抽中的一等獎、二等獎、三等獎的次數
    # 抽獎函數
    def lottery():
        # 生成一個1~100之間的隨機數
        global lottery_num
        lucky_number = random.randint(1, 100)
        print(lucky_number,lottery_num)
        # 初始化概率總和和獎品名稱
        prob_sum = 0
        prize_name = None
     
        # 遍歷獎品列表
        for name, prob in prizes.items():
            # 累加概率總和
            prob_sum += prob
            # 如果隨機數小于等于概率總和,則中獎
            if lucky_number <= prob_sum:
                prize_name = name
                break
        if prize_name=="參與獎":
            lottery_num += 1
            if lottery_num == 10:
                return "恭喜你,中一等獎"
            return prize_name
        else:
            lottery_num=0
            return prize_name
     
    for i in range(10):
        print(lottery())

    以上就是“Python怎么實現抽獎系統”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    溧阳市| 天祝| 独山县| 石嘴山市| 多伦县| 宜兰县| 西乌珠穆沁旗| 洛浦县| 开原市| 芦山县| 连云港市| 建阳市| 班戈县| 清丰县| 惠州市| 育儿| 蓬溪县| 潮安县| 沙湾县| 鄂托克旗| 长武县| 伊宁县| 温泉县| 蒙自县| 西贡区| 丹寨县| 栖霞市| 连城县| 张家川| 青田县| 多伦县| 铜梁县| 海阳市| 兴隆县| 永川市| 长子县| 白河县| 普兰店市| 镇巴县| 芜湖市| 金沙县|