记录学习《自学是门手艺》第二阶段:“脱盲”。
今天是2019年12-9号,距离我开始学习这本书(或者说学习Python这门语言)第27天。除去中间一些休息时间,算起来应该也有3周左右的时间吧。
完成的内容:
完成了Part1完整的2遍学习。第一遍只看书,并尽可能多的理解书中所讲的每一个知识点。
看完第一遍后,开始登陆“XUE.cn”学习第二遍。第二遍是一边读原文,一边在网页上动手操作:通过反复修改书中的代码案例来更深入的理解知识点。这样一来,比起第一遍的只是看,学到的东西要多一些。因为在操作修改代码的时候要动更多的脑。另外因为网上每一小节都有志愿者出一些测试题,所以我在读完一小节并反复实践后,还会尝试做这些题目来更进一步的检测自己是否掌握。这样一来,第二遍的阅读速度就比起第一遍要慢得多得多(虽然第一遍已经很慢了)。
当然题目还是有很大难度的,我到目前为止,还只做了一小部分比较基础的(一共完成26道题)。有部分难题我去尝试过,但几乎都做错了。
学习收获:
读完两遍第一部分后,我最大的收获是:脱盲了。“脱盲”也是作者(李笑来老师)对读者(学习者)在读完第一部分的基本要求。这个脱盲是什么意思呢?就是一开始我对“Python” 这门语言(或是其他任何程序语言)是完全空白的状态。连最最基本的概念都不了解。就像我在第一次写读书心得时候所描述的那样:“程序代码对我来说就像是火星文”。以前的我完全不能想象也不相信自己有一天会开始学习这些“火星文”,而且居然还能学进去,不仅学进去,还能了解到其中一些概念,并自己能够看懂几个由这些火星文写出来的代码了。虽然自己还不太会写,也不能理解较为深一些的代码,但我觉得已经突破了自己,已经对“程序或是Python” 脱盲。
罗列一下具体所学:
1. 在学习完“值及其相应的运算”这一小节后,我对“赋值”、“常量”、“变量”、“操作符”、“布尔值”、“函数”、“列表”等有了最初步的了解。
并对最基本的字符与字符以及字符串与字符串之间的逻辑比较能够完全理解。比如:“a”>“b” 的结果是一个布尔值“Ture” 。
另外了解到很重要的一点:
从结构上来看,一切的计算机程序,都由且只由两个最基本的成分构成:
运算(Evaluation)和 流程控制(Control Flow)
2. 在“流程与控制”这一小节里,讲到了“if语句”、“for 循环”和“while循环”。虽然我还不能熟练的运用它们,但至少对它们有了一个初步的了解。
并了解了range()这个内建函数。
举个例子:如果要得到一个1-100之间的偶数(包含100)的列表,那么可以这样写:
list(range(2,101,2))
如果运行以下代码:
poem_x = """
热风吹雨洒江天
爱闲能有几人来
自作清歌传皓齿
学诗谩有惊人句
"""poem_y = """
向年时也自
曾破千金学
炼出个金刚
计我终岁需
"""
print([poem_x[i]for i in range(1,32,8)])
print([poem_y[i] for i in range(5,24,6)])
就会得到这样的结果:
['热', '爱', '自', '学']
['自', '学', '刚', '需']
3. 通过对“函数”一小节的学习,更深入的了解了函数的概念(是可被调用的完整的程序)。并了解了“print()”——“将传递给它的值输出到屏幕上”、“divmod(a,b)”——“相当于(a//b,a%b) 即a,b的商和余”、“pow(x,y[,z])”——“x的y次幂或者是x的y次幂并除以z的余数” 等函数的用法。
4. 最重要的一小节“字符串”。
* 字符码表的转换:eg.
ord("m") #运行结果是109
chr("128") #运行结果是“\x80”
* 字符串的标示: ' '," ", "' "'', """ """
* 字符串与数值之间的转换(用到了:int()、float()、str() 函数)
int("7") # 结果是 7 (转换成整数)
float("7") # 结果是7.0 (转换成浮点数)
str("7.777") # 结果是"7.777" (转换成字符串)
* 了解转义符 “\” 和它的搭配“n\”(Enter敲出来的东西即换行) 、“t\”(TAB敲出来的东西)
* 字符串的操作符: “+” 或者“ ” 作字符串之间的拼接;“*” 作复制。
* 了解如何用索引操作符根据索引 来提取(slicing)字符串中的一个或多个元素。例如我要提取“Python”这个字符串中的某一个或多个元素, 那么可以如下操作:
s="python"
s[1] #运行会显示“y”
s[2:] #运行会显示“thon”
s[2:5] #运行会显示“tho”
s[:5] #运行会显示“pytho”
s[1:5:2] #运行会显示“yh”
* 另外初略的了解了一下“Method” (还不能完全理解)。并了解了几个“Method”的用法,如大小写转换:
" str.upper()" (#表示将所有字母转换成大写) 、"str.lower()" (#将所有字母转换成小写)、"str.casefold()" (# 也是转换成小写,比lower能够处理更 多的欧洲语言)、"str.swapcase()" (# 首字母小写,其他大写)、"str.capitalize()" (# 句首字母大写,其他小写)、"str.title()" (# 每个单词首字母大 写)
# 总结到这里的时候发现一个之前的理解错误:"str.swapcase()" 这个Method它表示的意思是将原本的字母替换成与它相反的写法——也就是 如果原来的字母是小写,那么就替换成大写,如果是大写,就替换成小写。 我原本理解为就是首字母小写,其他都大写。我这样理解是因 为 我只盯着书中所举的例子——书中的例子刚好是首字母大写,其他字母都是小写,所以在用swapcase转换后自然就变成了首字母小写, 其他都大写了。今天我又尝试输入大小写不一样的话语来试验,最终发现了之前的理解漏洞。
(然而当初我还怀疑是作者弄错了,还去留言板留言了!!)
下面是我自己输入的一个例子:
s="hEllo pytHon. I really Like you."
s.swapcase()
# 以上代码输出结果为:'HeLLO PYThON. i REALLY lIKE YOU.'
所以知识的完全理解和掌握得通过不断的实践,反复的练习打磨才能实现呢!
* 搜索与替换:str.count() # 数目标的个数、str.find() # 找到目标最早出现的位置,如果没有找到会返回-1、str.rfind() #找到目标最后一次出现 的位置,如果没有找到就返回-1、str.index() #与str.find() 相同,但是如果没有找到目标的话会触发异常、 str.rindex() # 与str.rfind() 相同,
但如 果没有找到目标的话会触发异常。
了解 str.startswith() 和 str.endswith() 是用来判断一个字符串是否以某个子字符串起始或者结束的。
替换用“str.replace()”
另外:str.strip([chars]) # 去除子字符。(它的两个衍生—— "str.lstrip()" 表示只对左边的子字符进行去除; "str.rstrip()" 只对右边的子字符进 行去除)
str.split() 是对一串字符根据分隔符进行拆分。
(以上这些都能读懂,了解意思,但目前自己还不能熟练运用。后面需要继续实践。)
* 还有一个字符串的排版对于以后写程序排版很实用:str.center(width[, fillchar]) # 将字符串居中; str.ljust(width) # 将字符串靠左对齐放置; str.rjust(width) #将字符串向右靠齐放置。
* 格式化字符:str.format() 或者 f-string (即将特定的变量插入指定字符串特定位置的过程)
(后面还有个“字符串的属性”没有弄明白,需要反复再读)
5. 了解了“数据容器”的概念。同时对“列表(list)” 、“元组(Tuple)” 、“集合(Set)” 、“字典(Dictionary)” 等容器的用途有了更深一点的理解。同样是能够看懂书和例子,但多数还不知道如何运用。
学习心得:
首先是不害怕:
第一,心里上的不要对新事物添加过高的难度从而让自己对学习它产生害怕的心理。
第二,要不害怕麻烦。笑来老师在书中引用他妈妈常常对他唠叨的一句话对我的触动非常大:“怕麻烦,那还活着干嘛啊?活着多麻烦啊!”
要知道之前的我的确大部分时候都是怕麻烦的啊!所以才很难把一件事做得很好。为此我走过了多少的弯路......
所以现在的我谨记这句箴言,开始在学习这件事情上,不怕麻烦。不知道的概念去查,查不到就先记下,等学到后面接触到更多的信息后,再返回去试试看自己能不能理解。如果还是不能理解,就再继续读,或者在讨论区留言求助。
其次是听老师的话:
因为本书的作者做过老师,因此他对于学生的心理实在太了解。以至于他在书中不惜插入很多给读者(学习者)做“心理建设”的内容。可见老师的用心良苦。他的每一句话都深刻并直指人心。所以他的每一条建议,作为学习者都要听。不仅要听,还要按照去做,踏踏实实的去践行。也只有踏实去做了,最后才能真正的有收获,并且也才能够真正的理解到老师的苦心。
那么老师(即本书作者:李笑来老师),他在本书中(目前我看到的第一部分)反复强调的是哪几点呢?在此我再分享一下:
* “自学能力很重要,没有自学能力的人没有未来”
* “ 只靠阅读习得新技能(对的,只靠阅读)”
* “学,就需要重复,甚至很多次的重复”
* “刻意思考哪里需要刻意练习 (多琢磨、多思考、多练习、多实践)”
* “阅读官方源文档教材(请牢记且遵守这个原则:第一查询对象只能是官方文档)”
下一阶段学习目标:
对于下一阶段的学习,我必定要继续听老师的话:
认真反复阅读第一部分,并去做更多的题目来熟悉Python的基础知识,同时养成查阅官方英文源文档的习惯,直到能够熟练掌握到80%以上,再进行下一部分的阅读。
此外,还要多总结(这也是老师提出的要求之一)。这一点我今天就真真切切的收获到了: 今天写这篇文章的时候,特别是在总结所学的那部分,就发现了我又get 到了几个之前懵懂的概念,甚至还发现了一处之前理解错误的地方。
“脱盲”只是作为一个新手最初阶段的最基本要求。我希望跟着书本和官方的资料最终能够达到熟练运用Python的目的。加油!