Python编程入门推荐:《Python编程:从入门到实践》学习心得

珠宝设计师分享Python入门书《Python编程:从入门到实践》学习心得,认为该书难度曲线平滑,适合新手,但查询性稍弱,建议搭配手册。

原文标题:编程入门只选一本书?非它莫属。

原文作者:图灵编辑部

冷月清谈:

本文作者分享了学习《Python编程:从入门到实践》的经验,作者本身是珠宝设计师,编程零基础。文章详细描述了作者从最初的困惑到逐渐理解书籍编排思路的过程,认为该书的章节难度曲线平滑,连贯性好,非常适合新手入门。作者通过实例,特别是具有挑战性的练习9-15,分享了学习过程中的心得体会,并强调了实践的重要性。同时,作者也指出了该书查询性较弱的不足,并推荐搭配《Python学习手册》使用,以方便快速查阅具体功能用法。总的来说,作者对这本书评价很高,认为非常适合Python初学者。

怜星夜思:

1、对于零基础的人来说,Python 真的比其他编程语言更容易入门吗?
2、文章中提到《Python编程:从入门到实践》的练习9-15比较难,有没有其他也做过的朋友分享下思路?
3、如果让你推荐一本 Python 进阶书籍,你会推荐哪一本呢?

原文内容

作者:Unstable Element 

出处:

www.zhihu.com/question/281789365/answer/2474959147

纯新入门,如果只推荐一本就是蟒蛇书《Python编程:从入门到实践》这本。

(作者购买的是第 2 版,现在已升级至第 3 版)

目前学完这本书的第一部分,有理解不足的地方请多指教。

我是做珠宝设计的,跟编程之间不说对口了,简直就是驴唇不对马嘴,但总觉得现在这时代,电脑的作用几乎与喝水吃饭差不多,如果不学一门电脑能“听懂”的语言就好像留学不会外语一样。

在大学必修课曾经学过一点 C,但纯粹为了过考试混学分并没有入脑,到现除了学过 C这件事之外的早都还给老师了,算是编程纯新也不为过。

刚开始决定学习的语言上也纠结了很久,但最终还是“人生苦短,我学Python”。搜索很多回答和视频之后决定购买蟒蛇书。

我困惑

一开始看“蟒蛇书”我是很困惑的,因为按照我一直学习的习惯,新的东西一上来是需要有一个概览性讲解,再进入具体教学的。

比如,先介绍什么是 Pyhon,什么叫变量,什么叫函数,什么叫方法等等一系列基础定义。再讲 Python 的编程的基础结构是什么样的,都有哪些基础数据类型,有哪些基本语法等等,然后再对对具体如何使用进行详细讲解。

但是“蟒蛇书”的章节并没有按照这种结构安排。

讲完字符串和数两种简单数据类型之后,进入列表讲解分成了列表简介和列表详细操作两章。然后又接 if语句一章,然后又是字典数据类型,再往后讲 input 和 while 循环,最后面才是函数、类等等内容。

我一开始看这本书的感觉就像是刚进画室,老师扔给我一根笔就让我开始画写生一样懵逼……怎么持笔?怎么画线?怎么一上来就写生了?

我懂了!

等我看完整个第一部分之后才明白过味儿来,比起一上来就堆砌各种定义、分类等等概述类叙述,这样的成书结构是非常循序渐进,非常照顾新手的。

一开始讲“字符串”和“数”两种简单变量非常容易理解,同时他们也是理解“列表”的基础。接下来再对“列表”这种数据类型进行两个章节的讲解,因为“列表”是这本书里第一个较为复杂的数据类型,需要更加细致的解释。

在讲解“列表”的同时也顺带介绍了 for 循环的用法以及与“列表”相似度很高的“元组”。因为 for 循环是遍历“列表”非常关键的一个语法,而遍历列表又是“列表”的最基础的功能之一。

学完“列表”这种较为复杂的数据类型之后,就可以开始上手一些较为“复杂”的逻辑语法了,因此将 Python 中最常用的条件判断语句—— if 语句,放在列表之后进行学习,同时结合讲解对条件判断极为重要的布尔值。

这样有助于初学者理解 if 语句如何结合复杂的数据类型完成各种工作,但同时又不至于太过于复杂,把人绕进去进而劝退。

再往后就是最为复杂的数据类型——“字典”。但有了前面对于“列表”的理解,完成这一章的学习并不是什么难事。再加上前面 for 语句、if 语句的提前讲解,对“字典”中的各种基本功能都可以丝滑的实现。

“字典”这一章中,也开始对“嵌套”这个概念进行了一定的讲解,字典嵌套列表、列表嵌套字典、列表嵌套列表,字典嵌套字典等等都有解释,越来越接近实际应用的情况。但也没有展开太多,我想同样是为了避免初学者劝退的情况,而这块应该也是 Python 使用中最灵活多变的部分之一,比起大量深入的举例子讲解,可能在实际工作中积累经验更加重要。

再往后就是 input 和 while 循环的使用。这里就开始涉及到输入数据、储存和管理数据以及复杂的 while 循环等等内容了,同样越来越接近实际应用的情况。到这一步说实话我已经有点吃力了,因为while语句、if语句再加上for循环以及列表、字典这两个数据类型,情况已经变得非常灵活。

第八章开始讲函数。其实函数和方法,早在“列表”的章节就已经开始有所使用了,但前面的讲解仅局限于具体用到的函数和方法,并没有从根本上对这两者进行解释。所以从这一节开始,正式对函数的定义方法、实现功能等进行详细解释。

但在这一章没有讲任何与 Python “方法”有关的东西,这让一度让我非常迷惑,眼见理论部分快看完了,却没看到任何对“方法”的原理性阐释,感觉缺失了一个很关键的板块。

怀着这样的疑惑,我开始看第九章“类”。看到这我才明白,原来类中定义的函数就叫做“方法”,“方法”与函数本就是一个东西!关于字符串的方法,关于列表的方法,关于字典的方法等等,其实本质都是函数!

想到这我也顺带明白了原来字符串也好,数也好,列表、字典也好他们本身都是“类”,是 Python 预设的“类”。我们在使用他们的时候就是将这些类进行实例化!豁然开朗!

最值得一提的是第九章的练习 9-15。前面所有的章节练习,其实都是对书中案例的复写与有限改变,分析一下案例代码就可以很快完成练习,没有难度。但 9-15 这个案例,完完全全需要自己去分析程序,自己找到解决方案,所用到的知识都是前面章节讲到的,但没有现成的东西可以“抄”。

给我的感觉就像是老师在黑板上写 1+1=2,我低下头做个笔记,再抬头黑板上就写满了哥德巴赫猜想……而且网上搜索第九章答案都没有这一题……就离谱……

9-15

这道题是一个关于彩票中奖并统计次数的问题,我直觉认为应该不会很难,毕竟这本书处处是为初学者着想的设计。本着把它当成期末考的心态,还是耐着性子仔细分析要求,写流程图分析,然后再反复参考前面的代码,终于成功跑出来了这道题。第一次跑通自己写的代码的感觉,就像是第一次把自己的设计变成现实!我可太激动了!!

把代码放在下面,如果有同样困在这道题的朋友可以借鉴一下,应该有优化的空间。

from random import choice

lottery = [1234567890'a''b''c''d']
lucky_number = []

while len(lucky_number) < 4:
 lucky_number.append(choice(lottery))

print(f"The Lucky Number is: {lucky_number}")


times = 0

while True:
 my_ticket = [choice(lottery), choice(lottery), choice(lottery), choice(lottery)]
 times += 1
if my_ticket != lucky_number:
continue
else:
  print(f"you win after {times} times")
break

再往后,第一部分的结尾两章就是关于文件的读写操作,异常处理方法,代码测试等等内容,都是实际应用中会遇到的多文件之间的操作或者各种问题的处理方法,跟着学就是。

第一部分的章节也不仅是我上面所说的这些内容,还有很多常用的函数、方法的用法、各种新手易犯的错误总结、甚至代码格式、编码风格等等都渗透在各个章节里面。

总结

看完第一部分的内容,我明白为什么这本书副标题叫“从入门到实践”。它章节之间的难度曲线非常平滑,每一章节都是在为下一个章节做铺垫,连贯性非常好,不知不觉就可以学进去。再结合 Python 注重实践的特性,甚至可以说是学习 Python 最佳的方案。

总结下来就是三个字:闭眼入

但是这本书也有它的不足。那就是这本书由浅入深,环环相扣的的章节设置,虽然容易让初学者读进去,但是它的查询性很弱,很难当成一本“Python字典”,在需要时能够快速重新查阅到某一个功能的具体用法。

所以我也补充购买了《Python学习手册》,作为蟒蛇书的补充,不着急看,根据需要用到的时候再去翻阅。

学习 Python 让我久违的找到了那种有所得的兴奋感,好像又打开了新世界的大门!

《Python Cookbook》也不错。这本书有很多实用的代码示例,覆盖了各种常见的编程场景。遇到问题的时候可以查阅,学习解决问题的思路。

从教学的角度看,Python 的确更受欢迎。很多大学的CS入门课程都选择 Python 了。主要是环境配置简单,能快速看到成果,能激发学习兴趣。

进阶的话,我推荐《流畅的Python》。这本书讲了很多 Python 的底层原理和高级特性,能让你对 Python 有更深入的理解。不过这本书有一定的难度,需要有一定的 Python 基础。

9-15 我当时是参考了一些概率论的知识。虽然是编程题,但是如果能理解彩票中奖的概率,写代码的思路就更清晰了。可以先计算出中奖的概率,然后用循环模拟多次购买,看看实际结果是否接近理论概率。

哈哈哈,握手!9-15确实卡了我好久,当时我理解的难点在于如何模拟彩票开奖和用户购买彩票这两个过程,并且要统计中奖次数。我的思路是先把彩票号码和用户彩票都用列表表示,然后比较两个列表是否相等。如果相等就停止循环,输出次数。