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

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

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

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

但是这还是会有一个问题,那就是数据以什么形式存储呢?因为时间紧迫,所以这部分我就没有再自己设计结构,直接采用了网络上常用的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. HBase的Shell操作

    1.进入命令行 bin/hbase shell 2.输入help 查看各种命令组. 命令是分组的,可以执行help 'general'查看general组的命令. 3.常用命令 --显示有哪些表 li ...

  2. jquery学习以及下载链接

    jquery学习链接 http://www.w3school.com.cn/jquery/jquery_intro.asp jquery 脚本库下载链接 http://jquery.com/downl ...

  3. bzoj3926

    题目的意思是叶子不超过20个……听说当初zjoi不少人被坑 分别对每个叶子以它为根dfs出20个dfs树,这样整个树的任何一个子串,都是某个dfs树上一个点到它的一个子孙的路径 每个dfs树,根到叶子 ...

  4. HttpContext.Current.RewritePath方法重写URL

    if (!IsPostBack) { //如果请求ID为空,则重写URL为:~/index.aspx?ID=shouji.115sou.com if (Request.QueryString[&quo ...

  5. json格式的字符串使用string.Format()方法报错:输入字符串的格式不正确

    解决:把大括号转义一下就可以了啊,大括号的转义是两个{{  结尾是}}     今天看同事写的代码,发现他在使用string.format拼接类似json格式的数据时,大括号多了一对,感觉不对就查了查 ...

  6. UVA 1151 Buy or Build (MST最小生成树,kruscal,变形)

    题意: 要使n个点之间能够互通,要使两点直接互通需要耗费它们之间的欧几里得距离的平方大小的花费,这说明每两个点都可以使其互通.接着有q个套餐可以选,一旦选了这些套餐,他们所包含的点自动就连起来了,所需 ...

  7. 【C#学习笔记】读SQL Server2008

    using System; using System.Data.SqlClient; namespace ConsoleApplication { class Program { static voi ...

  8. 【大数取模】HDOJ-1134、CODEUP-1086

    1086: 大数取模   题目描述 现给你两个正整数A和B,请你计算A mod B.为了使问题简单,保证B小于100000. 输入 输入包含多组测试数据.每行输入包含两个正整数A和B.A的长度不超过1 ...

  9. 简单易用的AOP/IOC框架

    Source: http://www.codeproject.com/KB/Articles/684613/Working/AopIoc.zip Introduction Supper framewo ...

  10. [转] C#实现自动化Log日志

    qing2005原文地址 C#实现自动化Log日志 在开发项目的时候,我们不免要使用Log记录日志,使用最多的是Log4Net和EntLib Log,在需要记录日志的代码处加入log.Write(日志 ...