【每周一坑】单词本 +【解答】三国演义中谁的存在感最强
“每周一坑”这个系列在本教室的文章中,阅读量不算高。但我屡次在和读者沟通时听到说“我都有跟着每周一坑里的题在做”。这是个有意思的普遍现象:内容的价值和传播度并不成正比。
因此如果你每天的阅读主要依赖于别人的转发和“智能”的推送,或许该考虑是不是增加点更有价值的“主动阅读”了。
PS:上周的送书活动的中奖名单:捷、七步、司夜、教我点英语吧、HalShaw、剃刀奥卡姆、兜里有糖、李明毅、贝玉尚、A暴躁的眼镜吴。奖品书籍将在下周一寄出。类似活动我们经常会有,大家别客气啊(比如这次只要你留言的项目或文章超过3个赞就能拿到书的
)
今天本系列打算做个小小的尝试,不再是一个单独的题目,而是一个连环坑!我希望通过之后的三四期,逐步引导大家做出一个功能较完整的小工具。不过我现在没有底,不知道到最后能有多少人把坑给填完。愿意接受挑战的,现在就开始了!
我们的目标是:
单词本
这应该是一个很多人都可以用到的小工具。在平常学习或阅读的时候,遇到一些生词,随手加入生词本里,有空的时候可以拿出来复习。很多背单词工具都有这样的功能。不过你有没有想过自己实现一个这样工具呢?既是一个练手的好题材,也能定制化一些自己想要的功能。
初步的设想,这个单词本工具可以随时添加生词,自动配上释义,支持导入导出单词本,可以进行复习、测试,并记录每个词的熟悉度。(有其他功能建议,欢迎在文后留言)
这个程序可以写得很简单,帮你巩固 Python 的基础语法、数据结构使用、文件读写。而你也可以根据自己的能力更进一步,给它增加 GUI、网络、数据处理等功能。
作为第一期,我们的起步要求很简单:
可在命令行输入单词或词组
保存在文件中并记录添加的日期
提示保存成功或单词已存在
提示现有单词总数
程序可重复运行(保证读写功能正常)
效果演示:
详细解答和参考代码将在下次栏目中给出,也可以其他同学在留言中的代码。
期待各位同学提交解答,更期待你能完成整个系列。
提交代码可以使用 paste.ubuntu.com 或
codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。
往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。
【解答】三国演义中谁的存在感最强
上次的题目《三国演义中谁的存在感最强》,关键是用好两个库就可以了:
jieba 和 collections.Counter。
这里给一份参考解答:
# 读取三国原文
with open('sanguo.txt', encoding='utf8', errors='ignore') as f: text = f.read()
# 分词
import jieba words = jieba.lcut(text) words_valid = []
# 排除词
excludes = ['将军', '却说', '二人', '不可', '荆州', '不能', '如此', '商议', '如何', '主公', '军士', '左右', '军马', '引兵', '次日', '大喜', '天下', '东吴', '于是', '今日', '不敢', '魏兵', '陛下', '人马', '都督', '一人', '不知', '汉中', '众将', '只见', '后主', '蜀兵']
for word in words:
if len(word) < 2:
continue if word in excludes:
continue # 合并词 if word.endswith('曰'): word = word[:-1]
if "诸葛亮" in word or '孔明' in word: word = '孔明' elif "关公" in word or "云长" in word: word = "关羽" elif "玄德" in word or '皇叔' in word: word = "刘备" elif "孟德" in word or "曹丞相" in word : word = '曹操' words_valid.append(word)
# 统计高频词
from collections import Counter ct = Counter(words_valid) ct.most_common(10)
除了分词和统计的调用外,中间还做了两件事:
把一些高频但我们不关注的词去掉(这里其实是先运行过一次代码,找出的这些高频词)
把一些同目标的词合并,比如“诸葛亮”和“孔明”。另外这里用
in
而不是==
,是因为可以把“孔明曰”、“孔明笑”之类的词也统计进来。
执行结果:
看来,刘皇叔还是当之无愧的C位,不过诸葛丞相的地位也不可小觑。
上次各位的回应让我有些尴尬,只有一位同学提交了答案。不过,这位同学的答案却是相当惊艳,以至于我决定原封不动地搬运过来,放在今天的下一条。强烈推荐大家去看一下 @王文亚 同学的解答,不仅统计了书中人名的出现频率,还进一步分析并绘制了不同人物在不同章回出现的分布、人物之间的关系等。尽管其中有些小细节值得商榷,但整体上已经相当不错。
除了这个题目,之前几次的题目王同学也有很不错的解答,值得各位借鉴学习。项目地址 https://github.com/Damon0626/Crossin-Programming-Room
其他同学也动起手来呀!
期待在下一期中看到你们的代码。