全系列目录:

承接上文。

我们采用自顶而下的方式开发,因此,今天就解决程序的主要架构:main.py的开发。

自顶而下的方式,意味着我们需要假设已经开发好了两个模块:一个是LocalDB,一个是WebDict。LocalDB存储已经在网上查过的单词,而WebDict则在新词出现时,从网上获取回相应的资料。

比如我要查process这个单词的意思,第一次是由WebDict模块返回的意思,但第二次查process就是由LocalDB完成了。

然后定义输入输出。鉴于模块和main架构之间已经解偶了,因此,就不着急进行gui的开发,第一个版本先采用CLI的方式。输入单词直接查询,输入-1退出,输入#号就显示所有难词。所谓难词,如上文所说,由LocalDB定义,目前是重复查过4次的单词。

在数据库中,有一个word table,列名分别是:word、explain、net_explain、sentence、times。分别是单词、释义、网络释义、例句和查询次数。

LocalDB开放的接口如下:

0、get_hard_word:返回所有难词的列表。

1、get_eng_word_from_db:返回在本地数据库中保存的单词

2、insert_word_to_db:将单词插入本地数据库中。

3、update_word_times:更新某个单词的查询次数

4、turn_off_db:关闭本地数据库

WebDict开放的接口如下:

0、get_dict_data:从网络获取相应单词的所需信息。(释义、网络释义、例句)

下面是全部代码:

# -*- coding:utf-8 -*-
__author__ = 'wmydx' from LocalDB import LocalDIct
from WebDict import getResponse def show_result(ans):
names = ['word', 'explain', 'net_explain', 'sentence', 'times']
for item in ans:
for key in names:
print key + ': \n' + str(item[key])
if item['times'] > 1:
print 'CAREFUL!! this is a hard word!!' def show_hard_word(ans):
for item in ans:
print item['word'] + '\n' def main():
db = LocalDIct.LocalDict()
response = getResponse.GetResponse()
input_word = ''
try:
while True:
input_word = raw_input("plz input words: ")
if input_word == str(-1):
break
if input_word == '#':
ans = db.get_hard_word()
show_hard_word(ans)
else:
ans = db.get_eng_word_from_db(input_word)
if not ans:
print 'here'
ans = response.get_dict_data(input_word)
for item in ans:
db.insert_word_to_db(item, 'words')
else:
for item in ans:
item['times'] += 1
db.update_word_times(item)
if db.is_a_hard_word(item):
db.insert_word_to_db(item, 'hard')
show_result(ans)
db.turn_off_db()
print 'END.'
except:
db.turn_off_db() main()

  

【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)的更多相关文章

  1. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  2. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  3. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  4. Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw

    负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...

  5. Linux菜鸟起飞之路【二】Linux基本常识

    一.Unix操作系统基本常识 1.什么是Unix? Unix是一个计算机操作系统,是一个用来协调.管理和控制计算机硬件与软件资源的控制程序. 2.Unix操作系统的特点? 多用户与多任务.多用户表示在 ...

  6. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  7. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

    最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...

  8. Linux系统启动那些事—基于Linux 3.10内核【转】

    转自:https://blog.csdn.net/shichaog/article/details/40218763 Linux系统启动那些事—基于Linux 3.10内核 csdn 我的空间的下载地 ...

  9. 轻易实现基于linux或win运行的聊天服务端程序

    对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完全得益于m ...

随机推荐

  1. RSA密码系统 基于大数环境编写 密码学课程设计

    RSA密码系统的实现 1.问题描述 RSA密码系统可具体描述为:取两个大素数p和q,令n=pq,N=(p-1)(q-1),随机选择整数d,满足gcd(d,N)=1,ed=1 modN. 公开密钥:k1 ...

  2. linux 查看某进程或程序的网卡流量(转)

    一.nethogs介绍 分享一个linux 下检测系统进程占用带宽情况的检查.来自github上的开源工具. 它不依赖内核中的模块.当我们的服务器网络异常时,可以通过运行nethogs程序来检测是那个 ...

  3. HashMap的工作原理(转)

    HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...

  4. ubuntu12.04下搭建ftpserver

    楼主想把同学硬盘里面的200多G电影共享给实验室的小伙伴们看,就打算在内网server上搭建一个ftp的server. 1.安装ftp 首先在终端下键入例如以下内容,安装ftpserver: sudo ...

  5. Windows移动开发(四)——闭关修炼

    非常久不写博客了,不是由于不想写,仅仅是近期公司任务比較多,最终十一有时间出来冒泡了. 今天继续介绍移动开发中的重中之重--内存管理. C#代码是托管代码,C# 程序猿非常少像C/CPP程序猿那样为程 ...

  6. 事件总线帧---Otto

    我们如果这样一种业务场景.如今在做一款及时聊天应用,我们在聊天页面进行收发信息.同一时候也要实时更新前一页面的聊天记录,这时我们该怎样去实现?说说我曾经的实现策略.我使用的是广播接收器BroadCas ...

  7. Python基础 - 迭代

    前言 在pythone中经常可以看到iterable这样的描述. 直译为迭代. 这是在C中没有的概念. iterable(可迭代) 支持每次返回自己所包含的一个成员的对象就是可迭代对象. iterab ...

  8. struts2文件上传限制大小问题

    struts2默认文件上传大小为2M,如需改动默认大小,解决方法例如以下: <struts> <constant name="struts.multipart.maxSiz ...

  9. 在VM已安装Android4.4 连接小米手环 网络设置

    1.打开一个终端 2.输入su,选择同意 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fon ...

  10. hdu 1561 The more, The Better (依赖背包 树形dp)

    题目: 链接:点击打开链接 题意: 非常明显的依赖背包. 思路: dp[i][j]表示以i为根结点时攻击j个城堡得到的最大值.(以i为根的子树选择j个点所能达到的最优值) dp[root][j] = ...