不多不说这是一次神奇的作业,作业一拖再拖,到最后发现。。。。

首先,在一开始的最大字数和问题实现图形界面主要是由我的小伙伴邹同学完成的,所以当我第一次看到说要显示详细运行过程的时候感到很迷茫。

第一感觉,应该写成多线程,然后通过进程间的通信让另外进程来显示运行过程。但是这种情况会产生一个问题,那就是自动运行很难处理。

然后在熊英夫同学的提醒下,觉得可以将所有的过程先存储到一个文件,程序开始运行矩阵生成之后即将程序运行的结果与过程写到该文件中。

但是这还是会有一个问题,那就是数据以什么形式存储呢?因为时间紧迫,所以这部分我就没有再自己设计结构,直接采用了网络上常用的json格式。

初次接触到这个格式是在大二结束的时候做关于数据挖掘方面的东西,所拿到的数据就是以这样的形式存储的,并且python对json的解析非常好。

然后,就是程序编写过程,由于之前已经写过图形界面的最小字数和,所以中间过程的数据很容易就得到,然后以json的格式进行封装就可以了。这时候又碰到

问题,那就是如何将JSON的数据读出来呢?这部分还有javascript的代码,均是参考了余峰伟同学的代码,因为本人对这方面实在是才疏学浅。

将数据从json直接读出来很容易,但是由于作业推荐将结果显示在网页上,这又出现了问题,由于采用了web.py的架构,全局变量的处理很复杂,在之前的作业中就发现了这个

现象,并且没有找到很好的解决办法,所以就采取了别的同学解决这个问题的方法,就是用从网页获取数据的方式将json的数据读出来,即是通过表单的传输。

最后,数据也获得了,需要做的就是将其显示在网页上了,但是我真的是不会写javascript啊!!!虽然是根据小余同学的脚本代码进行的修改,但是也足足让我调试了三个小时。

从一开始找不到js文件,到后来不清楚js的函数返回值,又没有可靠的调试工具,只能通过alert的方式来判断是否进入函数。最后发现,由于有的语句没有执行,js的返回值就会是false,跟我想象中的完全不一样,应该是js内部封装好的函数也是有返回值的,并且js函数的返回值默认应该是最后一条语句。

最后的最后,凑凑合合的写完了,代码覆盖率什么的,稍后再说吧。

代码和截图如下:

import web
import string
import random
import copy
import json urls=('/','Index',
'/history','Json')
render=web.template.render('templates/') class Json:
def GET(self):
f=open("index.json","r")
s=f.read()
f.close()
return s class Index:
def execute(self,f,n,m,h,v):
his = []
que = [[-1,0]]
maxv = {'sum':f[0][0],'a':0,'b':0,'c':0,'d':0}
if h or v:
for i in range(0,n):
if h:
f[i] += f[i]
if v:
f += [f[i]]
M = m
if h:
M = 2*m
N = n
if v:
N = 2*n
for i in range(0,n):
p = [0]*M
for j in range(i,min(N,i+n)):
sumv = 0
que = [[-1,0]]
for k in range(0,M):
while len(que)>=1 and k-que[0][0]>m:
que.pop(0)
p[k] += f[j][k]
sumv += p[k]
nowv = {}
nowv['sum'] = sumv-que[0][1]
nowv['a'] = i % n
nowv['b'] = (que[0][0]+1)%m
nowv['c'] = j % n
nowv['d'] = k % m
if nowv['sum']> maxv['sum']:
maxv = copy.deepcopy(nowv)
his.append({'max':maxv,'now':nowv})
while len(que)>=1 and que[len(que)-1][1]>sumv:
que.pop(len(que)-1)
que.append([k,sumv])
f = open("index.json","w")
json.dump(his,f)
f.close() def GET(self):
return render.index(0,0,[[0]],5,5) def POST(self):
x=web.input(myfile={})
if x['myfile'].value!='':
f = x['myfile'].value
f = f.split("\n")
n = string.atoi(f[0].replace(",",""))
m = string.atoi(f[1].replace(",",""))
f = f[2:]
f = [[string.atoi(j) for j in i.split(",")] for i in f if i is not '']
else:
n=string.atoi(x['hsize'])
m=string.atoi(x['lsize'])
f=[]
for i in range(0,n):
f += [[]]
for j in range(0,m):
f[i].append(random.randint(-100,100))
self.execute(f,n,m,"h" in x,"v" in x)
return render.index(n,m,f,n,m) if __name__ == "__main__":
app=web.application(urls,globals())
app.run()
var SPEED=0
var NOWB=-1 var set_color = function(i,j,co){
if (co!="" && i<n && j<m){
document.getElementById("table").rows[i].cells[j].style.background = co;
}
} var set_border = function(i,j,st){
if (st!="" && i<n && j<m){
document.getElementById("table").rows[i].cells[j].style.border = st;
}
} function get_json(){
alert("1");
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET",window.location.href+"history",false);
xmlhttp.send();
HIS = eval("(" +xmlhttp.responseText+")");
n = document.getElementById("table").rows.length;
m = document.getElementById("table").rows[0].cells.length;
return true;
} var draw = function(x,w,co,bo){
var i,j,a,b,c,d;
a = HIS[x][w]['a'];
b = HIS[x][w]['b'];
c = HIS[x][w]['c'];
d = HIS[x][w]['d'];
i = a -1;
do{
j = b -1;
i = (i + 1)%n;
do{
j = (j + 1)%m;
set_color(i,j,co);
set_border(i,j,bo);
}while(j!=d);
}while(i!=c);
if (NOWB!=-1){
document.getElementById(w).innerHTML = HIS[x][w]['sum'];
}
} var draw_it = function(){
var i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
set_color(i,j,'white');
set_border(i,j,'2px dotted black');
}
}
if(NOWB>=0){
draw(NOWB,'now',"#AAAAAA","");
draw(NOWB,'max',"","2px solid yellow");
}
}
} var draw = function(x,w,co,bo){
var i,j,a,b,c,d;
a = HIS[x][w]['a'];
b = HIS[x][w]['b'];
c = HIS[x][w]['c'];
d = HIS[x][w]['d'];
i = a -1;
do{
j = b -1;
i = (i + 1)%n;
do{
j = (j + 1)%m;
set_color(i,j,co);
set_border(i,j,bo);
}while(j!=d);
}while(i!=c);
if (NOWB!=-1){
document.getElementById(w).innerHTML = HIS[x][w]['sum'];
}
} var draw_next = function(){
alert(1);
if(NOWB < HIS.length-1){
NOWB += 1;
}else{
SPEED = 0;
}
draw_it();
} var draw_last = function(){
if(NOWB>=0){
NOWB -= 1;
} else{
SPEED = 0;
}
draw_it();
} var auto_go = function(){
if (SPEED>0){
draw_next();
}
if (SPEED){
setTimeout("auto_go()",1000/Math.abs(SPEED));
}
} var stop = function(){
SPEED = 0;
}


homework-10的更多相关文章

  1. Bank homework 10 2016 4 25

    #include<iostream>#include<string>using namespace std;class Bank { public: Bank(string _ ...

  2. Python 入门教程 10 ---- Student Becomes the Teacher

    第一节 1 练习 1 设置三个的字典分别为lloyd,alice,tyler 2 对每一个的字典的key都设置为"name","homework" , &quo ...

  3. MSDS 596 Homework

    MSDS 596 Homework 10 Due November 28 2017Notes. The lowest grade among all eleven homework will be d ...

  4. Flask Web开发从入门到放弃(一)

    第1章 章节一 01 内容概要 02 内容回顾 03 路飞学城之加入购物车 04 路飞学城之结算 05 路飞学城之立即支付 06 路飞学城之后续计划 07 Flask框架简介和快速使用 08 FLas ...

  5. 上海交大课程MA430-偏微分方程续论(索伯列夫空间)之总结(Sobolev Space)

    我们所用的是C.L.Evans "Partial Differential Equations" $\def\dashint{\mathop{\mathchoice{\,\rlap ...

  6. keras字符编码

    https://www.jianshu.com/p/258a21ae0390https://blog.csdn.net/apengpengpeng/article/details/80866034#- ...

  7. AI:深度学习用于文本处理

    同本文一起发布的另外一篇文章中,提到了 BlueDot 公司,这个公司致力于利用人工智能保护全球人民免受传染病的侵害,在本次疫情还没有引起强烈关注时,就提前一周发出预警,一周的时间,多么宝贵! 他们的 ...

  8. 深入理解计算机系统_3e 第十章家庭作业 CS:APP3e chapter 10 homework

    10.6 1.若成功打开"foo.txt": -->1.1若成功打开"baz.txt": 输出"4\n" -->1.2若未能成功 ...

  9. bzoj 4320: ShangHai2006 Homework

    4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...

  10. hdu-1789-Doing Homework again

    /* Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. linux下文件夹的创建、复制、剪切、重命名、清空和删除命令

    在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...

  2. hadoop2 环境的搭建(手动HA)

    1.手工切换ha的环境的搭建(比hadoop1多出来journalnode的配置) namenode:hadoop110和hadoop111 datanode:hadoop112.hadoop113. ...

  3. POJ 2065 SETI (高斯消元 取模)

    题目链接 题意: 输入一个素数p和一个字符串s(只包含小写字母和‘*’),字符串中每个字符对应一个数字,'*'对应0,‘a’对应1,‘b’对应2.... 例如str[] = "abc&quo ...

  4. poj 2029 Get Many Persimmon Trees (dp)

    题目链接 又是一道完全自己想出来的dp题. 题意:一个w*h的图中,有n个点,给一个s*t的圈,求这个圈能 圈的最多的点 分析:d[i][j]代表i行j列 到第一行第一列的这个方框内有多少个点, 然后 ...

  5. Activity的加载模式及Intent.setFlags

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity.可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity. ...

  6. bzoj3252

    简单题,每次取出最长链,然后对于练上每个点x,终点在其子树内的链都要减去a[x] 这显然可以用dfs序+线段树维护 显然每个点只要删一次即可,复杂度是O(nlogn) type node=record ...

  7. LA 3516 (计数 DP) Exploring Pyramids

    设d(i, j)为连续子序列[i, j]构成数的个数,因为遍历从根节点出发最终要回溯到根节点,所以边界情况是:d(i, i) = 1; 如果s[i] != s[j], d(i, j) = 0 假设第一 ...

  8. HDU 1233 还是畅通工程(最小生成树,prim)

    题意:中文题目 思路:prim实现,因为有n*(n-1)/2条边,已经是饱和的边了,prim比较合适. (1)将点1置为浏览过,点1可以到达其他每个点,所以用low[i]数组记录下目前到达i点的最小长 ...

  9. (5)Quartz学习

    原文:http://blog.csdn.net/zxl315/article/details/10879927 介绍Quartz Quartz是一个开源的任务调度系统,它能用来调度很多任务的执行. 运 ...

  10. Ejabberd源码解析前奏--概述

    一.绪论    Ejabberd是一个用Erlang/OTP写的开源即时通讯服务器,其是跨平台.分布式.容错且基于开放标准的实时通讯系统.Ejabberd是一个功能丰富的XMPP服务器,同时适合小规模 ...