python实现抽奖小程序


Posted in Python onApril 15, 2020

本文实例为大家分享了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实现抽奖小程序

想要学习更多关于抽奖功能的实现,请参考此专题:抽奖功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
Python+django实现文件下载
Jan 17 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
Python饼状图的绘制实例
Jan 15 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
QML实现钟表效果
Jun 02 Python
Python 中 Shutil 模块详情
Nov 11 Python
Python常见数据类型转换操作示例
May 08 #Python
Python数据类型之Number数字操作实例详解
May 08 #Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 #Python
Python数据类型之String字符串实例详解
May 08 #Python
Python数据类型之List列表实例详解
May 08 #Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 #Python
详解Python的三种可变参数
May 08 #Python
You might like
php foreach正序倒序输出示例代码
2014/07/01 PHP
php中Ctype函数用法详解
2014/12/09 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
javascript 实现map集合
2015/04/03 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
python常见排序算法基础教程
2017/04/13 Python
python try 异常处理(史上最全)
2019/03/07 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
寒假思想汇报
2014/01/10 职场文书
安全大检查反思材料
2014/01/31 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
眼镜促销方案
2014/03/15 职场文书
项目合作意向书模板
2014/07/29 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js