shadowebdict开发日记:基于linux的简明英汉字典(二)
承接上文。
我们采用自顶而下的方式开发,因此,今天就解决程序的主要架构: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()
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。