【每周一坑】自动翻译 | 【解答】单词本
上次我们挖了一个系列坑:【每周一坑】单词本。
第一期的目标,是实现控制台下的单词录入及保存功能。各位都有实现吗?在本文后半段,我们会来做具体分析。
在这之前,先给出新的目标:
自动给添加的单词增加翻译、音标等信息
效果演示:
提示:翻译功能可以通过网上的翻译 API 实现,你所要了解的就是如何发起网络请求,以及如果对返回结果进行处理。这也算是基本的爬虫操作。
接口建议使用金山词霸的查词接口:
http://open.iciba.com/index.php?c=wiki&t=cc
简单申请一下 key 就可以使用,还没限制。当然你也可以考虑有道或者百度翻译的接口。具体使用就是你们要解决的问题了,下次我们再来具体说。
关于网络请求,可以看这篇 requests 的介绍:《requests - 这个男人让你的爬虫开发效率提升8倍》,或在公众号(Crossin的编程教室)里回复关键字 查天气
详细解答和参考代码将在下次栏目中给出,也可以其他同学在留言中的代码。
期待各位同学提交解答,更期待你能完成整个系列。
提交代码可以使用 paste.ubuntu.com 或
codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。
【解答】单词本
上次的问题,可以划分成几个部分:
通过命令行输入单词。这个用
input
就可以。保存文件并记录添加的日期。当前日期可以从
datetime
模块的datetime.date.today()
获取,转成字符,拼接起来后,通过基本的文件读写进行保存。判断单词已存在。用
in
来判断。提示现有单词总数。用列表的
len
方法。程序可重复运行。这个类似之前的“猜数字”程序,把程序放在一个
while
循环里
综合起来:
# coding: utf8
import datetime f = open('words.txt', 'a+') f.seek(0) lines = f.readlines() words = [line.split(' ')[0] for line in lines if line.strip()]
while True: word = input('请输入你要记录的单词(直接回车退出程序):\n').strip()
if not word:
break if word in words: print('单词已存在')
else: words.append(word) t = datetime.date.today() line = word + ' ' + str(t) + '\n' lines.append(line) f.write(line) f.flush() print('已记录', len(words) ,'个单词/词组\n') f.close()
这里还需要注意的是,我用 6 个空格字符作为单词和时间的分割,你也可以用其他的方式,但注意要避免和单词字符本身产生冲突。一开始用 a+
模式是为了避免第一次单词文件不存在时的报错。中间变量 words
是一个列表,用了存储所有已记录的单词。 strip()
方法是为了去除字符串前后多余的空白字符。每次写入之后调用 flush()
,避免程序意外结束时,未保存的内容丢失。
上次有 5 位同学提交了代码:
🌜月城mooncity🌛、LY💤、帆、张赛、Nttzl
其中 LY💤 同学的代码还实现了查询和删除的功能。感谢几位同学的参与。
其他还没有完成的同学,看了本次的解答后,建议也自己动手做一遍。然后跟着我们一起继续往下做。毕竟在后台跟我咨询说学完基础不知道做什么的同学绝对不止 5 个人,但为何有了项目的时候却并没有人动手呢🤔
期待在下一期中看到你的代码!