零基础入门学习Python(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-26 15:34:36

点击下载

作者:小甲鱼

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

零基础入门学习Python(第2版)

零基础入门学习Python(第2版)试读:

前言

时光荏苒,一晃间,距离《零基础入门学习Python》出版(2016年11月)已经过去两年多了,在这段时间里,Python逐步走入了大家的视野,这门语言因其简洁的语法风格,在云计算、金融分析、人工智能、科学运算和自动化运维等领域上都有很好的应用,所以被越来越多的人所认识和接受,其使用率得到了大幅度的提升。《零基础入门学习Python》一经出版便受到了广大读者的欢迎,累计销售13万册,在出版后两年多的时间里,收到了很多读者朋友们的反馈,大部分的读者朋友给予了很高的评价,小甲鱼在此由衷地感谢大家。同时,也注意到朋友们提出的一些疑问、意见和建议。因此,在第2版中,小甲鱼对所使用的Python版本进行了更新(Python 3.7);对书中存在的不足进行了弥补;引入了更多有趣的案例;添加了更多实用的模块讲解等。本书更新和改进内容(1)所有案例均使用Python 3.7版本代替了原来的Python 3.3,改写了大部分知识点的例子,使读者学习起来更富有趣味性。(2)考虑到现实中的开发场景,增加了一些案例:

• 在爬虫案例部分引入了流行的Request模块;

• 增加了“爬取豆瓣Top250电影排行榜”和“爬取网易云音乐的热门评论”案例;

• Scrapy爬虫框架部分,采用了Anaconda来安装Scrapy,使用Scrapy 1.5.0版本进行演示。(3)考虑到“正则表达式”和“Scrapy爬虫框架”在实际开发中的应用非常广泛,将其从第1版中的第14章(论一只爬虫的自我修养)中独立出来,添加了更多的示例,使得内容更为翔实、丰富。(4)修改了第1版中的一些差错,在此要再次感谢各位读者提出的疑问,使小甲鱼能够发现书中的不足之处。本书配套资源和网站支持

• PPT课件请在清华大学出版社网站本书页面下载。

• 程序源代码和小甲鱼精心录制的94集(1800分钟)视频教程,请扫描书中对应二维码获取。

注意:书中给出了下载程序源代码的二维码和视频观看二维码,请先扫描封四刮刮卡中的二维码进行注册(每个刮刮卡只能注册一个用户),之后再扫描相关二维码即可获得配套资源。

• 同时,对于书中没有展开详述的内容提供了【扩展阅读】,读者可访问书中的相关网址或扫描对应位置的二维码进行阅读。部分原创的内容并不是免费提供的,读者可自行选择进行购买阅读。

• 本书还提供了额外的配套课后作业,如有需要,请在鱼C论坛(https://fishc.com.cn)或联系鱼C工作室的小客服(https://fishc.taobao.com)购买学习。

• 如果在学习中遇到困难,可以到鱼C论坛或关注鱼C工作室微信公众号获取相关知识,与各位网友们相互交流和讨论。论坛中的提问互助具有知识累积的特点,因为初学者很多问题是一样的,所以不妨在提问之前先在论坛搜索一下相关的关键词,一般都可以找到答案。

由于小甲鱼的水平有限,书中难免有一些错误和不准确的地方,恳请各位读者不吝指正,有兴趣的读者可发送邮件至workemail6@163.com,期待收到大家的意见和建议。鱼C工作室微信公众号本书源代码和安装包下载

我们一直在努力耕耘这么一片简单的土壤,虽然没有达到尽善尽美,但在大家的努力下,已初见雏形,并且在论坛上已经聚拢了很多超厉害的“大牛”!

Fake it till they make it ——假装直到真的成功。

最后还是那句话,小甲鱼渴望和大家一起成长,十年前我们仰望星空,十年后我们将俯视大地。未来的天空,必将为我们留下一片灿烂的曙光!小甲鱼2019年3月说明:文中需扫码阅读的请扫此付费二维码。第1版前言

Life is short. You need Python。——Bruce Eckel

上边这句话是Python社区的名言,翻译过来就是“人生苦短,我用Python”。

我和Python结缘于一次服务器的调试,从此便一发不可收拾。我从来没有遇到一门编程语言可以如此干净、简洁。使用Python,可以说是很难写出“丑陋”的代码。我从来没想过一门编程语言可以如此简单,它太适合零基础的朋友踏入编程的大门了,如果我有一个八岁的孩子,我一定会毫不犹豫地使用Python引导他学习编程,因为面对它,永远不缺乏乐趣。

Python虽然简单,其设计却十分严谨。尽管Python可能没有C或C++这类编译型语言运行速度那么快,但是C和C++需要你无时无刻地关注数据类型、内存溢出、边界检查等问题。而Python,它就像一个贴心的仆人,私底下为你都一一处理好,从来不用你操心这些,这让你可以将全部心思放在程序的设计逻辑之上。

有人说,完成相同的一个任务,使用汇编语言需要1000行代码,使用C语言需要500行,使用Java只需要100行,而使用Python,可能只要20行就可以了。这就是Python,使用它来编程,你可以节约大量编写代码的时间。

既然Python如此简单,会不会学了之后没什么实际作用呢?事实上并不用担心这个问题,因为Python可以说是一门“万金油”语言,在Web应用开发、系统网络运维、科学与数字计算、3D游戏开发、图形界面开发、网络编程中都有它的身影。目前越来越多的IT企业,在招聘栏中都有“精通Python语言优先考虑”的字样。另外,就连Google都在大规模使用Python。

好了,我知道过多的溢美之词反而会使大家反感,所以我必须就此打住,剩下的就留给大家自己体验吧。

接下来简单地介绍一下这本书。2016年,出版社的编辑老师无意间看到了我的一个同名的教学视频,建议我以类似的风格写一本书。当时我是受宠若惊的,也很兴奋。刚开始写作就遇到了不小的困难——如何将视频中口语化的描述转变为文字。当然,我希望尽可能地保留原有的幽默和风趣——毕竟学习是要快乐的。这确实需要花不少时间去修改,但我觉得这是值得的。

本书不假设你拥有任何一方面的编程基础,所以本书不但适合有一定编程基础,想学习Python 3的读者,也适合此前对编程一无所知,但渴望用编程改变世界的朋友!本书提倡理解为主,应用为王。因此,只要有可能,都会通过生动的实例来让大家理解概念。

编程知识深似海,没办法仅通过一本书将所有的知识都灌输给你,但我能够做到的是培养你对编程的兴趣,提高你编写代码的水平,以及锻炼你的自学能力。

最后,本书贯彻的核心理念是:实用、好玩、参与。小甲鱼2016年7月第1章 就这么愉快地开始吧1.1 获得Python视频讲解

我观察到这么一个现象:很多初学的朋友都会在学习论坛上问什么语言才是最好的,他们的目的很明确,就是要找一门“最好”的编程语言,然后持之以恒地学习下去。没错,这种“执子之手,与子偕老”的专一精神是我们现实社会所推崇的。但在编程的世界里,我们并不提倡这样。我们更推崇“存在即合理”,当前热门的编程语言都有其存在的道理,它们都有各自擅长的领域和适用性。因此没办法通过某个单一的指标去衡量哪一门语言才是最好的。

Python的语法非常精简,对于一位完美主义者来说,Python将是他爱不释手的伙伴。Python社区的目标就是构造完美的Python语言!本书将使用Python 3来进行讲解,而Python 3不完全兼容Python 2的语法,这样做无疑会让大多数程序员心生不满,因为他们用Python 2写的大量代码经过层层调试已经趋近完美,并已部署到成熟的生产环境中。对Python 2的不兼容,意味着他们需要将这些应用进行转换和重新调试,甚至重构……但是,Python社区仍然坚持要舍弃Python 2,推出全新的Python 3。是的,只有勇敢地割掉与时代发展不相符的瑕疵部分,才能缔造出真正的完美体验!“工欲善其事,必先利其器”。我们要成为“大牛”,要用Python去拯救世界,要做的第一件事就是下载一个Python的安装程序,并成功地将它安装到计算机上。

安装Python非常容易,可以在它的官网找到最新的版本并下载,地址是http://www.python.org。

如图1-1所示,进入Python官网后找到Download字样,单击“Latest: Python 3.7.0”超链接,即可找到Python 3.7.0的下载地址。注意:

本书使用的版本为Python 3.7.0,通常情况下,只需要下载最新版本的Python 3即可,不影响学习。图1-1 下载最新版的Python 3

在新打开的网页下方找到Files,这里有适用于各种操作系统的Python安装包,如图1-2所示。图1-2 Python安装包

根据使用的操作系统,下载对应的软件安装包即可。小甲鱼这里的操作系统是Windows 10(64位),那么应该单击Windows x86-64 executable installer。

安装Python 3非常简单,双击打开下载好的安装包,按照默认选项安装即可。1.2 从IDLE启动Python

IDLE是一个Python shell,shell的意思就是“外壳”,是一个通过输入文本与程序交互的途径。像Windows的cmd窗口,像Linux那个“黑乎乎”的命令窗口,它们都是shell,利用它们就可以给操作系统下达命令。同样,可以利用IDLE这个shell与Python进行互动。

>>>提示符的含义是:Python已经准备好了,在等着你输入指令呢!如图1-3所示,可以看到Python已经按照我们的要求去做了,在屏幕上打印I love FishC.com这个字符串(注:这里打印的意思是显示到屏幕上)。这说明什么?没错,说明我们与Python的第一次亲密接触是“来电的”,她完全能够理解我们的想法。图1-3 在Python的IDLE中输入命令1.3 失败的尝试

像下面这样输入,Python就会“笨笨地”出错:

其实Python 3哪里是“笨”,她只是小气,所以显得蠢萌蠢萌的。我们仿佛听到她在说:为什么此时此刻你跟我在一起还想着前任?为什么你跟我在一起还想着其他人,小C她哪点儿比我好,她还要加分号呢,我可不用!

大家看到上面的代码中井号(#)后边加了一段中文,井号起到的作用是注释,也就是说,井号后边的内容是给人们看的,并不会被当作代码运行。1.4 尝试点儿新的东西

现在尝试点儿新的东西,在IDLE中输入print(5+3)或者直接输入5+3,看一下Python是否会有响应。

看起来Python还会做加法!这并不奇怪,因为计算机最开始的时候就是用来计算的,任何编程语言都具备计算能力。接下来看看Python在计算方面有何神奇之处。

不妨再试试计算1234567890987654321 * 9876543210123456789:

怎么样?如果用C语言实现估计很费劲吧,要利用数组做大数运算,在这里Python则可以轻而易举地完成。

还有呢,大家试试输入print("Well water " + "River"):

我们看到“井水”和“河水”又友好地在一起生活了,祝它们幸福吧!1.5 为什么会这样

再试试print("I love python\n" * 3):

哇,字符串和数字还可以做乘法,结果是重复显示N个字符串。既然乘法可以,那不妨试试加法,如print("I love python\n" + 3):

失败了!这是为什么呢?大家不妨课后自己思考一下。第2章 用Python设计第一个游戏2.1 第一个小游戏视频讲解

有读者可能会很惊讶:“小甲鱼(注:作者),你在开玩笑吗?都还没有开始讲Python语法就教开发游戏啦?难道不打算先讲讲变量、分支、循环、条件、函数等常规的内容吗?”

没错,大家如果继续学下去就会发现,本书的教学会围绕着个性鲜明的实例来展开,跟着本书完成这些实例的编写,你会发觉不知不觉中那些该掌握的知识,已经化作身体的一部分了。这样的学习方式才能充满快乐,并让你一直期待下一章节的到来!

好,今天来讲一下“植物大战僵尸”这款游戏的编写……当然是不可能的,虽然说Python容易入门,但像“植物大战僵尸”这类游戏要涉及碰撞检测、边缘检查、画面刷新、音效等知识点,需要将这些基础知识累积完成才能开始讲。

目前对于我们所掌握的基础知识……貌似只能讲print()这个BIF,哦,BIF的概念甚至还没讲解……不过请淡定,这一点儿也不影响我们今天的节奏。

那么今天是一个什么样的节奏呢?今天打算讲一个文字游戏。

先来看下面这段代码,并试图猜测一下每条语句的作用:

这里要求大家都动动手,亲自输入这些代码,需要做的是:

• 打开IDLE。

• 选择File→New File命令(也可以直接使用Ctrl+N快捷键,在很多地方这个快捷键都是新建一个文件的意思)。

• 将上面的代码依次输入(注意:空白处的缩进是一个Tab的距离)。

• 按快捷键Ctrl+S,将源代码保存为名为p2_1.py的文件。

• 输完代码一起来体验一下,按下F5键,开始运行(也可以选择Run→Run Module命令)。

程序执行结果如下:提示:

Tab按键的作用:(1)缩进。(2)IDLE会提供一些建议,例如,输入“pr TAB”会显示所有可能的命令供参考。

OK,我们是看到程序成功地“跑”起来了,但坦白说,这也配叫游戏吗?呃……没事啦,我们慢慢改进。好,我们说下语法。

有C-like语言(泛指语法类似C语言的编程语言)编程经验的读者可能会受不了,变量呢?声明呢?怎么直接就给变量定义了呢?有些真正零基础的读者可能还不知道什么是变量,不用担心,随着本书内容的展开,大家很快就能掌握相关的知识。有些读者可能发现这个小程序没有任何大括号,好多编程语言都用大括号来表示循环、条件等的作用域,而在Python里是没有的。在Python中,只需要用适当的缩进来表示即可。2.2 缩进

有人说Guido van Rossum(Python的作者)是因为不喜欢大括号,才发明了Python。

缩进取而代之,它是Python的灵魂,缩进的严格要求使得Python的代码显得非常精简并且有层次。但是,在Python里对待代码的缩进要十分小心,因为如果没有正确地使用缩进,代码所做的事情可能和我们的期望相差甚远。

如果在正确的位置输入冒号(:),IDLE会在下一行自动进行缩进。正如2.1节中的代码,在if和else语句后边加上冒号(:),然后按下回车键,第二行开始的代码会自动进行缩进。if条件下面有两个语句都带有一个缩进,说明这两个语句是属于if条件成立后所需要执行的语句。换句话说,如果if条件不成立,那么两个缩进的语句将不会被执行。

if-else是一个条件分支,if后边跟的是条件,如果条件成立,就执行以下缩进的所有内容;如果条件不成立,有else的话就执行else下缩进的所有内容。条件分支的内容在后边我们还会做详细的介绍。2.3 BIF

接下来学习一个新的名词:BIF。

BIF就是Built-in Functions,内置函数的意思。什么是内置函数呢?为了方便程序员快速编写脚本程序(脚本就是要代码编写速度快、快、快),Python提供了非常丰富的内置函数,只需要直接调用即可。例如print()是一个BIF,它的功能是“打印到屏幕”,就是说把括号里的内容显示到屏幕上;input()也是一个BIF,它的作用是接收用户输入并将其返回,在2.1节的代码中,用temp这个变量来接收。Python的变量是不需要事先声明的,直接给一个合法的名字赋值,这个变量就生成了。

在IDLE中输入dir(_ _builtins_ _),可以看到Python提供的内置函数列表:

help()这个BIF用于显示BIF的功能描述:

有些读者可能会觉得,这么多BIF根本就记不过来,怎么办?大家不用担心,在接下来的每一个环节,小甲鱼都会教大家几个常用的BIF用法,然后在课后作业(注:每节课对应的课后作业需要在鱼C论坛完成,这部分的内容不属于本书免费提供的内容,请读者自行申请或购买,网址为http://bbs.fishc.com/forum-243-1.html)中通过练习强化大家的记忆。所以,大家只要严格跟着小甲鱼的脚步走,课后练习坚持自己独立完成,相信即使觉得自己记性不好的朋友,也可以做到倒背如流!第3章 成为高手前必须知道的一些基础知识3.1 变量视频讲解

在改进小游戏之前,有些必须掌握的知识需要来讲解一下。

当为一个值起名字的时候,它将会存储在内存中,我们把这块内存称为变量(variable)。在大多数语言中,把这种行为称为“给变量赋值”或“把值存储在变量中”。

不过,Python与大多数其他计算机语言的做法稍有不同,它并不是把值存储在变量中,而更像是把名字“贴”在值的上边。所以,有些Python程序员会说Python没有变量,只有名字。变量就是一个名字,通过这个名字,可以找到我们想到的东西。

看个例子: >>> teacher = "小甲鱼" >>> print(teacher) 小甲鱼 >>> teacher = "老甲鱼" >>> print(teacher) 老甲鱼

变量为什么不叫“恒量”而叫“变量”?正是因为它是可变的!再看另一个例子: >>> x = 3 >>> x = 5 >>> y = 8 >>> z = x + y >>> print(z) 13

该例子先创建一个变量,名字叫x,给它初始化赋值为3,然后又给它赋值为5(此时3就被5替换掉);接下来创建另外一个变量y,并初始化赋值为8;最后创建第三个变量z,它的值是变量x和y的和。

同样的方式也可以运用到字符串中: >>> myteacher = "小甲鱼" >>> yourteacher = "老甲鱼" >>> ourteacher = myteacher + yourteacher >>> print(ourteach?er) 小甲鱼老甲鱼

这种字符串加字符串的语法,在Python里称为字符串的拼接。提示:

• 在使用变量之前,需要对其先赋值。

• 变量名可以包括字母、数字、下画线,但变量名不能以数字开头,这与大多数高级语言是一样的——受C语言影响,或者说Python这门语言本身就是由C语言写出来的。

• 字母可以是大写或小写,但大、小写是不同的。也就是说,fishc和FishC对于Python来说是完全不同的两个名字。

• 等号(=)是赋值的意思,左边是名字,右边是值,不能写反了。

• 对变量的命名理论上可以取任何合法的名字,但作为一名优秀的程序员,请尽量给变量取一个看起来专业一点儿的名字。3.2 字符串

到目前为止,我们所认知的字符串就是引号内的一切东西。字符串也称为文本,文本和数字是截然不同的。

如果直接让两个数字相加,那么Python会直接将数字相加后的结果告诉你: >>> 5 + 8 13

但是如果在数字的两边加上了引号,就变成了字符串的拼接,这正是引号带来的差别: >>> '5' + '8' '58'

要告诉Python你在创建一个字符串,就要在字符两边加上引号,可以是单引号或双引号,Python表示在这一点上不挑剔。但必须成对,不能一边用单引号,另一边却用双引号,这样Python就不知道你到底想干嘛了: >>> 'Python I love you!" SyntaxError: EOL while scanning string literal

那如果字符串内容中需要出现单引号或双引号,怎么办? >>> 'Let's go' SyntaxError: invalid syntax

像上面这样写,Python会误解你的意思(认为'Let'是一个字符串,而s go'是另一个不完整的字符串),从而产生错误。

有两种方法来改进。第一种比较常用,就是使用转义符号(\)对字符串中的引号进行转义,这样Python就知道这个引号是要直接输出的: >>> 'Let\'s go' "Let's go"

还有一种方法,就是利用Python既可以用单引号也可以用双引号表示字符串这一特点,只要用上不同的引号表示字符串,那么Python就不会误解你的意思啦。 >>> "Let's go" "Let's go"3.3 原始字符串

看起来好像反斜杠是一个好东西,那不妨试试打印C:\now,代码如下: >>> string = 'C:\now' >>> string 'C:\now' >>> print(string) C: ow

打印结果并不是我们预期的,原因是反斜杠(\)和后边的字符(n)恰好转义之后构成了换行符(\n)。这时候有朋友可能会说,用反斜杠来转义反斜杠不就可以啦。嗯,不错,的确可以用反斜杠对自身进行转义: >>> string = 'C:\\now' >>> string 'C:\\now' >>> print(string) C:\now

但如果一个字符串中有很多个反斜杠,我们就不乐意了。毕竟,这不仅是一个苦差事,还可能使代码变得混乱。

不过大家也不用怕,因为在Python里有一个快捷的方法,就是使用原始字符串。原始字符串的使用非常简单,只需要在字符串前边加一个英文字母r即可: >>> string = r'C:\now' >>> string 'C:\\now' >>> print(string) C:\now

在使用字符串时需要注意的一点是:无论是否为原始字符串,都不能以反斜杠作为结尾(注:反斜杠放在字符串的末尾表示该字符串还没有结束,换行继续的意思,下一节会介绍)。如果坚持这样做就会报错: >>> string = 'FishC\' SyntaxError: EOL while scanning string literal >>> string = r'FishC\' SyntaxError: EOL while scanning string literal

大家不妨考虑一下:如果非要在字符串的结尾加个反斜杠,有什么办法可以来灵活实现呢?3.4 长字符串

如果希望得到一个跨越多行的字符串,例如:

从明天起,做一个幸福的人

喂马,劈柴,周游世界

从明天起,关心粮食和蔬菜

我有一所房子,面朝大海,春暖花开

从明天起,和每一个亲人通信

告诉他们我的幸福

那幸福的闪电告诉我的

我将告诉每一个人

给每一条河,每一座山取一个温暖的名字

陌生人,我也为你祝福

愿你有一个灿烂的前程

愿你有情人终成眷属

愿你在尘世获得幸福

我只愿面朝大海,春暖花开

嗯,看得出这是一首非常有文采的诗,那如果要把这首诗打印出来,用我们学过的知识,就不得不使用多个换行符: >>> print("从明天起, 做一个幸福的人\n喂马, 劈柴, 周游世界\n从明天起, 关心粮食和 蔬菜\n我有一所房子, 面朝大海, 春暖花开\n\n从明天起, 和每一个亲人通信\n告诉他们我 的幸福\n那幸福的闪电告诉我的\n我将告诉每一个人\n\n给每一条河,每一座山取一个温暖 的名字\n陌生人, 我也为你祝福\n愿你有一个灿烂的前程\n愿你有情人终成眷属\n愿你在尘 世获得幸福\n我只愿面朝大海, 春暖花开\n")

如果行数非常多,就会给我们带来不小的困扰了……好在Python总是设身处地地为我们着想:只需要使用三重引号字符串("""内容""")就可以轻松解决问题:

最后需要提醒大家的是,编程的时候,时刻要注意Speak English!初学者最容易犯的错误(没有之一)就是误用了中文标点符号。“眼尖”的你看出来下面代码为什么报错吗? >>> print(“Please speak english!”) SyntaxError: invalid character in identifier

是的,该代码中小括号和双引号都使用了中文标点符号,导致Python一头雾水,给出了报错信息。

切记:编程中我们使用的所有标点符号都应该是英文的!3.5 改进我们的小游戏视频讲解

不得不承认,2.1节的小游戏真是太简单了。有很多朋友为此提出了不少的建议,小甲鱼做了一下总结,大概有以下三个方面需要改进:(1)当用户猜错的时候程序应该给点提示,例如,告诉用户当前输入的值和答案相比是大了还是小了。(2)每运行一次程序只能猜一次,应该提供多次机会给用户猜测,至少要三次。(3)每次运行程序,答案可以是随机的。因为程序答案固定,容易导致答案外泄,例如,小红玩了游戏之后知道正确答案是8,就可能会把结果告诉小明,小明又会告诉其他人。所以,我们希望游戏的答案可以是随机的。

这些挑战对于我们如此聪明的读者来说一定不成问题,让我们抄起“家伙”(Python)来一个个解决掉!3.6 条件分支

第一个改进要求:当用户猜错的时候程序应该给点提示,例如告诉用户当前输入的值和答案相比是大了还是小了。程序改进后(假如答案是8):

• 如果用户输入3,程序应该提示比答案小了。

• 如果用户输入9,程序应该提示比答案大了。

这就涉及比较的问题了,作为初学者可能不大熟悉计算机是如何进行比较的,但想必大家都认识大于号(>)、小于号(<)以及等于号(==)。注意:

在Python中,用两个连续等号表示等于号,用单独一个等号表示赋值。那不等于呢?嗯,不等于这个有点特殊,用感叹号和一个等号搭配来表示(!=)。

另外,还需要掌握Python的比较操作符:<、<=、>、>=、==、!=。

在IDLE中输入两个数以及比较操作符,Python会直接返回比较后的结果: >>> 1 < 3 True >>> 1 > 3 False >>> 1 == 3 False >>> 1 != 3 True

这里1和3进行比较,判断1是否小于3,在小于号左右两边分别留了一个空格,这不是必需的,但代码量一多,看上去会美观很多。Python是一个注重审美的编程语言,这就跟人一样,人长得怎样是天生的,一般无法改变,但人的气质修养可以从每个细小动作看出来。程序也一样,你可以不修边幅、邋邋遢遢,只求不出错误,但别人阅读代码时就会很难受,不愿跟你一起合作开发;如果代码工整,注释得当,看上去犹如“大家”之作,那结果肯定就不言而喻了。

大家还记得if-else吧?如果程序只是一个命令清单,那么只需要笔直地一条路走到黑,但至少应该把程序设计得更聪明点——可以根据不同的条件执行不同的任务,这就是条件分支。

那现在把第一个改进要求的代码写出来:

分析:当guess和secret变量的值相等的时候,执行两个print语句;否则判断guess大还是secret大,并显示相应的提示信息。3.7 初识循环

第一个改进要求实现了,可是用户还是不高兴,他们会抱怨道:“为什么我要不停地重新运行这个程序呢?难道不能每次运行多给几次输入的机会吗?”

我们这个程序还好,几次尝试就可以成功了,但如果范围扩大为1~100,那么尝试的次数就要随之增加,总让用户不断地重新打开程序,这种程序的体验未免就太差了。

第二个改进要求:程序应该提供多次机会给用户猜测,专业点儿来讲就是程序需要重复运行某些代码。

下面介绍Python的while循环语法。

非常简单,对吧?Python向来如此,让我们一起来修改代码吧:

分析:先接收一次用户的输入,把值转换成整数后赋值给guess变量,然后判断该值是否为正确答案(8),如果是就不会执行循环体的内容(因为while循环执行的条件是guess不等于8);否则进入循环体,依次判断用户输入的数是大于8还是小于8,并分别给出提示信息。最后,要求用户再一次尝试。

聪明的读者可能已经发现了,这样改的话,程序的逻辑变成了“只有用户输入正确的数字,循环才能够结束”。这就与第二个改进要求有点不同了,所以大家不妨边思考边动手,看怎么改才能真正满足要求。

这里给一点提示:可以使用and逻辑操作符。

Python的逻辑操作符可以将任意表达式连接在一起,并得到一个布尔类型的值。布尔类型只有两个值:True和False,就是真与假。

来看例子: >>> (3 > 2) and (1 < 2) True >>> (3 > 2) and (1 > 2) False

很明显1 > 2客观上是不存在的,所以这个条件是个伪命题,因此and的结果为False。使用and逻辑操作符将左右两个条件串起来的时候,只有当两者同时成立,结果才能是True;否则均为False。大家可以自己多做几次实验来证明。3.8 引入外援

第三个改进要求:为了防止答案外泄,需要每次运行程序时答案均是随机生成的。

这个怎么实现呢?需要引入一个“外援”帮忙才行:random模块。

等等,模块这个名字怎么那么熟悉?

啊哈!想起来了,每次写完程序的时候,都要按一下快捷键F5运行,那里就显示着RUN MODULE,MODULE就是模块的意思。没错,我们编写的程序本身就是一个模块。

Python的发明者为了我们可以更快乐地使用好这门语言,在发布Python的时候还附带了非常多实用的模块供调用。其中,random模块就是与生成随机数相关的模块,这个模块里边有一个函数为randint(),它会返回一个随机的整数: >>> import random >>> random.randint(1, 10) 2 >>> random.randint(1, 10) 5 >>> random.randint(1, 10) 6

在使用一个外部模块之前,需要先导入。import random就是将random模块导入到当前文件中。然后调用random.randint(1, 10)函数,随机获取一个1~10的整数。

可以利用这个函数来进一步改进这个小游戏:

分析:该代码中,while语句使用and逻辑操作符将两个条件串联起来,只有当guess和secret变量的值不同,并且times的值小于3的时候,才会执行循环体的内容。而只要其中一个条件不成立,就会果断地退出循环。最后,只需要检查times是否小于3,即可判断用户是猜中了答案还是超过了允许的尝试次数。3.9 闲聊数据类型视频讲解

所谓闲聊,也称为gossip,就是一点小事可以聊上半天。下面就来聊一聊Python的数据类型。

在此之前可能已经听说过,Python的变量是没有类型的。对,没错,小甲鱼也曾经说过,Python的变量看起来更像是名字标签,想贴哪儿就贴哪儿。通过这个标签,就可以轻易找到变量在内存中对应的存放位置。

但这绝不是说Python就没有数据类型这回事儿,大家还记得'520'和520的区别吗?

没错,带了引号的,无论是双引号还是单引号或者是三引号,都是字符串;而不带引号的,就是数字。字符串相加称为拼接;数字相加就会得到两个数字的和: >>> '520' + '1314' '5201314' >>> 520 + 1314 1834

Python有很多重要的数据类型,不过这里不会一下全都教给大家。因为肯定一时半会儿也没法强记那么多(填鸭式记忆也不牢靠);其次,现在所要实践的内容还不需要这么多的数据类型来配合。所以,控制好每个阶段所学习的内容都是能够用得上的,避免做无用功。

Python的字符串类型已经简单讲过,后面还会对字符串进行深入的探讨,所以大家别吐槽小甲鱼怎么都是浅尝辄止,没有那回事儿!我们只是分阶段逐步渗透,逐层进行消化,一下讲得太深入,大家消化不了,教学也会变成纯理论化(小甲鱼知道“死板”的模式是大家最讨厌的)。

下面介绍一些Python的数值类型,如整型、浮点型、布尔类型、复数类型等。3.9.1 整型

整型说白了就是平时所见的整数,Python 3的整型已经与长整型进行了无缝结合,现在Python 3的整型类似于Java的BigInteger类型,它的长度不受限制,如果说非要有个限制,那只限于计算机的虚拟内存总数。

所以,使用Python 3可以很容易地进行大数运算: >>> 149597870700 / 299792458 499.004783836156433.9.2 浮点型

浮点型就是平时所说的小数,例如,圆周率3.14就是一个浮点型8数据,再例如地球到太阳的距离约1.5×10km,也是一个浮点型。Python区分整型和浮点型的唯一方式,就是看有没有小数点。

谈到浮点型,就不得不说一下E记法。E记法也就是平时所说的科学计数法,用于表示特别大和特别小的数。打个比方,如果给Python提供一个非常极端的数据,那么它可能会采用E记法来表示: >>> a = 0.0000000000000000000025 >>> a 2.5e-218

对于地球到太阳的距离1.5×10km,如果转换成米(m)的话,那就是一个非常大的数了(150 000 000 000),但是如果用E记法就是1.5e11(大写的E或小写的e都可以)。

其实大家应该已经发现了,这个E的意思是指数,指底数为10,E后边的数字就是10的多少次幂。例如,15 000等于1.5×10 000,也4就是1.5×10,E记法写成1.5e4。3.9.3 布尔类型

都说“小孩才分对错,大人只看利弊”,其实计算机也有只讲对错的时候。在Python中,布尔类型只有True和False两种情况,也就是英文单词的“对”与“错”。

例如,1 + 1 > 3,我们都知道是错的,Python也知道: >>> 1+1 > 3 False >>> 1+1 == 2 True

布尔类型事实上是特殊的整型,尽管布尔类型用True和False来表示“真”与“假”,但布尔类型可以当作整数来对待,True相当于整型值1,False相当于整型值0,因此下面这些运算都是可以的(最后的例子报错是因为False相当于0,而0不能作为除数)。提示:

把布尔类型当成1和0来参与运算这种做法是不妥的,容易引起代码的混乱。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载