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中函数的参数定义和可变参数用法实例分析
Jun 04 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
Python中单、双下划线的区别总结
Dec 01 Python
python list删除元素时要注意的坑点分享
Apr 18 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
Python常用模块函数代码汇总解析
Aug 31 Python
python map比for循环快在哪
Sep 21 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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实现链结人气统计
2006/10/09 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
javascript中length属性的探索
2011/07/31 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
JS实现拼图游戏
2021/01/29 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
Python list与NumPy array 区分详解
2019/11/06 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
社区节水倡议书
2015/04/29 职场文书
公司岗位说明书
2015/10/08 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android