您好,登錄后才能下訂單哦!
小編這次要給大家分享的是python如何實現抽獎小程序,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
設計一個抽獎服務
背景:有x個獎品,要求在y天內發完;每天至少發放z個獎品;每天抽獎人數不定,事先會假設一個范圍是m-n
舉例:有100個獎品,要求5天內發完,每天至少發15個獎品;每天來抽獎的人估計是 2000-3000 人,希望獎品能夠比較均勻,但隨機的抽取出來。
接口要求:服務監聽一個端口,測試程序不斷連接,發送一個數字代表是第幾天,比如第1-2000個請求發送1(模擬第一天來了2000人),第2001到5000請求發送2(模擬第二天來了3000人)... 服務返回 0 or 1 表示是否抽到獎品
client.py:設置初始化參數,模擬用戶向server端發送數據
# -*- coding: utf-8 -*- import socket import random address = ('127.0.0.1', 31500) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) x = int(input("獎品個數x:")) y = int(input("發放天數y:")) z = int(input("每天至少發放獎品個數:")) m = int(input("最少人數m:")) n = int(input("最多人數n:")) data = '{"x":'+str(x)+',"y":+'+str(y)+',"z":'+str(z)+',"m":'+str(m)+',"n":'+str(n)+'}' s.sendto(data.encode('utf-8'), address) for day in range(y): num = random.randint(m, n) print("第",day+1,"天人數為",num) k=0 for k in range(num): s.sendto(str(day+1).encode('utf-8'), address) s.close()
server.py:服務端接收初始數據和每個用戶發送的數據
# -*- coding: utf-8 -*- import socket import lottery address = ('127.0.0.1', 31500) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(address) list=[] data, addr = s.recvfrom(2048) data = data.decode('utf-8') print ("received:", data, "from", addr) dic=eval(data) x=dic['x'] y=dic['y'] z=dic['z'] m=dic['m'] n=dic['n'] k=0 preday = 1 while True: k += 1 day, addr = s.recvfrom(2048) if not day: print ("client has exist") break if preday != day: list.append(k-1) preday = day day = int(day.decode('utf-8')) x -= lottery.check(x,y,z,m,n,k,day,list) s.close()
lottery.py:抽獎程序算法
#Filename:lottery.py def check(x,y,z,m,n,k,day,list): #估計到來當天的人數和獎品的個數 if day == 1 or day == y: e_x = z e_people = n elif day == y: e_x = x e_people = n else: e_x = x/(y+1-day) e_people = sum(list)/len(list) #中獎間隔 length = int(e_people/e_x) lucky = 0 if x>0 and k%length == 0 : #print(x,"第",k,"個中獎") lucky = 1 print("第",k,"個--第",day,"天--是否中獎--",lucky) return lucky
看完這篇關于python如何實現抽獎小程序的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。