经过这几天的深思熟虑我和小明同学将这次作业基本的完整了,可能界面略丑陋,但是基本功能均已实现。我们的服务器端采用python编写,因为服务器端是这次作业的难点,而python中有一个叫做web.py的轻量级框架使用效果极好,并且不用编写配置文件,其对URL的处理很简练。对于客户端我采用了python编写小明选择了ruby,但是由于我的客户端有一些bug需要再交互模式下使用,所以我们将它抛弃而选择使用小明的客户端。由于代码编写的我身心疲惫,我就简略说一下我们本次编写过程中遇到的困难点:
  
      1.第一次使用web.py 花费不少时间来学习
          2.客户端并发较多,导致部分客户端崩溃,由于这个不是这次的重点,并没有对其进行处理。
                 3.不熟悉写网页,图表部分使用canvas写的,调试很麻烦
  
                 4.咱能换个博客吗 ,这个博客没有自动保存啊 我之前写的都没了。。。。写短点算了
  
这是运行结果的截图部分

然后是我们的代码部分

import web
import thread
import time
import data
import string
from web import form render=web.template.render('templates/')
urls=(
'/','index',
'/attend','attend',
'/register','register'
) registerform=form.Form(
form.Textbox("id",form.notnull)
) attendform=form.Form(
form.Textbox("id",form.notnull),
form.Textbox("num",form.notnull)
) def index_page():
for i in list(data.db.select('users')):
print i['id']
time.sleep(10)
for i in list(data.db.select('users')):
data.users[i['id']]=0.0
while True:
start=time.time()
data.thisturn={}
data.num=0
data.total=0
time.sleep(0.9)
if data.num!=0:
average=data.total/data.num*0.618
print average
data.thisturn['winner']=score(data.thisturn,data.users,average)
data.winner=data.thisturn['winner']
data.winnernumber=data.thisturn[data.winner]
data.thisturn['result']=average
data.goldpoint.append(average)
t=1-(time.time()-start)
time.sleep(t)
print data.num
data.turn+=1 def score(thisturn,users,average):
value_max=0
value_min=100
for i in thisturn:
a=abs(thisturn[i]-average)
if a>value_max:
value_max=a
max_num=i
if a<value_min:
value_min=a
winner=i
for i in list(data.db.select('users')):
if i['id'] not in thisturn and i['id']!=winner:
users[i['id']]-=5
elif i['id']==winner:
users[i['id']]+=10
elif i['id']==max_num:
users[i['id']]-=1
return winner class index:
def GET(self):
return render.index(data.turn,data.winnernumber,data.users,data.goldpoint) class attend:
def GET(self):
form=attendform()
return render.attend(form)
def POST(self):
form=attendform()
if not form.validates():
return render.attend(form)
else:
i=web.input()
i.num=string.atof(i.num)
data.num+=1
data.total+=i.num
data.thisturn[i.id]=i.num
return 0 class register:
def GET(self):
form=registerform()
return render.register(form)
def POST(self):
form=registerform()
if not form.validates():
return render.register(form)
else:
i=web.input()
data.db.insert('users',id=i.id,pd=0)
data.users[i.id]=0.0
return 0 if __name__=="__main__":
thread.start_new_thread(index_page,())
app=web.application(urls,globals())
app.run()
$def with(turn,number,users,goldpoint)
<html>
<head>
<meta http-equiv="refresh" content="1">
<script type="text/javascript">
function draw(){
var canvas=document.getElementById("cv");
var a=$goldpoint
if(canvas.getContext){
var ctx=canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(0,a[0]);
for(i=1;i<=$turn-1;i++){
ctx.lineTo(10*i,a[i]);
}
ctx.stroke();
ctx.endPath();
}
}
</script>
</head>
<body onload="draw();">
<p>现在是第$turn轮</p>
<p>上一轮获胜数字$number</p>
<p>选手得分</p>
<table border="1">
<tr>
$for i in users:
<td><b> $i </b></td>
</tr>
<tr>
$for i in users:
<td><b> $users[i] </b></td>
</tr>
</table>
<canvas id="cv" width="1500" height="150">
</canvas>
</body>
</html>

homework-05的更多相关文章

  1. Machine Learning, Homework 9, Neural Nets

    Machine Learning, Homework 9, Neural NetsApril 15, 2019ContentsBoston Housing with a Single Layer an ...

  2. STAT UN2102 Homework

    STAT UN2102 Homework 4 [100 pts]Due 11:59pm Monday, May 6th on CanvasYour homework should be submitt ...

  3. Final阶段第1周/共1周 Scrum立会报告+燃尽图 05

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484] 版本控制:https://git.coding.net/liuyy08 ...

  4. 20181009-6 选题 Scrum立会报告+燃尽图 05

    Scrum立会报告+燃尽图(05)选题 此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2195 一.小组介绍 组长:刘莹莹 ...

  5. 20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 05

    此作业要求参见[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2413] 版本控制地址    [https://git.coding.ne ...

  6. 20181113-7 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 05

    作业要求https://edu.cnblogs.com/campus/nenu/2018fall/homework/2387 版本控制https://git.coding.net/lglr2018/F ...

  7. 20181016-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 05

    作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2288 Scrum master:王硕 一.小组介绍 组长:王一可 组员:范 ...

  8. C语言|博客作业05

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9825 我在这个课程的 ...

  9. day38-IO流05

    JavaIO流05 4.常用的类04 4.4节点流和处理流03 4.4.8打印流-PrintStream和PrintWriter 打印流只有输出流,没有输入流 1.简单介绍及应用 PrintStrea ...

  10. Java学习笔记(05)

    目录: static的用法 主函数的定义 增强for的循环 单例设计模式 封装 一.Static的用法 1.对象的内存分析 对象的引用变量是存在于栈区,而在堆区开辟了一块内存空间,调用对象给成员变量赋 ...

随机推荐

  1. C++类型转化

    dynamic_cast在多继承中可以判断无关类之间是否可以转换,例如基类B1和基类B2之间,static_cast可以在隐式转化及其逆转换中进行,但不允许无关类型之间的转换.,dynamic_cas ...

  2. OpenRisc-52-run openrisc&orpmon on ml501 board

    引言 之前关于openrisc的内容,几乎都是基于opencores官方的ordb2a那个开发板的,但是,实际情况是有那个板子的人不是很多,所以目前我在做一个与之类似的板子,并且很快就会跟大家见面,这 ...

  3. MySQL5.7表空间加密

    MySQL5.7开始支持表空间加密了,增强了MySQL的数据文件的安全性,这是一个很不错的一个功能,这个特性默认是没有启用的,要使用这个功能要安装插件keyring_file. 下面就来看看怎么安装, ...

  4. 带你走进EJB--那些跟EJB容器相关的那些Java概念

    最近在对EJB的相关内容进行总结,在总结的过程中发现对容器的概念并不是很理解,因为EJB本身就是一个容器,但是容器到底是用来做什么的?它跟我们之前所了解的组件,框架,包,类等都有什么关系?接下来主要是 ...

  5. bzoj1043

    每次做计算几何题都要做好久 考虑每个圆对答案的贡献,也就是每个圆被后面圆覆盖还有多少 可以把覆盖当成盖住一段弧度,看最后有多少没被覆盖 这就相当于线段覆盖问题了, 推推公式,算极角然后排序即可 md, ...

  6. iOS开发:视图生命周期

    iOS应用的视图状态分为以下几种 在viewcontroller的父类UIViewController中可以看到如下代码,通过重写不同的方法对操作视图渲染. @available(iOS 2.0, * ...

  7. MySql和Hibernate中关于cascade的用法

    数据库里的cascade的用法,Mysql和Hibernate里面是不相同. 在数据库里,进行增加.修改.删除记录的时候,经常会涉及到父子关系的表. 例如:有省份表和城市表,其中城市表有一个外键pro ...

  8. Java [Leetcode 111]Minimum Depth of Binary Tree

    题目描述: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along th ...

  9. BUFFER CACHE之主要的等待事件

    原因:资源紧张,等待其释放. 原因的原因:1. lgwr和DBWn进程写太慢:2. Buffer和latch不可用 原因的原因的原因:全表扫描.library cache latches数太多等. 视 ...

  10. Solr部署如何启动

    我刚接触solr,我要怎么启动,这是群里的朋友问得比较多的问题, solr最新版本下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 1.准 ...