书名:从0到1——Python快速上手
ISBN:978-7-115-58712-1
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 莫振杰
责任编辑 赵 轩
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
读者服务:
微信扫码关注【异步社区】微信公众号,回复“e58712”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。
作者根据自己多年的前后端开发经验,站在完全零基础读者的角度,详尽介绍了Python编程语言的基础知识,以及大量的开发技巧,包括Python语基本语法、运算符与表达式、流程控制语句、列表与元组、字符串、字典与集合、Python中使用正则表达式、函数、数值计算、时间日期等。所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。每章最后还提供了难度适中的习题,检验学习效果。
一本好的书就如一盏指路明灯,它不仅可以让你学得更轻松,更重要的是可以让你少走很多弯路。如果你需要的不是大而全的内容堆砌,而是恰到好处的知识讲解,那么不妨看一下“从0到1”这个系列的图书。
“就像经典的冰山理论,第一眼看到的美,只是全部创作的八分之一。”实际上,这个系列是我多年开发的经验总结,除了技术介绍外,也注入了非常多我自己的思考。虽然我是一名技术工程师,但实际上我也是对文字非常敏感的一个人。对于技术写作来说,我更喜欢用最简单的语言把最丰富的知识呈现出来。
在接触任何一门技术时,我都会记录初学者遇到的各种问题,以及自己的各种思考。所以我还是比较了解初学者的心态的,也知道怎样才能让初学者快速而无障碍地学习。在编写这个系列的图书时,我更多的是站在初学者的角度,而不是已学会者的角度。
这个系列从基本语法出发,延伸到了Python的各个重要领域,包括网络爬虫、数据分析、数据可视化等。“从0到1”系列的几本图书连贯性非常强,这样做也是为了能够让小伙伴们一步到位地进行系统学习,而不至于浪费大量时间在一些弯路上。
最后想要跟小伙伴们说的是,或许这个系列并不十全十美,但我相信其中独树一帜的讲解方式,能够让小伙伴们走得更快,走得更远。
● 完全零基础的初学者。
● 想要系统学习Python的工程师。
● 大中专院校相关专业的老师和学生。
绿叶学习网是我开发的一个开源技术网站,也是“从0到1”系列图书的配套网站。本书的所有配套资源(包括源码、答案、PPT等)都可以在上面下载。
此外,小伙伴们如果有任何技术问题,或想要获取更多学习资源,以及希望和更多技术“大牛”进行交流的,可以加入我们的官方QQ群:280972684、387641216。
本书所有数据均为便于小伙伴们理解的虚拟数据,不具备任何其他用途,仅供编程练习。并且数据的数值、单位皆为举例,不具备实际功能与价值。
在编写本书的过程中,我得到了很多人的帮助。首先要感谢赵轩老师(本书的责任编辑),谢谢他这么多年的信任,他是一位非常专业而又不拘一格的编辑。
感谢五叶草团队的一路陪伴,感谢韦雪芳、陈志东、秦佳、莫振浩这几位伙伴,花费大量时间对本书进行细致的审阅,并且给出了诸多非常棒的建议。
最后要特别感谢我的妹妹莫秋兰,她一直都在默默地支持和关心我。有这样一个能够懂得自己、既是妹妹也是朋友的人,是我一生中非常幸运的事情。
由于个人水平有限,书中难免会有疏漏之处,小伙伴们如果发现问题或有任何意见,可以到绿叶学习网或通过邮件(lvyestudy@qq.com)与我联系。
莫振杰
全栈工程师,产品设计师,涉猎前端、后端、Python等多个领域,熟练掌握JavaScript、Vue、React、Node.js、Python等多门技术;拥有一个高人气的个人网站——绿叶学习网,用于分享开发经验及各种技术。
他还是多本图书的作者,凭着“从0到1”系列图书,获得了“人民邮电出版社IT图书2020年最有影响力作者”称号。
本书由异步社区出品,社区(https://www.epubit.com/)为读者提供相关资源和后续服务。
本书提供彩图文件,如要获得此配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。
您还可以扫码右侧二维码, 关注【异步社区】微信公众号,回复“e58712”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎读者将发现的问题反馈给我们,帮助我们提升图书的质量。
当读者发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可(见下图)。本书的作者和编辑会对读者提交的勘误进行审核,确认并接受后,读者将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
扫描下方二维码,读者将会在异步社区微信服务号中看到本书信息及相关的服务提示。
我们的邮箱是contact@epubit.com.cn。
如果读者对本书有任何疑问或建议,请发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果读者有兴趣出版图书、录制教学视频,或参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果读者所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果读者在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请读者将怀疑有侵权行为的链接发邮件给我们。读者的这一举动是对作者权益的保护,也是我们持续为读者提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
很多人以为Python是最近几年才出现的一门编程语言,实际上并非如此。Python其实是著名的“龟叔”吉多·范罗苏姆(Guido van Rossum)在1989年为了打发无聊的节日而编写的。算下来,Python已经有30多年的历史了,现已成为一门非常成熟的编程语言,如图1-1所示。
图1-1
随着这几年云计算、大数据及人工智能的高速发展,Python已逐渐成为一门主流的编程语言。在TIOBE编程语言排行榜上,Python高居第二,已经超越了Java,仅次于C语言,如图1-2所示。
图1-2
注:TIOBE是编程界权威的编程语言排行榜。
Python的应用非常广泛,它就像一个技术润滑剂,大多数互联网公司都会用到它。很多大型网站,如YouTube、Instagram、知乎、豆瓣等,都是使用Python开发的。此外,很多大公司,包括Google、Facebook(现更名为Meta)等,都经常使用Python开发各种应用,如图1-3所示。
图1-3
Python是一门“万金油”语言,它几乎可以做你想做的任何事情,其主要用于以下这些方面。
● 云计算。
● 大数据。
● Web开发。
● 人工智能。
● 自动测试。
● 网络爬虫。
……
现在的编程语言非常多,每一门语言都有各自的技术特点和使用场景,而Python就像空气一样无孔不入,可以帮你解决大大小小、各种各样的问题。
Python社区中流行一句话:“Life is Simple, I use Python.”,中文可以理解为“人生苦短,我用Python”。Python的创始人“龟叔”给Python的定位是简洁、优雅、明确,如图1-4所示。
图1-4
Python是一门非常简洁、非常容易学习的语言。简洁是指它在很大程度上减少了编写代码的成本。例如完成同一个任务,使用C语言需要500行代码,使用Java需要100行代码,而使用Python可能只需要20行代码。
易于学习指的是Python相对其他编程语言(如C++、JavaScript等)来说,简化了很多概念,相对来说更容易学习,在很大程度上降低了我们的学习成本。
由于人工智能的盛行,以及Python本身具有简洁、易于学习的特点,很多高校甚至一些中学都已经开设了Python编程课。
Python本身具有“美与哲学”的特点,如果你想通过编程来解决生活中的问题,那么Python无疑是最好的选择。如果一个人一生只能选择一门编程语言,我会毫不犹豫地选择Python。如果你已经掌握了某门编程语言,也强烈推荐你选择Python作为第二编程语言。
Python有两个主流版本,分别是Python 2.X和Python 3.X,而本书内容是基于Python 3.X的。
实际上,Python 2.X和Python 3.X几乎是完全独立的两个大版本,它们各自的很多语法是不兼容的,并且很多基于Python 2.X的库在Python 3.X中是无法使用的。如果你是一个初学者,那么建议你直接学习Python 3.X,而不需要太关注Python 2.X的语法。
对于本书中的每一句话,我都反复推敲过,尽量把精华呈现给大家,并且注入了很多自己对学习的思考。相信大家在学习的过程中,能够感受到本书的“美与哲学”,同时也会看到本书跟其他技术书不一样的地方。
在众多编程语言中,Python可以说是非常容易入门的一门语言。即使你之前从来没有接触过编程,也可以很轻松地入门。实际上,现在很多中学都已经开设了Python编程课。所以不要总抱怨自己学不会,很可能是你没有足够的信心。
给小伙伴们一个很有用的建议:在学习任何编程语言的过程中,一定要养成查阅Python官方文档的习惯,因为这是最权威的参考资料,查阅的同时还能提高自己的英文水平。
当然了,如果想要更深入地学习Python,小伙伴们可以看一下“从0到1”系列的其他图书,这些书之间有着很强的关联性,可以让你少走很多的弯路。
本书每一章后面的练习题都是我精心挑选出来的,对提高编程能力有很大的帮助。很多题跟真正的Python开发工作直接挂钩,其中不少还是某些公司的面试题。小伙伴们一定要认真地把每一道题都做一遍。
本书旨在让你快速上手Python。读完本书,你便打下了坚实的基础,也达到了初级开发水平,接下来就可以开始学习更高级的技术,如网络爬虫、数据分析等。
如果你想要成为一名真正的Python工程师,想要更深入地学习Python,那么可以看一下本系列图书的进阶篇《从0到1——Python进阶之旅》。实际上,这本书是对我在多年开发工作中积累的经验的总结,也是我的作品中含金量最高的一本。
很多人在接触新技术的时候,喜欢在第一遍学习时就把每一个细节都弄清楚,事实上这是效率最低的学习方法。在第一遍学习时,如果有些知识实在没办法理解,那便直接跳过,等学到后面或看第二遍的时候,自然而然就懂了。
想要使用Python进行编程,先要在自己的计算机上安装Python。下面针对以下两个不同的操作系统,分别介绍如何安装Python。
● Windows系统。
● Mac系统。
这里要特别提醒一点,小伙伴们一定要根据自己计算机所采用的系统来安装,不然就无法使用Python进行编程。
在Windows系统中安装Python,只需要进行简单的几步操作就可以了。
① 下载Python。打开Python官网,在主导航栏中依次找到【Downloads】→【Windows】,如图1-5所示,然后单击【Python 3.X】按钮。
图1-5
② 安装Python。下载完成后,双击打开安装包。【Add Python 3.X to PATH】这个复选框默认是不勾选的,我们一定要手动将其勾选,不勾选的话会出现很多问题。勾选后单击【Customize installation】,如图1-6所示。
图1-6
单击【Customize installation】后,会看到图1-7所示的界面。这里没什么需要注意的,直接单击【Next】按钮即可。
图1-7
接着打开图1-8所示的界面,单击【Browse】按钮更改安装目录,然后单击【Install】按钮即可安装Python。
图1-8
至此,Python在Windows系统中就安装成功了。
Mac系统自带Python,只不过是2.X版本。因此我们需要额外安装Python 3.X版本。在Mac系统中安装Python,与在Windows系统中安装Python的方法是差不多的,具体如下。
① 下载Python。打开Python官网,在主导航栏中依次找到【Downloads】→【Mac OS X】,如图1-9所示,然后单击【Python 3.X】按钮。
图1-9
② 安装Python。下载完成后,双击打开安装包,其初始界面如图1-10所示。接下来,像安装普通软件一样进行安装就可以了。
图1-10
最后需要说明的是,Python可能会不断升级改版,如可能会从3.10升级到3.11。但只要是3.X版本,语法就不会变化太大,小伙伴们完全不用担心版本升级会带来问题。
Python的开发工具比较多,常用的有IDLE、PyCharm、VSCode、Sublime Text等。现在公认的最实用的三大Python开发工具是VSCode、PyCharm、Jupyter Notebook。对于开发工具,需要说明以下3点。
● Jupyter Notebook多用于数据分析,可以在接触了数据分析后再学习如何使用。
● 对于初学者来说,VSCode或PyCharm更适用。
● 由于Python自带了一个开发工具IDLE,因此我们也要了解一下如何使用IDLE。
为了满足不同人群的需求,本书会对IDLE、VSCode、PyCharm一一进行介绍。本节先介绍一下Python自带的开发工具——IDLE。
安装Python之后,我们可以在桌面左下角的“开始”菜单中找到【Python 3.X】→【IDLE(Python 3.X 64-bit)】,单击就可以打开IDLE,如图1-11所示。
图1-11
IDLE采用的是命令行的方式,我们在IDLE中输入print(1+1),然后按Enter键,可以看到输出了2,如图1-12所示。
图1-12
利用上一小节的方法编写代码,由于代码没有保存,关闭IDLE窗口后代码就会丢失,以后每次打开IDLE还得重新写一遍代码。实际上,我们可以把Python代码保存下来,以便下次打开的时候再次使用。
① 新建文件。在IDLE窗口左上角依次选择【File】→【New File】,即可创建一个新文件,如图1-13所示。
图1-13
② 保存文件。在新建的文件中输入代码print(1+1),然后在IDLE窗口左上角依次选择【File】→【Save As】,即可保存文件,如图1-14所示。Python文件的扩展名是“.py”。
图1-14
③ 打开文件。若要打开保存的Python文件,在IDLE窗口左上角依次选择【File】→【Open】,即可打开文件,如图1-15所示。在打开的Python文件中,按F5键即可运行文件,运行结果如图1-16所示。在菜单栏中选择【Run】→【Run Module】,也可以运行Python文件。
图1-15
图1-16
对于IDLE的使用,还有以下几点需要说明。
● 绝对不能使用Word或记事本来编写Python代码,因为Word保存的不是纯文本文件,而记事本会自动在文件开始的位置加上特殊字符,从而导致程序在运行时出现错误。
● 对于简单代码,我们可以直接在IDLE的初始界面中编写;对于复杂代码,建议大家使用“新建文件”的方式编写,编写完毕后再运行。
● 如果使用“新建文件”的方式编写代码,每次编写代码后,一定要保存代码后再运行代码,否则运行的是改动之前的代码或一个空文件。
● 在IDLE中,我们可以使用Tab键补全代码。这是IDLE提供的一个很强大的代码提示功能。例如,输入p,然后按Tab键,此时就会弹出所有以“p”开头的代码提示,如图1-17所示。
图1-17
最后需要特别说明的是,IDLE是Python自带的开发工具,可以快速启动及运行代码。如果你是一个初学者,可以尝试使用IDLE。不过它的功能实在是太简单了,在真实的工作中,我们使用得更多的是VSCode和PyCharm。
VSCode是现在非常热门的一款主流开发编辑器,它的功能非常强大,不仅可以用于Python开发,还可以用于前端开发、后端开发等。如果想要使用VSCode进行Python开发,我们需要完成以下3步。
● 安装VSCode。
● 安装插件。
● 运行代码。
不管是Windows系统还是Mac系统,VSCode的下载和安装方法都是一样的,只需要进行简单的两步操作就可以完成了。
① 下载VSCode。打开VSCode官网,在首页找到【Download for XXX】按钮,单击就可以自动下载VSCode了,如图1-18所示。
图1-18
② 安装VSCode。VSCode的安装非常简单,只需要像安装普通软件那样安装它就可以了。但这里并不建议把VSCode安装在C盘,而是推荐将其安装到其他盘中。安装完成之后,打开VSCode,其主界面如图1-19所示。
图1-19
VSCode是一个非常自由的开发工具,所以在默认情况下它是非常简洁的,并不会额外安装太多的插件。但是它的可定制化程度非常高,我们可以根据自己的需要安装一些插件。
如果想要使用VSCode编写Python代码,则需要安装下面3个插件。
● Chinese (Simplified) Language:简体中文包。
● Python:必备标准库。
● Code Runner:用于运行代码。
在VSCode中,所有插件的安装步骤都是一样的。首先单击“Extension(扩展)”(即插件商店)按钮,然后搜索你想要的插件的名称(一般是英文名),最后单击“Install(安装)”按钮就可以了,如图1-20所示。需要注意的是,如果插件没有生效,一定要重启一下VSCode。
图1-20
除了上面这些插件,小伙伴们还可以搜索一些关于Python的有用的插件,然后自行安装。
本小节介绍如何在VSCode中编写和运行Python代码。
① 创建项目。首先在任意一个磁盘中创建一个名为“python-test”的文件夹,然后在VSCode窗口的左上角依次选择【文件】→【打开文件夹】,打开刚刚创建的“python-test”,如图1-21所示。一个文件夹就相当于一个项目。
图1-21
② 创建文件。将鼠标指针移到窗口左侧面板的空白处,单击鼠标右键,在弹出的快捷菜单中选择【新建文件】,新建一个名为“test.py”的文件,如图1-22所示。其中,“.py”是Python代码文件的扩展名。
图1-22
③ 编写代码。在test.py中编写一段Python代码,如图1-23所示。编写完代码之后,一定要记得保存,一定要记得保存代码。很多初学者会忘记保存代码,从而出现了一堆乱七八糟的问题。
图1-23
④ 运行代码。在VSCode窗口顶部依次选择【终端】→【新终端】,打开一个终端窗口。这个终端窗口非常重要,不管你是进行Python开发,还是进行前端开发、C/C++开发等,都会用到这个终端窗口。
在终端窗口中输入“python test.py”(注意空格),按Enter键开始执行代码,会得到输出结果“3”(也就是1+2的和),如图1-24所示。
图1-24
最后需要注意的是,每次修改test.py中的代码后,一定要先保存再运行代码,不然改动就无法生效。
PyCharm是现在功能最强大的一个Python IDE(集成开发环境),它具备完善的开发功能及跨平台的特点。如果想要使用PyCharm编写Python代码,则需要进行以下3步。
● 安装PyCharm。
● 安装插件。
● 运行代码。
想要安装PyCharm,只需要进行简单的两步操作就能完成。
①下载PyCharm。首先打开JetBrains的官网,可以看到PyCharm有两个版本,如图1-25所示。
图1-25
Professional是付费版本,Community是免费版本,这里下载Community版本。
② 安装PyCharm。下载完成后,只需要像平常安装软件那样安装PyCharm就可以了,如图1-26所示。
图1-26
默认情况下,PyCharm的界面是英文的,不过可以通过安装插件的方式将其界面语言设置成中文。在PyCharm中,所有插件的安装步骤都是一样的,只需要进行以下两步操作即可。
① 安装插件。在PyCharm的界面中选择【Plugins】,如图1-27所示。
图1-27
然后搜索“chinese”,选择【Chinese(Simplified) Language Pack/中文语言包】,单击【Install】按钮就可以自动安装该插件了,如图1-28所示。
图1-28
② 重启PyCharm。插件安装完成之后,必须重启PyCharm插件才能生效。这里单击【Restart IDE】按钮重启PyCharm,如图1-29所示。
图1-29
如果想要使用PyCharm来编写Python代码,只需要进行下面几步操作就可以轻松实现。
① 新建项目。在PyCharm的界面中依次选择【项目】→【新建项目】,如图1-30所示。
图1-30
② 选择项目的存放路径。在弹出的对话框中选择项目的存放路径,然后单击【创建】按钮,如图1-31所示。接下来就会成功创建一个新的Python项目。
图1-31
③ 新建Python文件。在PyCharm窗口左侧的面板中,单击【python-test】,然后单击鼠标右键,在弹出的快捷菜单中依次选择【新建】→【Python文件】,如图1-32所示。
图1-32
在弹出的对话框中输入文件名,然后按Enter键,就可以创建一个新的Python文件了,如图1-33所示。
图1-33
④ 编写代码。在刚刚创建好的test.py文件中编写一段代码,如图1-34所示。编写完代码之后,一定要先保存代码。如果运行代码后没有得到想要的结果,可能就是因为没有保存文件。
图1-34
⑤ 运行代码。在PyCharm窗口上方的工具栏中依次选择【运行】→【运行'test'】,以运行当前的代码,如图1-35所示。
图1-35
运行代码之后,会弹出一个控制台面板,里面有代码的运行结果,如图1-36所示。
图1-36
最后对于Python的开发工具,还需要特别说明一下:如果你的目的仅是学习本书内容,我更推荐使用VSCode,因为VSCode的启动速度非常快,功能足够强大,并且使用起来也非常方便;如果是在实际工作中,那么VSCode或PyCharm都可以。
1.Python的主要应用领域不包括( )。
A.人工智能
B.大数据
C.网络爬虫
D.安卓开发
2.下面有关Python的说法中,正确的是( )。
A.Python是近几年才出现的一门语言
B.Python主要用于人工智能、大数据及云计算方面
C.在C语言、Java、Python中,运行速度最快的是Python
D.Python 2.X和Python 3.X可以相互兼容
微信扫码关注【异步社区】微信公众号,回复“e58712”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。
我们经常在电影(如《速度与激情8》《碟中谍5》)中看到黑客飞快地敲着键盘,仅用几秒就控制了整栋大楼的系统,或化解了一次重大危机。在惊讶之余,你有没有想过自己以后也能学会“编程”这一“神奇”的技能呢?
从这一章开始,我们就正式步入“编程”的学习之旅,学习怎么使用“编程”的方式改变这个世界。
现实世界中有非常多的语言,如中文、英语、法语等。实际上,计算机的世界中也有很多语言,如C语言、C++、Java、Python等。简单来说,Python就是众多计算机语言(也叫编程语言)中的一门语言。计算机语言有一些共性,例如对于某些功能,我们可以将Python代码转换为Java代码,这就像将英语翻译成中文一样,虽然语言不一样了,但它们表达的意思是一样的。
一旦我们把Python学会,再去学另外一门语言(如C语言、Java等),就会变得非常容易,因为两门计算机语言之间有非常多的共性。因此,认真学习Python,以后再学习其他计算机语言就会变得非常轻松。
我们都知道,学习任何一门语言,都得学习这门语言的词汇、语法、结构等。同样,想要学习一门计算机语言,也需要学习类似的。只不过这些内容在计算机语言中不叫词汇、语法、结构,而叫变量、表达式、运算符等。
本章主要从以下7个方面介绍Python的语法。
● 常量与变量。
● 数据类型。
● 运算符。
● 表达式与语句。
● 类型转换。
● 转义字符。
● 注释。
学习Python,就是学习一门能够与计算机交流的语言。在讲解的过程中,我尽量将每一个知识点都跟人类语言的特点进行类比,这样学习起来就会非常简单。当然,计算机语言与人类语言有很多不一样的地方,因此我们需要严格遵循它的规则(也就是语法)。
此外,如果小伙伴们之前学习过其他计算机语言,也建议你认真学一遍本书。因为本书的讲解独树一帜,会让你对计算机语言有更深入的理解。
先问大家一个问题:要学习一门语言,最先要了解的是什么?当然是词汇。就像学英语一样,即使是非常简单的一句话,我们也得先弄清楚其中的一个单词是什么意思,然后才能知道这句话的意思。学习Python也是如此。下面先来看一行代码:
a = 10
语言都是一句一句地表述的,上面这行代码就相当于Python中的“一句话”,又称为“语句”。每一条语句都有它特定的功能,这跟人类语言中的每一句话都有它所要表达的意思是一样的道理。
在Python中,变量与常量就像人类语言中的词汇,上面代码中的a就是Python中的变量。
在Python中,变量指的是一个可以改变的量,也就是说,变量的值在程序运行过程中是可以改变的。
想要使用变量,就得先给它起一个名字(命名),就像每个人都有自己的名字一样。当别人叫你的名字时,你就知道别人叫的是你,而不是其他人。当Python程序需要使用一个变量时,我们只需要使用这个变量的名字就行了。
变量的名字一般是不会变的,但是它的值是可以变的。这就像人一样,名字一般都是固定的,但是每个人都会改变,都会从小孩成长为青年,然后再从青年慢慢变成老人。
在Python中给一个变量命名时,需要遵循以下两个原则。
● 变量名由英文字母、下划线(_)或数字组成,并且第一个字符必须是英文字母或下划线。
● 变量名不能是Python关键字(又称关键词)。
上面的两个原则很简单,却非常重要,一定要仔细理解。从第1个原则可以知道,变量只可以包含英文字母(大写和小写都行)、下划线或数字,不能包含这3种字符之外的其他字符(如空格、%、-、*、/等)。因为其他字符都已经被Python当成运算符来使用了。
对于第2个原则,Python关键字指的是Python本身“已经在使用”的名字,因此在给变量命名的时候不能使用这些名字(因为Python已经占用了这些名字,所以我们不能用)。
表2-1所示为Python中常见的关键字,这里只是为了方便大家查询才列出的,并不是让大家记忆。实际上,对于这些关键字,等大家学了后面的内容,自然而然就会记住。就算记不住,等需要的时候再回到这里查一下就可以了,不需要浪费时间去记忆。
表2-1 Python中常见的关键字(保留字)
关键字 |
关键字 |
关键字 |
关键字 |
关键字 |
True |
False |
None |
and |
as |
assert |
break |
class |
continue |
def |
del |
elif |
else |
except |
finally |
for |
from |
global |
if |
import |
in |
is |
lambda |
nonlocal |
not |
or |
pass |
raise |
return |
try |
while |
with |
yield |
i
lvye_study
_lvye
n123
123n # 不能以数字开头
-study # 不能使用短横线
continue # 不能跟关键字相同
my+title # 不能包含除了数字、英文字母和下划线以外的字符
此外,在为变量命名时一定要区分大小写,如name与Name在Python中就是两个不同的变量。
在Python中,对于变量的声明,大家要记住:所有变量都不需要声明,因为Python会自动识别数据类型。在这一点上,Python跟C语言、Java等是不同的。
变量名 = 值
有关变量的说明如图2-1所示。
图2-1
a = 10
print(a)
输出结果如下:
10
这个例子中定义了一个变量,该变量的名称为a,值为10。然后使用print()函数输出了这个变量的值。print()是专门用来输出内容的一个函数,后面会详细介绍。
变量一定不能使用中文名,而应该使用一些有意义的英文名或英文缩写。当然,为了讲解方便,本书中有些变量的名称可能比较简单。不过在实际工作中,变量的名称应尽量规范一些。
a = 10
a = 12
print(a)
输出结果如下:
12
咦?a的值不是10吗?怎么输出的是12呢?大家别忘了,a是一个变量。变量,简单来说就是一个值会变的量。因此,后面的a=12会覆盖前面的a=10。我们再来看一个例子,就会有更深入的理解了。
a = 10
a = a + 1
print(a)
输出结果如下:
11
a=a+1表示a的最终值是在原来的值的基础上加1后的值,因此a的最终值为11(10+1)。在下面的代码中,a的最终值是5,小伙伴们可以思考一下为什么。
a = 10
a = a + 1
a = a - 6
前文已经说过,变量名不能是Python关键字。如果变量名是Python关键字,程序就会报错,请看下面的例子。
for = "绿叶学习网"
print(for)
代码运行后的结果如图2-2所示。
图2-2
上面的例子将“for”作为变量名,而“for”是Python的关键字,因此VSCode会报错。
在Python中,常量指的是一个值不能改变的量。也就是说,常量的值从一开始就是固定的,一直到程序运行结束都不会改变。
常量就像千百年来约定俗成的名称。这个名称是固定下来的,不能随便改变。
需要注意的是,Python中的常量本质上还是变量,只不过我们不会刻意去修改它的值。一般情况下,常量名全部大写,让人一看就知道这个值很特殊,有特殊用途,示例如下:
DEBUG = 1
初学者简单了解常量即可,暂时不需要深入学习。
【常见问题】
在实际开发中,如果忘了Python的关键字都有哪些,有什么简单快捷的查询方法吗?
在Python中,我们可以使用keyword模块的kwlist属性查看当前Python中的所有关键字。
import keyword
print(keyword.kwlist)
输出结果如下:
["False", "None", "True", "__peg_parser__", "and", "as", "assert", "async", "await", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "in", "is", "lambda", "nonlocal", "not", "or", "pass", "raise", "return", "try", "while", "with", "yield"]
模块的使用方法后面会详细介绍,这里简单了解一下即可。
数据类型就是图2-3所示的“值”的类型。Python中有6种数据类型:数字、字符串、列表、元组、字典、集合。
图2-3
本节先介绍数字和字符串这两种数据类型,其他的数据类型后面会逐一介绍。
在Python中,数字是最基本的数据类型。数字指的就是数学中所说的数字,如10、−10、3.14等。在Python中,数字有以下4种不同的类型。
● 整数(int)。
● 浮点数(float)。
● 复数(complex)。
● 布尔值(bool)。
在Python中,整数指的就是数学中所说的整数,如666、-666等。
a = 2077
print(a)
输出结果如下:
2077
在Python中,浮点数由“整数”和“小数”两个部分组成,如66.66、-0.66等。
a = 6.0
print(a)
输出结果如下:
6.0
虽然6.0与6类似,但由于6.0有小数部分,因此它属于浮点数而不是整数。
在Python中,复数由“实数”和“虚数”两个部分组成,可以用a+bj或complex(a, b)表示。其中,复数的实部a和虚部b都是浮点数。
由于复数在初学阶段几乎用不到,因此我们只需要简单了解一下即可,不需要深入研究。
在Python中,整数、浮点数、复数这3种数字类型的值可以有无数个,但是布尔类型的值只有两个:True和False。True表示“真”,False表示“假”。
有些小伙伴们可能会觉得很奇怪,为什么这种数据类型叫“布尔值”呢?这个名字是怎么来的呢?实际上,布尔是bool的音译词,是以英国数学家、布尔代数的奠基人乔治·布尔(George Boole)的名字来命名的。
布尔值最大的用途就是进行选择结构的条件判断。对于选择结构,下一章会详细介绍,这里小伙伴们只需要简单了解一下即可。
a = 10
b = 20
if a < b:
print("a小于b")
输出结果如下:
a小于b
上面这个例子先定义了两个数字类型的变量:a、b。然后在if语句中对a和b进行了大小比较,如果a小于b,则使用print()输出一个字符串:"a小于b"。其中,if语句是用来进行条件判断的,下一章会详细介绍,这里小伙伴们不需要太过纠结。
此外,对于Python中的布尔值,还有以下两点需要说明。
● True和False的首字母必须大写,这一点跟其他编程语言不太一样。
● Python中的布尔型数据属于“数字”这一数据类型,这一点跟其他编程语言也不一样。其中,True等价于1,False等价于0。
在Python中,并非所有内容都能用数字表示,如一个名字、一句诗、一首歌等。如果想要在Python中表示一段文字,则需要用到“字符串”这种数据类型。
字符串就是一串字符。在Python中,字符串都是用英文单引号或英文双引号(注意都是英文)引起来的。此外,字符串中的字符可以是0个(即空字符),也可以是一个或多个。
● 单引号引起来的一个或多个字符:
'我'
'绿叶学习网'
● 双引号引起来的一个或多个字符:
"我"
"绿叶学习网"
● 单引号引起来的字符串中可以包含双引号:
'我来自"绿叶学习网" '
● 双引号引起来的字符串中可以包含单引号:
"我来自'绿叶学习网' "
string = "绿叶学习网,给你初恋般的感觉"
print(string)
输出结果如下:
绿叶学习网,给你初恋般的感觉
如果把字符串两边的引号去掉,VSCode就会报错,小伙伴们可以自己试一试。因此,在实际开发中,一定要为字符串加上引号,单引号或双引号都可以。
上面的这个例子,也可以直接用下面的一行代码实现,因为print()这个函数本身就是用来输出内容的。
print("绿叶学习网,给你初恋般的感觉")
string = '绿叶学习网,给你"初恋"般的感觉'
print(string)
输出结果如下:
绿叶学习网,给你"初恋"般的感觉
单引号引起来的字符串中不能含有单引号,可以含有双引号。同理,双引号引起来的字符串中不能含有双引号,可以含有单引号。
为什么要这么规定呢?我们看看下面这个字符串,它含有4个双引号,此时Python判断不出来哪两个双引号是一对。
"绿叶学习网,给你"初恋"般的感觉"
n = "2077"
print(n)
输出结果如下:
2077
如果为数字加上双引号,Python就会把这个数字当成字符串来处理,而不是当成数字处理。我们都知道,数字是可以进行运算的,但是加上双引号的数字一般是不可以直接进行运算的,因为这个时候它不再是数字,而是被当成字符串了。示例如下:
1001 # 这是一个数字
"1001" # 这是一个字符串
在Python中,我们可以使用type()函数来判断一个变量属于什么类型。
type(变量名)
a = 1001
b = "1011"
print(type(a))
print(type(b))
输出结果如下:
<class "int">
<class "str">
从输出结果可以看出,a属于int类型,也就是数字;b属于str类型,也就是字符串。
最后,经过这一节的学习,我们已清楚地知道“数据类型”是什么了。实际上,数据类型就是值的类型。
在Python中,要完成各种各样的运算,是离不开运算符的。运算符一般用于将一个或几个值进行计算,从而得出运算结果,就像数学中的运算也需要运算符一样。不过对Python来说,则需要遵循计算机语言的一套运算规则。
在Python中,运算符指的是对“变量”或“值”进行运算操作的符号,如图2-4所示。在Python中,常见的运算符有以下7种。
图2-4
● 算术运算符。
● 赋值运算符。
● 比较运算符。
● 逻辑运算符。
● 成员运算符。
● 身份运算符。
● 位运算符。
位运算符在初学阶段用得比较少,因此在这一节中不做详细介绍。小伙伴们只需要认真掌握前6种运算符就可以了。
在Python中,算术运算符一般用于实现数学运算,包括加、减、乘、除等。常用的算术运算符如表2-2所示。
表2-2 常用的算术运算符
运算符 |
说明 |
举例 |
+ |
加 |
10 + 5 #返回15 |
- |
减 |
10 - 5 #返回5 |
* |
乘 |
10 * 5 #返回50 |
/ |
除 |
10 / 5 #返回2 |
% |
求余 |
10 % 4 #返回2 |
** |
求幂 |
2 ** 3 #返回8 |
// |
取整除,即返回商的整数部分 |
9 // 2 #返回4 |
在Python中,乘号是*,而不是×;除号是/,而不是÷。为什么要这样定义呢?这是因为Python语言的开发者希望尽量使用键盘已有的符号来表示这些运算符。大家可以看一下自己的键盘,是不是只有*和/,而没有×和÷。
a = 1
b = 2
c = 3
print(a + b * c)
输出结果如下:
7
在这个例子中,print(a+b*c)等价于print(1+2*3),因此输出结果为7。
在Python中,赋值运算符用于将等号右边表达式的值保存到等号左边的变量中。常用的赋值运算符如表2-3所示。
表2-3 常用的赋值运算符
运算符 |
举例 |
= |
name = “绿叶学习网” |
+= |
a += b等价于a = a + b |
-= |
a -= b等价于a = a - b |
*= |
a *= b等价于a = a * b |
/= |
a /= b等价于a = a / b |
%= |
a %= b等价于a = a % b |
上表中只列举了常用的赋值运算符,不常用的就没有列出来。在这本书中,不常用的知识简单讲解或略过,重要的知识则会多次强调,以减轻小伙伴们的记忆负担。
a+=b其实就是a=a+b的简化形式。+=、-=、*=及/=这几个运算符,其实就是为了简化代码而出现的,大多数有经验的开发人员都喜欢用这种简写形式。对初学者来说,还是要熟悉一下这种写法,以免看不懂其他人的代码。
a = 10
b = 5
a += b
b += a
print(a)
print(b)
输出结果如下:
15
20
上例中将变量a的值定义为10,变量b的值定义为5。当执行a+=b后,a的值为15(10+5),b的值没有变化,依旧是5。
程序是从上而下地执行的,当执行b+=a时,由于之前a的值已经变为15了,因此执行后,a的值为15,b的值为20(即15+5)。
这里要注意一点:a和b都是变量,它们的值会随着程序的执行而变化。
在Python中,比较运算符用于将运算符两边的值或表达式进行比较。如果比较结果是对的,则返回True;如果比较结果是错的,则返回False。True和False是布尔值,前面已经介绍过了。常用的比较运算符如表2-4所示。
表2-4 常用的比较运算符
运算符 |
说明 |
举例 |
> |
大于 |
2 > 1 #返回True |
< |
小于 |
2 < 1 #返回False |
>= |
大于等于 |
2 >= 2 #返回True |
<= |
小于等于 |
2 <= 2 #返回True |
== |
等于 |
1 == 2 #返回False |
!= |
不等于 |
1 != 2 #返回True |
等号(=)是赋值运算符,用于将其右边的值赋给左边的变量。双等号(==)是比较运算符,用于比较其左右两边的值是否相等。因此,如果想要比较两个值是否相等,写成a=b就是错误的,正确写法应该是a==b。初学者很容易犯这个错误。
a = 10
b = 5
result1 = (a > b)
result2 = (a == b)
result3 = (a != b)
print(result1)
print(result2)
print(result3)
输出结果如下:
True
False
True
每一条赋值语句,都是先运算右边,然后再将右边的结果赋给左边的变量。
在Python中,逻辑运算符用于执行布尔值的运算。逻辑运算符经常和比较运算符结合在一起使用。逻辑运算符只有3种,如表2-5所示。
表2-5 逻辑运算符
运算符 |
说明 |
and |
与运算 |
or |
或运算 |
not |
非运算 |
在Python中,与运算用“and”表示。如果and两边的值都为True,则返回True;如果有一边的值为False或两边的值都为False,则返回False。
真and真→真
真and假→假
假and真→假
假and假→假
a = 10
b = 5
c = 5
result = (a < b) and (b == c)
print(result)
输出结果如下:
False
result=(a<b) and (b==c)等价于result=(10<5) and (5==5),由于(10<5)返回False,而(5==5)返回True,因此result=(a<b) and (b==c)最终等价于result=False and True。根据与运算的规则,result最终的值为False。
在Python中,或运算用“or”表示。如果or两边的值都为False,则返回False;如果有一边的值为True或两边的值都为True,则返回True。
真or真→真
真or假→真
假or真→真
假or假→假
a = 10
b = 5
c = 5
result = (a < b) or (b == c)
print(result)
输出结果如下:
True
result=(a<b) or (b==c)等价于result=(10<5) or (5==5),由于(10<5)返回False,而(5==5)返回True,因此result=(a<b) or (b==c)最终等价于result= False or True。根据或运算的规则,result最终的值为True。
在Python中,非运算用“not”表示。非运算跟与运算、或运算不太一样,非运算的操作对象只有一个。当not右边的值为True时,最终结果为False;当not右边的值为False时,最终结果为True。
not真→假
not假→真
非运算其实很简单,直接取反就行了。
a = 10
b = 5
c = 5
result = not(a < b) and not(b == c)
print(n)
输出结果如下:
False
result=not(a<b) and not(b==c)等价于result=not(10<5) and not(5==5),也就是result= not(False) and not(True)。由于not(False)的值为True,not(True)的值为False,因此原代码最终等价于result=True and False,也就是False。
当我们把result= not(a<b) and not(b==c)这句代码中的“and”换成“or”后,返回True,小伙伴们可以自行尝试一下。此外,我们也不要被这些看起来很复杂的运算吓到了。实际上,再复杂的运算,一步步分解后也是非常简单的。
对于与、或、非这3种逻辑运算,我们可以总结出以下3点。
● True的not为False,False的not为True。
● A and B:A、B全为True时,结果为True,否则结果为False。
● A or B:A、B全为False时,结果为False,否则结果为True。
下面将介绍成员运算符和身份运算符。由于这两种运算符涉及后面介绍的序列及对象,因此小伙伴们这里可以先跳过,等学到后面时再回头看一下即可。
在Python中,成员运算符用于判断某个值是否存在于序列(列表、元组、字符串)中。成员运算符只有两种,如表2-6所示。
表2-6 成员运算符
运算符 |
说明 |
in |
判断某个值是否“存在”于序列中。如果存在,返回True;如果不存在,返回False |
not in |
判断某个值是否“不存在”于序列中。如果存在,返回False;如果不存在,返回True |
a = 10
b = 5
nums = [1, 2, 3, 4, 5] # 定义一个列表
print(a in nums)
print(b in nums)
输出结果如下:
False
True
由于a不存在于列表nums中,因此a in nums返回False。由于b存在于列表nums中,因此b in nums返回True。小伙伴们可以把“in”改为“not in”,然后再来看看输出结果。
a = 10
b = 5
nums = (1, 2, 3, 4, 5) # 定义一个元组
print(a in nums)
print(b in nums)
输出结果如下:
False
True
string = "Python" # 定义一个字符串
print("th" in string)
print("on" in string)
输出结果如下:
True
True
在Python中,身份运算符用于判断两个变量的引用对象是否是同一个。身份运算符只有两种,如表2-7所示。
表2-7 身份运算符
运算符 |
说明 |
is |
判断两个变量的引用对象是否相同。如果相同,返回True;如果不同,返回False |
is not |
判断两个变量的引用对象是否不同。如果相同,返回False;如果不同,返回True |
特别注意一点,is用于判断两个变量的“引用对象”是否相同,而==用于判断两个变量的“值”是否相等。引用对象这个概念比较复杂,初学者不用纠结太多,学到后面便会慢慢理解。
a = 10
b = 5
print(a is b)
print(a is not b)
输出结果如下:
False
True
一个表达式包含“操作数”和“操作符”。操作数可以是变量,也可以是常量。操作符指的就是前文介绍的运算符。每一个表达式都会产生一个值。
一条语句,如常见的赋值语句,包括“表达式”和“赋值”两部分。在图2-5中,10+1是一个表达式,而a=10+1就是一条语句,这条语句实现了将10+1的结果赋值给a。特别注意一点:Python语句是不需要加分号的,这一点跟其他计算机语言不一样。
图2-5
初学者不用纠结什么是表达式,什么是语句,我们可以简单地认为语句就是Python中的一句话,而表达式就是一句话的一部分。
类型转换指的是将一种数据类型转换为另一种数据类型。数据类型在“2.3 数据类型”这一节中已经介绍过了。本节来介绍一下“数字”与“字符串”这两种类型的数据是怎么互相转换的。
在Python中,我们可以使用str()函数将一个数字转换为一个字符串。
str(数字)
result = "今年是" + 2077
print(result)
输出结果如下:
报错
本例希望使用字符串拼接的方式,使输出结果为“今年是2077”,但是运行程序后发现报错了。这是为什么呢?原因很简单:字符串不能与数字相加。在这个例子中,"今年是"为字符串,而2077是数字。
如果想要将字符串与数字拼接成字符串,可以使用str()函数将数字转换为字符串,正确代码如下:
result = "今年是" + str(2077)
print(result)
在Python中,我们可以使用int()函数将数字型字符串(只能是整数)转换为整数,也可以使用float()将数字型字符串(可以是整数,也可以是浮点数)转换为浮点数。
那什么是数字型字符串呢?像"123" "3.1415"等这种只有数字的字符串就是数字型字符串,而"hao123" "163com"等就不是数字型字符串。
int(字符串)
float(字符串)
a = int("123")
print(a)
b = int("3.1415")
print(b)
c = int("hao123")
print(c)
输出结果如下:
123
报错
报错
从这个例子可以看出,int()函数只能将整数字符串转换为整数。如果该字符串是浮点数字符串或包含其他字符,则会直接报错。
a = float("123")
print(a)
b = float("3.1415")
print(b)
c = float("hao123")
print(c)
输出结果如下:
123.0
3.1415
报错
从这个例子可以看出,float()函数可以将整数字符串或浮点数字符串转换为浮点数。不过如果该字符串包含其他字符,则会直接报错。
在Python中,我们可以使用int()函数将浮点数转换为整数,也可以使用float()函数将整数转换为浮点数。
int(浮点数)
float(整数)
a = float(123)
b = int(3.1415)
print(a)
print(b)
输出结果如下:
123.0
3
a = int(3.6)
b = int(-3.4)
print(a)
print(b)
输出结果如下:
3
-3
int()函数将浮点数转换为整数时,不会进行四舍五入处理,只会简单地截取整数部分。换句话说,我们可以使用int()函数获取一个浮点数的整数部分。
在学习转义字符之前,先看一个例子:
string = "不经风雨,怎见彩虹"
print(string)
运行结果如下:
不经风雨,怎见彩虹
如果想要使输出结果为:不经风雨,怎见"彩虹"。这个时候该怎么实现呢?可能不少小伙伴们首先想到的是使用下面的代码来实现:
string = "不经风雨,怎见"彩虹""
print(string)
然而这样会报错。其实大家仔细观察一下就知道,双引号都是成对出现的,这句代码中有4个双引号,Python无法判断哪两个双引号是一对。
为了避免上述情况发生,Python引入了转义字符。常用的转义字符如表2-8所示。
表2-8 常用的转义字符
转义字符 |
说明 |
\’ |
英文单引号 |
\” |
英文双引号 |
\n |
换行符 |
实际上,Python中的转义字符有很多种,但是我们只需要记住上面3种就可以了。在Python中,转义字符是一种特殊的字符,引入转义字符的目的有以下两个。
● 用于表示无法“看见”的字符,如换行符\n。
● 用于表示与语法冲突的字符,如\'和\"。
string = "不经风雨\n怎见彩虹"
print(string)
输出结果如下:
不经风雨
怎见彩虹
“\”会和后面的“n”配对成一个“\n”。
string = "不经风雨,怎见\"彩虹\""
print(string)
输出结果如下:
不经风雨,怎见"彩虹"
对于这个例子来说,下面两种方式是等价的:
# 方式1
string = "不经风雨,怎见\"彩虹\""
# 方式2
string = '不经风雨,怎见"彩虹"'
也就是说,想要输出带有引号的字符串,有上面这两种方法。不过在实际开发中,建议小伙伴们使用“单引号包含双引号”或“双引号包含单引号”的方式,而不使用转义字符。因为用转义字符的话会让代码多增加一个或几个字符,并且会让代码的格式不美观。
在Python中,给一些关键代码写上注释是非常有必要的。注释的好处有很多,如方便理解、方便查找及方便项目组里的其他开发人员理解你的代码,而且也方便你以后对自己的代码进行修改。
当注释的内容比较少,只有一行时,可以使用单行注释的方式。
# 单行注释
单行注释使用的是“#”号。注意,并不是任何地方都需要加上注释,一般情况下,只需要对一些关键的代码进行注释。为了确保代码的美观,“#”号与注释内容之间一般有一个空格。
# 定义两个变量
a = 10
b = 5
# 输出a+b的结果
print(a + b)
输出结果如下:
15
注释一般是给编程人员看的,而不是给系统看的,因此编辑器在运行程序时,碰到注释了的内容就会直接忽略掉。也就是说,从“#”号开始到这一行的末尾的内容,编辑器都会直接忽略掉。
a = 10 # 定义变量a
b = 5 # 定义变量b
print(a + b) # 输出a+b的结果
输出结果如下:
15
代码间注释跟单行注释非常相似,从“#”号开始到这一行的末尾的内容,编辑器都会直接忽略掉。
当注释的内容比较多,用一行展示不完时,可以使用多行注释的方式。
'''
多行注释
多行注释
多行注释
'''
多行注释使用的是三引号。三引号可以是3对英文单引号,也可以是3对英文双引号。三引号之间的内容会被视为注释内容。
'''
这是多行注释
这是多行注释
这是多行注释
'''
a = 10
b = 5
print(a + b)
输出结果如下:
15
当然,如果注释内容只有一行,也可以用多行注释的方式。
在查看他人代码或官方文档时,我们可能会经常看到下面这样的代码:
# coding=utf-8
或
# -*- coding:utf-8 -*-
这种代码叫作“编码注释”,一般放在.py文件的开头,用于指定文件的编码格式。不过需要清楚的是,这种编码注释主要是为了解决Python 2.X不支持直接输入中文的问题。在Python 3.X中,已经不再需要加上这样的代码了。
在这里提及这个知识点是为了避免大家看不懂别人的代码,不过只需要简单了解一下就可以了,不需要刻意记忆。
在Python中,print()函数不仅可以输出一个变量,还可以同时输出多个变量。
print(变量1, 变量2, ..., 变量n)
name = "Jack"
age = 24
print(name, age)
输出结果如下:
Jack 24
使用print()输出多个变量时,两个变量之间有一个空格。
name = "Jack"
age = 24
print("姓名:", name,",年龄:", age)
输出结果如下:
姓名:Jack,年龄:24
实际上,print()函数还有很多丰富的功能,这些功能都是通过它的参数定义的。
print(值列表, sep="分割符", end="结束符", file=文件对象)
print()函数后面的3个参数都是可选的。参数sep用于设置分割符,默认分割符为空格。参数end用于设置结束符,默认结束符是“\n”(换行)。参数file用于指定将结果输出到哪一个文件中。
此外,sep是“seperation”(分离)的缩写。了解其英文意思,更能帮助我们理解和记忆它。
name = "Jack"
age = 24
print(name, age, sep="*")
输出结果如下:
Jack*24
如果不需要分割符,则可以直接设置sep=""。特别注意,seq=""和seq=" "是不一样的,前者是一个空字符串,后者是包含一个空格的字符串。
print(10, end="")
print(20, end="")
print(30, end="")
输出结果如下:
102030
end=""表示设置结束符为一个空字符串,也就是输出结果后不换行。
file = open("D:\\hello.txt", "w", encoding="utf-8")
print("从0到1", file=file)
print("系列图书", file=file)
file.close()
在这个例子中,需要先在D盘下创建一个hello.txt文件,然后再运行代码才会有效果。open()函数用于打开hello.txt这个文件,两个print()函数用于将字符串依次写入该文件中,close()函数用于关闭文件。
上面这种方法在实际开发中用得极少,这里小伙伴们简单了解一下即可。对于文件操作,“第12章 文件操作”中会详细介绍。
在Python中,我们可以使用input()函数来输入内容。input()函数的作用非常简单,用一句话来说就是:通过键盘输入内容,从而给某一个变量赋值。
变量名 = input()
通过input()函数输入的内容,本质上都是字符串。
a = input()
print(type(a))
当运行代码之后,控制台中的光标会卡顿,如图2-6所示。为什么会卡顿呢?这是为了等待用户输入内容。当用户输入内容之后,按Enter键,系统才会继续执行下面的代码。
图2-6
在这个例子中,无论我们输入什么内容,如10、3.14、abc,输出结果都是一样的,如下所示:
<class 'str'>
实际上,通过input()函数输入的内容全部都会被当作一个字符串。不过我们可以通过类型转换函数将其转换成自己想要的类型。
a = input()
result = int(a) + 2077
print(result)
运行代码之后,输入“10”,其输出结果如下:
2087
因为a本身是一个字符串,这里使用int()方法将其转换成一个整数。这里问大家一个问题:上面的代码有什么弊端呢?
上面的代码运行后,控制台中的光标只会卡顿,并不会提示我们需要输入什么内容。实际上input()方法可以接收一个字符串当作参数。请看下面的例子。
a = input("请输入一个整数:")
print(a)
运行代码之后,输入“2077”,其输出结果如下:
2077
从输出结果可以看出,input()方法内部的字符串只起到提示作用,并不会作为值的一部分。
a = input("输入第1个整数:")
b = input("输入第2个整数:")
result = int(a) + int(b)
print(result)
运行代码之后,依次输入“10”和“20”,其输出结果如下:
30
从VSCode的终端控制台可以看出来,使用print()函数添加提示内容之后,代码的运行效果就直观多了,如图2-7所示。
图2-7
运算符的优先级决定运算的先后顺序。我们都知道,数学中的加减乘除运算是有一定优先级的。例如有括号就得先算括号内的,然后进行乘除运算,最后才进行加减运算。
在Python中,运算符也是有优先级的,规则很简单:优先级高的先运算,优先级低的后运算;优先级相同的,从左到右依次进行运算。若想了解各种运算符的优先级,小伙伴们可以查看本书的附录C。
Python中的运算符比较多,优先级也比较复杂,我们不需要都记住,而只需要关注常见运算符的优先级就可以了。
● 对于算术运算来说,乘除运算比加减运算的优先级高。另外,求余运算和乘除运算的优先级相同。
● 对于逻辑运算来说,非(not)>与(and)>或(or)。
● 对于赋值运算来说,赋值运算符的优先级都非常低,所以在一个表达式中,往往最后才进行赋值操作。
result = 20 % 11 / 3
print(result)
输出结果如下:
3.0
%和/的优先级是相同的,运算方向是从左到右,所以20 % 11 / 3等价于(20 % 11) / 3。
x = 10
y = 0
z = 20
if not x and y or z:
print("Good")
else:
print("Bad")
输出结果如下:
Good
逻辑运算符的优先级为非(not)>与(and)>或(or)。所以not x and y or z等价于((not x) and y) or z。上面的if...else用于实现条件判断,在第3章中会详细介绍。
x = 10
y = 10
z = 20
if x == y and z > x:
print("Good")
else:
print("Bad")
输出结果如下:
Good
比较运算符的优先级比逻辑运算符的高,所以x==y and z>x等价于(x==y) && (z>x)。如果小伙伴们不清楚运算符的优先级,建议还是加上“()”,这样可以使代码的可读性更高。
在实际开发中,优先级可以很好地控制运算的执行顺序,但是如果仅仅依赖优先级,那么代码的可读性可能会很差,我们先来看一个例子。
x = 10
y = 10
z = 20
if not x == y and z > x or z < y:
print("Good")
else:
print("Bad")
输出结果如下:
Bad
已知逻辑运算符的优先级为非(not)>与(and)>或(or)。另外,比较运算符的优先级又比所有逻辑运算符的优先级高,所以not x == y and z > x or z < y等价于下面的代码:
((not(x == y) and (z > x)) or (z < y)
不仅是初学者,即使是工作多年的工程师,都会觉得not x == y and z > x or z < y这种代码的可读性是比较差的,有时并不能一下就看出其中的运算的执行顺序。在实际开发中,建议加上一些必要的“()”,这样可以让代码的可读性更高。在大型项目中,代码的可读性和可维护性是非常重要的两个指标。
最后需要说明的是,很多初学者喜欢用奇怪的语法来“炫技”,故意把代码写得很难懂,其实这样是完全没有必要的。在真实的开发工作中,程序的运行速度、代码的可读性、代码的可维护性等才是最重要的。在保证运行速度的情况下,把代码写得越好懂,后面维护起来才会越容易。
语法本身就没有太多可以“炫技”的东西。对于有多年开发经验的工程师来说,不管你用多难懂的语法来写代码,在别人眼里也都只是“小儿科”而已。真正能体现你技术水平的应该是算法设计、功能实现等,而不是两三句看起来很难懂的代码。
在实际开发中,交换两个变量的值是经常用到的一种操作,这一节就来介绍一下这种操作。
实现代码如下:
a = 10
b = 20
temp = a
a = b
b = temp
print("a=", a)
print("b=", b)
输出结果如下:
a=20
b=10
为什么这里要定义一个temp变量呢?使用下面这种方法不也一样可以交换两个变量的值吗?
a = 10
b = 20
a = b
b = a
其实这种方法是行不通的。原因很简单,a和b都是变量,执行了a=b之后,a的值是20,b的值也是20。由于此时a的值变成了20,再执行下一步的b=a时,a的值还是20,b的值也是20。
因为a=b会修改a的值,所以为了交换两个变量的值,我们需要定义一个中间变量来“暂时保存”a的值。
很多初学者可能会反思自己怎么没想到上面这种方法,其实大家不必自责,刚开始学编程都是这样的。对于常用的算法操作,我们尽量都记一下,代码写得多了慢慢就掌握了。
请输入一个两位整数,然后将它的个位数和十位数互换,使其变成一个新的整数,最后输出这个新的整数。
实现代码如下:
n = input("请输入一个两位整数:")
n = int(n)
a = n % 10 # 获取个位数
b = int(n/10) # 获取十位数
result = a * 10 + b # 组合成新的整数
print(result)
运行代码之后,输入84,其输出结果如下:
48
1.下面的Python变量名中,合法的是( )。
A.666variable
B.my_variable
C.def
D.-variable
2.float("123")返回的值是( )。
A.123
B.123.0
C."123"
D.程序报错
3.下面不属于“数字”这一数据类型的是( )。
A.整数
B.浮点数
C.布尔值
D.分数
4.(多选)下面的选项中,属于正确的注释方式的是( )。
A.#注释内容
B.'''注释内容'''
C.//注释内容
D./*注释内容*/
5.print("\"复仇者\"联盟")这一句代码的输出结果是( )。
A.复仇者联盟
B."复仇者"联盟
C.\"复仇者\"联盟
D.语法有误,程序报错
6.下面这段Python程序的输出结果是( )。
school = "101中学"
print(int(school))
A.None
B.101
C.101中学
D.程序报错
7.下面哪一个表达式会返回False?( )
A.not(3 <= 1)
B.(4 >= 4) and (5 <= 2)
C.("a" == "a") and ("c" != "d")
D.(2 < 3) or (3 < 2)
8.下面有一段Python程序,运行后变量c的值为( )。
a = "2"
b = str(2)
c = a + b
A.4
B."4"
C.22
D."22"
9.下面有关变量和常量的说法中,正确的是( )。
A.book和BOOK是两个相同的变量名
B.修改一个常量的值后,程序会报错
C.变量名可以以数字开头
D.变量名可以以下划线开头
10.在Python中,表达式5%2、5/2的结果是( )。
A.1、1
B.1、2
C.1、2.5
D.2.5、2.5
1.请使用print()函数输出这样一个字符串:hello \n "python"。注意,这个字符串中有特殊字符。
2.输入一个圆的半径,然后分别求出它的周长和面积,并输出结果。其中,π的值取3.14。
3.模拟超市抹零结账:输入3个浮点数,计算它们的总和,然后去除总和的小数部分,输出结果。
4.输入一个浮点数,要求保留小数点后两位,并且对第3位小数进行四舍五入处理,最后输出这个浮点数。
微信扫码关注【异步社区】微信公众号,回复“e58712”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。