任意整数以内的加减法口算练习题生成web服务源码及搭建过程




提示:写这个web服务是为了练手玩,实际上已经有很多web(基于html或其他)、桌面应用、手机APP等支持题目生成功能了,并且手机APP还支持OCR识别判断答案是否正确,比如我试了一个小猿口算APP就挺好:http://kousuan.yuanfudao.com/

先上服务链接:http://aspirer.wang:3389/kousuan/7

链接的最后一个数字是可以修改的,改成几就是生成几以内的加减法练习题(比如上面的链接就是生成7以内的加减法口算题目,每次刷新都是新的题目不会重复)。

儿子上一年级经常有口算练习题,老师发的是一张习题纸,一共100道题,需要家长复印,但是存在三个小问题:一是复印出来的题目完全一样(有一次我发现儿子做题居然在参考前面一张。。。);二是打印不方便,必须得复印,有些家长是没有复印机的(复印还要带上原件,老师发下来的时候家长不一定能及时拿到原件);三是想自己提前给孩子出题练习其他更大数字的加减法不方便。

有了这个web站,后面还可以稍微修改下,支持生成乘法、除法的口算题。

整体部署架构:nginx+uwsgi+bottle,python编写的web后台服务。

部署过程参考资料:

  1. 使用bottle.py体验WSGI服务
  2. Nginx 部署Bottle + uwsgi

使用nginx的原因是我的博客就是用的它,跟博客部署在一起了,只是端口不同。

源码:

共3个文件:bottle.py是bottle wsgi框架,可以pip install安装,也可以直接拷贝源文件过来,非常方便。gen.py是为了方便后台测试用的,python执行它可以直接打印出题目。kousuan.py是给uwsgi用的,算是wsgi配置文件,当然里面也有一些其他代码,主要是生成html模板文件,以及配置wsgi router。

文件都很短,这里直接贴出来,不放github了:

 

html格式很简单,就没用专门的模板渲染框架如jinjia2等。

uwsgi配置文件:

nginx配置文件:

上面两个文件需要在对应的enabled目录下建立软链接,具体参考上面的部署过程参考资料(第二个链接)。

uwsgi和nginx的安装就不说了,apt就行。

部署好之后重启uwsgi和nginx服务就可以了。

 

监控:

为了及时发现web故障,用监控宝给3389 tcp端口和网站都加了监控,出现不可用会发短信和邮件通知。(我的博客用他们免费版用了这么久,也给人家打个广告)。

 

10.22更新:

  1.  修改了题目生成方法,大幅减少了包含0的题目的数量

 

其他:

生成题目时是暴力穷举符合条件的题目,其实可以根据每个题目的类型(加法或减法)以及生成的第一个数字,来限定第二个数字的随机范围,保证一次就可以生成符合条件的题目,可以很大程度减少计算量,不过对于这么小的程序和用户量的场景来说,这一点点计算量也就无所谓了。