Thank God It’s Friday!
又到周五啦!眼看就要忙完一周的学习和工作,又可以出去浪咯。
然而,只有我们依旧无趣地在此刻发干货文,提醒着你有没有写新的代码?有没有了解新的语法?硬生生给你五彩斑斓的周末生活蒙上一层阴影。每每想到这,我就觉得,这档子事儿还真是……
干得漂亮!
不多说,先来看这周的题目。上周解答在后半部分。
统计英文词频
编程教室在之前发过一篇 数据分析:当赵雷唱民谣时他唱些什么?,里面对赵雷的几十首歌词做了分词、去冗余、统计的操作,得出了他在歌词中最喜欢用的词汇。
本周我们的题目与这个类似,不过要简单许多。
要求:
- 统计一部英文小说里单词的出现次数(忽略大小写)
- 按出现次数显示最高的 100 个单词
- 【附加题】多统计几个不同作家的作品,挑选一些特征词汇的次数画在图表上,展示不同作家的风格区别。
示例:
Jane Eyre ---------------- 1. the 7406 2. I 7245 3. and 6346 4. to 5155 5. of 4331 6. a 4314 ...
因为英语天生自带分词,所以要比中文好处理。另外透露下,今天一同发送的 编程课堂 里,有解答这题的关键技巧。
我们提供了几部小说作为测试数据,公众号里回复 小说 可获取下载地址。
依旧欢迎大家积极投稿~
Talk is cheap. Show me the code.
双色球选号器解答
这道题还是比较简单的。就是如何从一定的范围中随机地选出几个数。
我们的课程中有介绍过 random.randint 方法,可以产生一定范围中的一个随机整数。所以你可以调用多次该方法,获取到足够多的数。当然考虑到有可能出现重复,需要判断随机出来的值是否有效。
然而这并不是一个好办法。
random 模块中其实有现成的方法:sample。它的作用就是从序列中随机挑选一些元素。因此,选取红球只需要:
import random # 1~33的列表 red_pool = range(1, 34) red = random.sample(red_pool, 6)
蓝球,可以一样用 sample,或者 random 的另一个方法:choice。它的作用是从序列中随机挑选一个元素:
# 1~16的列表 blue_pool = range(1, 17) blue = random.choice(blue_pool)
这就大功告成了!
如果想显示的好看些(py2):
print '红球:', red.sort() for r in red.sort(): print '%02d' % r, print print '蓝球: %02d' % blue
上一期的答案里,@王任 同学用一行代码搞定了选号:
import random [random.randint(1, 16), sorted(random.sample(range(1, 34), 6))]
另一位同学 @张良 完成了专注买彩一百年的代码,参见:
https://github.com/lightopen/lottery/blob/master/lottery.py
然而,当我今天第一次运行他的代码时,结果是:
100 years late, you spend 73000, and earn 3031520
我想这是写错了吧。后来又 run 了许多次,发现并不是……
确实是我错过了 300 万。
近期文章推荐阅读: