人邮君来补充一点,编程也需要“语感训练”的理论基础。【内附Python语感训练资料】
在上世纪80年代,有一部BBC推出的动画片风靡许多国家,并且于1992年在国内播出。这部只有六个角色的动画片至今在世界范围已经收获了上百万的儿童观众,并且帮助他们进行了外语的启蒙学习。这部片子就是《大块头玛泽的故事》,玛泽是一个来自外星的怪物,故事讲述了他在岗多国遇到国王、公主和花匠等人的奇妙经历。
在人们的观念中,学习一门语言往往需要正式的课程以及对语法的清晰掌握。而两岁到六七岁之间的小朋友尚处于牙牙学语阶段,并不能理解语法结构这样的抽象概念,但是这并不影响他们通过玛泽的故事完成对英语、法语、韩语、意大利语等各种语言的启蒙学习。
这是如何做到的呢?原来毛绒绒的外星人玛泽和其他人物都会夸张地用不同语气重复需要小朋友学习的单词或者句型结构,使小朋友在看动画片的时候不知不觉就记住了这些英语表达。因此这个动画片非常有助于儿童的英语启蒙和语感培养。而语感也就是有些人在做外语的语法题目时,不能准确地描述出语法规则却常常能“蒙”对的主要原因。
这个通过重复来培养语感的过程在学习计算机编程中同样有所帮助。编程语言虽然不是自然语言,细细琢磨的话,其实在很多方面也是符合传统语言学规律的。比如,编程语言也讲究词汇学(关键字),结构学(程序结构),句法(语法),语义(代码功能)等;在语言的学习方法上,编程语言和自然语言也高度相似。
回想一下学习英语的过程,都有这样一个阶段:语法都搞明白了,词汇量也比英国农民多得多(据说英国的农民,平均词汇量800,但我一直未找到资料验证真伪),可就是说也说不出来,听也听不明白,急得捶胸顿足。再来看看初学者学习Python的情况,是不是也有这样一个阶段呢?基础语法都学完了,可是读别人的代码特别吃力,自己写又茫茫然不知从何处着手。
为什么会这样呢?这便是缺乏语感。
何谓语感,专业的定义如下:
语感,是比较直接、迅速地感悟语言的能力,是语言水平的重要组成部分,是对语言分析、理解、体会、吸收全过程的高度浓缩,是一种经验色彩很浓的能力,其中牵涉到学习经验、生活经验、心理经验、情感经验,包含着理解能力、判断能力、联想能力等诸多因素。
以上就是编程也要讲“语感训练”的理论基础。语感训练,并不等同于语法学习,也不是完整的小项目、小课题练习,而是针对编程实践中经常遇到的字符串处理、文件读写、列表字典元组集合对象操作等基本技能进行反复训练,帮助初学者建立语感。一旦建立起了语感,初学者就可以专注于功能的实现,而不会随时被一些小问题中断思维。
在Python编程领域尚处于“牙牙学语”阶段的新手可以从这100道练习题开始训练。这份完整的Python语感训练涵盖了列表、字典、元组、集合、字符串、类型转换、文件读写、综合应用等类型,共100道练习题。
让我们先来尝试几道题,请记得做完再查看答案!
1. 在列表 [1, 2, 3, 4, 5, 6] 首尾分别添加整型元素7和0。
>>> a = [1,2,3,4,5,6] >>> a.insert(0,7) >>> a.append(0) >>> a [7, 1, 2, 3, 4, 5, 6, 0]
2. 反转列表 [0, 1, 2, 3, 4, 5, 6, 7] 。
>>> a = [0,1,2,3,4,5,6,7] >>> a.reverse() >>> a [7, 6, 5, 4, 3, 2, 1, 0] >>> a[::-1] [0, 1, 2, 3, 4, 5, 6, 7]
3. 分别统计列表 [True, False, 0, 1, 2] 中 True, False, 0, 1, 2的元素个数,发现了什么?
>>> a = [True,False,0,1,2] >>> a.count(True),a.count(False),a.count(0),a.count(1),a.count(2) (2, 2, 2, 2, 1) # count()不区分True和1、False和0,但None、''不会被视为False
4. 从列表 [True, 1, 0, 'x', None, 'x', False, 2, True] 中删除索引号为4的元素。
>>> a = [True,1,0,'x',None,'x',False,2,True] >>> a.pop(4) >>> a [True, 1, 0, 'x', 'x', False, 2, True]
列表是Python中使用非常频繁的数据结构,用户可以在列表的任何位置增加、删除和替换元素。下面再来看一下另外一种数据结构,即元组。
5. 将元组 (1, 2) 和 (3, 4) 合并成一个元组。
>>> (1,2) + (3,4) (1, 2, 3, 4)
6. 返回元组 ( 'Alice', 'Beth', 'Cecil' ) 中 'Cecil' 元素的索引号。
>>> ('Alice','Beth','Cecil').index('Cecil') 2
7. 判断 'Cecil' 是否在元组 ( 'Alice', 'Beth', 'Cecil' ) 中。
>>> 'Cecil' in ('Alice','Beth','Cecil') True
8. 返回在元组 (2, 5, 3, 7) 索引号为2的位置插入元素 9 之后的新元组。
>>> (*(2,5,3,7)[:2], 9, *(2,5,3,7)[2:]) (2, 5, 9, 3, 7)
此外,字符串也是Python应用中经常需要处理的数据类型,如果你认为自己已将字符串内建函数的使用烂熟于心了,不妨试试下面这几道题。
9. 返回字符串 'this is python' 中 'is' 首次出现和最后一次出现的位置。
>>> s = 'this is python' >>> s.find('is') # 首次出现的索引,未找到则返回-1 2 >>> s.rfind('is') # 最后一次出现的索引,未找到则返回-1 5
10. 判断字符串 'adS12K56' 是否完全为字母数字,是否全为数字,是否全为字母,是否全为ASCII码。
>>> s = 'adS12K56' >>> s.isalnum() True >>> s.isdigit() False >>> s.isalpha() False >>> s.isascii() True
11. 清除字符串 ' python ' 左侧、右侧,以及左右两侧的空白字符。
>>> s = ' python
' >>> s.lstrip() 'python
' >>> s.rstrip() ' python' >>> s.strip() 'python'
12. 将三个全英文字符串(比如,'ok', 'hello', 'thank you')分行打印,实现左对齐、右对齐和居中对齐效果。
>>> a = ['ok', 'hello', 'thank you'] >>> len_max = max([len(item) for item in a]) # len_max为最长字符串的长度 >>> for item in a: print('"%s"'%item.ljust(len_max)) "ok " "hello " "thank you" >>> for item in a: print('"%s"'%item.rjust(len_max)) " ok" " hello" "thank you" >>> for item in a: print('"%s"'%item.center(len_max)) " ok " " hello " "thank you"
13. 将 0.00774592 和 356800000 格式化输出为科学计数法字符串。
>>> '%E, %e'%(0.00774592, 356800000) '7.745920E-03, 3.568000e+08'
不知道这短短的十几道题目是否让你找到了自己的语感欠缺之处?如果你希望使用全部100道题目对自己的Python语感进行检验,可以下载这份练习题的完整文档。
百度网盘链接: https://pan.baidu.com/s/13UmEcSIaf01tngtD4fXkUw
提取码: aacz
这份练习题来自CSDN资深博主许向武(天元浪子)老师的最新力作《Python高手修炼之道:数据处理与机器学习实战》。
这本书非常适合初学者有针对性地进行编程技能提升,能够满足你从巩固基础、磨练技能再到拓展应用的学习需求,助你“修炼”为Python高手。
想成为高手当然就需要有高手引路。基于十多年的Python数据处理经验,许向武老师总结了新手初学Python中的常见盲点和误区,着重对其进行了梳理和讲解,力求让你少走弯路,直接站在高手的肩膀上看Python。
随着Python语言的热度上升,如今学习Python的资源、书籍名目纷杂,让学习者难以甄别和选择。不如就从这本Python专家撰写的“修炼指南”开始,从此告别“从入门到放弃”,走上Python高手修炼之路。
========
赠人玫瑰,手留余香,不要忘记点赞、收藏、关注 @人民邮电出版社 哦!
一键三连,感恩有你~