结对作业1----基于flask框架的四则运算生成器
011、012结对作业
coding地址:https://coding.net/u/nikochan/p/2nd_SE/git
一、作业描述
由于上次作业我没有按时完成,而且庞伊凡同学编程能力超棒,所以我们这次基于她上次用的python,再添加HTML来完成此次作业。
思维导图:

二、功能实现
- 错题重做功能。
- 自动计时功能。能显示用户开始答题后的消耗时间。
- 多语言支持。
- 控制输入。通过正则表达式对 输入题目数和答案的操作进行控制。只有数字才能被成功输入
- 难度分级。
三、程序设计
(一)程序结构
├── README.md
├── app.py
├── function.py
├── static
├── templates
│ ├── answer.html
│ ├── fault.html
│ ├── index-ct.html
│ ├── index-en.html
│ ├── index.html
│ └── test.html
(二)代码分析
1、计时器
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>显示停留时间</title>
</head>
<body>
<form name="form1" method="post" action="">
<input name="textarea" type="text" value=""> <script language="javascript">
var second=0;
var minute=0;
var hour=0;
window.setTimeout("interval();",1000);
function interval()
{
second++;
if(second==60)
{
second=0;minute+=1;
}
if(minute==60)
{
minute=0;hour+=1;
}
document.form1.textarea.value = hour+"时"+minute+"分"+second+"秒";
window.setTimeout("interval();",1000);
}
</script>
</form>
</body>
</html>
2、选择语言和难度
<html>
<title>欢迎来到小天才的世界|开启你的数学之门</title>
<body>
<p style="text-align:center">欢迎来到小天才的世界|开启你的数学之门</p>
<<<<<<< HEAD
<form action="test/" method="POST" >
<div align='right'>
<select onchange="s_click(this)">
<option value="CNS" selected="">简体中文</option>
<option value="/index-CT/" >繁體中文</option>
<option value="/index-EN/">English</option>
</select>
</div>
<div align="center">
<p>请输入难度:</p>
<input type="checkbox" name="If_int" value=1>初级</input>
<input type="checkbox" name="If_Fraction" value=1>中级</input>
<input type="checkbox" name="If_complex_Fraction" value=1>高级</input><br><br>
<p>键入题数:</p>
<input type="text" name=quiz_num onkeyup="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,'');}).call(this)" onblur="this.v();" /></input>
<input type="submit" name="submit" ></input></div>
<script type="text/JavaScript">
function s_click(obj) {
var num = 0;
for (var i = 0; i < obj.options.length; i++) {
if (obj.options[i].selected == true) {
num++;
}
}
if (num == 1) {
var url = obj.options[obj.selectedIndex].value;
window.open(url); //这里修改打开连接方式
}
}
</script>
=======
<form action="test/" method="POST">
<p>Please the level you want to challenge:</p>
<input type="checkbox" name="If_int" value=1>初级</input>
<input type="checkbox" name="If_Fraction" value=1>中级</input>
<input type="checkbox" name="If_complex_Fraction" value="=1">高级</input><br><br>
<p>键入题数:</p>
<input type="text" name=quiz_num></input>
<input type="submit" name="submit"></input>
>>>>>>> 3fec2e9752b08724c10502481ae79a33d01085ad
</form>
</body>
</html>
3、进入出题界面
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>欢迎来到小天才的世界|开启你的数学之门
</title>
</head>
<body>
<<<<<<< HEAD
<form name="form1" action="/index/answer/" method="POST">
<table>
{% for allist in allists %}
<tr>
<td><label>{{ allist['show'] }}=</label></td> <td><input name= answer type="text" placeholder="answer" onkeyup="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,'');}).call(this)" onblur="this.v();" /></td></tr>
{% endfor %}
</table>
<input name="time_spend" type="text" value="">
<script language="javascript">
var second=0;
var minute=0;
var hour=0;
window.setTimeout("interval();",1000);
function interval()
{
second++;
if(second==60)
{
second=0;minute+=1;
}
if(minute==60)
{
minute=0;hour+=1;
}
document.form1.time_spend.value = hour+":"+minute+":"+second;
window.setTimeout("interval();",1000);
}
</script>
</input>
<input type="submit" name="submit"></input>
</form>
=======
<form action="/hello-world/answer" method="POST">
<table>
{% for allist in allists %}
<tr>
<td><label>{{ allist['show'] }}</label></td> <td><input name= answer type="text" placeholder="answer" /></td></tr>
{% endfor %}
</table>
<input type="submit" name="submit"></input>
</form>
>>>>>>> 3fec2e9752b08724c10502481ae79a33d01085ad
</body>
</html>
4、判断正误界面
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>欢迎来到小天才的世界|开启你的数学之门
</title>
</head>
<body>
<<<<<<< HEAD
<form action='/index/fault/' method="POST">
=======
<form >
>>>>>>> 3fec2e9752b08724c10502481ae79a33d01085ad
<table>
<tr>
<td>Tasks </td>
<td>Your Answer </td>
<td>Correcrtly Result </td>
<td>Status</td>
<<<<<<< HEAD
<div align="right" style="border:0px " >times:{{times}}</div>
</tr>
{% for allist in allists %}
<tr>
<td><label>{{ allist['show'] }}= </label></td>
=======
</tr>
{% for allist in allists %}
<tr>
<td><label>{{ allist['show'] }} </label></td>
>>>>>>> 3fec2e9752b08724c10502481ae79a33d01085ad
<td style="align-content: center;"><label>{{ allist['ans'] }} </label></td>
<td><label>{{ allist['result'] }} </label></td>
{% if allist['correct']=='1' %}
<td><label> Congratuation!You are right!</label></td>
{% else %}
<td><label>Sorry, You are wrong!</label>
{% endif %}
</tr>
{% endfor %}
</table>
<<<<<<< HEAD
<input type="submit" name="submit" value="返回首页"></input>
<input type="submit" name="submit" value="错题重做"></input>
=======
<input type="submit" name="submit" value="return"></input>
>>>>>>> 3fec2e9752b08724c10502481ae79a33d01085ad
</form>
</body>
</html>
5、错题重做
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>欢迎来到小天才的世界|开启你的数学之门
</title>
</head>
<body>
<form name="form1" action="/index/answer/" method="POST">
<table>
{% for faulist in faulists %}
<tr>
<td><label>{{ faulist['show'] }}=</label></td> <td><input name= answer type="text" placeholder="answer" onkeyup="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,'');}).call(this)" onblur="this.v();" /></td></tr>
{% endfor %}
</table>
<input name="time_spend" type="text" value="">
<script language="javascript">
var second=0;
var minute=0;
var hour=0;
window.setTimeout("interval();",1000);
function interval()
{
second++;
if(second==60)
{
second=0;minute+=1;
}
if(minute==60)
{
minute=0;hour+=1;
}
document.form1.time_spend.value = hour+":"+minute+":"+second;
window.setTimeout("interval();",1000);
}
</script>
</input>
<input type="submit" name="submit"></input>
</form>
</body>
</html>
四、结果展示


五、照片


六、小结
- 结对编程的方式很好,因为两个人的相互讨论从而使解决问题实现了最快的方式。比如在一些函数的实现上,卡壳了。和小伙伴讨论一番便能得出结论。
- html语言对我来说是一门全新的语言,我从网上零基础开始看,进度慢学的也慢,虽然这是结对编程的作业,但是庞伊凡同学付出比我多的多,因为她不仅要完成自己的部分,还要教我,十分感谢!我还拿了她的Python的书来看,虽然也没看懂~
- 人要勇于挑战自己,通过写作业的方式去学习新的框架新的语言不失是一种很好的方式,虽然可能会花费一定的时间,不过还是很值得的!
结对作业1----基于flask框架的四则运算生成器的更多相关文章
- 2nd_SE-结对编程1-基于flask框架的四则运算生成器
0x00 Coding https://coding.net/u/nikochan/p/2nd_SE/git 0x01 写在前面 因为在上一个作业中,是基于python完成的Command程序.那么再 ...
- Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...
- 基于Flask框架搭建视频网站的学习日志(一)
------------恢复内容开始------------ 基于Flask框架搭建视频网站的学习日志(一)2020/02/01 一.Flask环境搭建 创建虚拟环境 初次搭建虚拟环境 搭建完虚拟环境 ...
- 基于Flask框架搭建视频网站的学习日志(二)
基于Flask框架搭建视频网站的学习日志(二)2020/02/02 一.初始化 所有的Flask程序都必须创建一个程序实例,程序实例是Flask类的对象 from flask import Flask ...
- 基于Flask框架搭建视频网站的学习日志(三)之原始web表单
基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...
- SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器
SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...
- 基于Flask框架的Python web程序的开发实战 <一> 环境搭建
最近在看<Flask Web开发基于Python的Web应用开发实战>Miguel Grinberg著.安道译 这本书,一步步跟着学习Flask框架的应用,这里做一下笔记 电脑只安装一个P ...
- 结对作业:基于GUI实现四则运算
1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...
- 基于Flask框架搭建视频网站的学习日志(六)之数据库
使用Flask-SQLSlchemy管理数据库(1)--初步安装调试 一.介绍: Flask-SQLSlchemy是一个Flask扩展,简化了Flask中对sql的操作,是一个高层的框架,可以避免直接 ...
随机推荐
- Learn c for the Second day
十六进制对应的二进制码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0 ...
- Java String字符串深入详解
Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "hello";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...
- shell 编程之函数
shell 函数的定义和普通的c语言函数定义差不多 function(){ } shell 函数的返回值,可以显示的return 语句,如果没有return 那么就会把最后一条语句的执行结果作为返回 ...
- Java中常见数据结构List之ArrayList
这里主要包含ArrayList和LinkedList, 然后再添加一个:CopyOnWriteArrayList 关于Java中的集合内容, 感觉都已经被写烂了, 我这里主要是做个复习, 再从扒下源代 ...
- 【.Net Core 2.0 生态】-- 好文收藏
随笔分类 - .NET Core - dotNet实训营 .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南 .Net Core 2.0 生态(2).NET ...
- SpringMVC中文件的上传(上传到服务器)和下载问题(一)
一.今天我们所说的是基于SpringMVC的关于文件的上传和下载的问题的解决.(这里所说的上传和下载都是上传到服务器与从服务器上下载文件).这里的文件包括我们常用的各种文件.如:文本文件(.txt), ...
- android studio多渠道多包名多apk打包
转自 利用 Android Studio 和 Gradle 打包多版本APK 搬砖的道路上,经常会有各种不同的需求,比如今天就碰到过一个打包版本的apk的要求, 比如一个apk给多个客户使用,如张三 ...
- GC选择之CMS 并发标记清除
CMS收集器 Concurrent Markup Sweep 并发标记清除 使用了标记-清除算法 与标记-压缩相比,并发阶段会降低吞吐量 算法作用在老年代以及永久区(新生代使用ParNew) -XX: ...
- 网友RHCE认证考试经历
2014年7月,为大力推广RedHat Enterprise Linux7操作系统,红帽将基RHCE认证由RHEL6转换到RHEL7上. 面对新的软件功能.新认证课程内容,初期认证学员的考试通过率一直 ...
- 【Spring 核心】装配Bean(一) 自动化装配
Spring从两个角度实现自动化装配:组件扫描 (Spring自动发现应用上下文中所创建的bean)自动装配(autowiring)自动满足bean之间的依赖 组件扫描: package test.s ...