![数据可视化:从小白到数据工程师的成长之路](https://wfqqreader-1252317822.image.myqcloud.com/cover/212/32375212/b_32375212.jpg)
2.7 Python基础
Python是一种面向对象的解释型程序设计语言,在1989年由Guido van Rossum在荷兰国家数学和计算机科学研究所设计,并于1991年公开发行。
Python的源代码和解释器CPython全部遵循GPL(General Public License,通用公共许可)协议。任何人均可到Python的官方网站[39],以源代码或二进制形式下载Python解释器及其标准扩展库,也可以自由分发。该网站还提供了大量的第三方Python模块、程序、工具及附加文档。
Python语言结构简单,容易学习。Python包含丰富的跨平台标准库,可以方便地在UNIX、Windows和Mac操作系统之间切换。作为一种粘合剂语言,Python可以方便地粘合其他语言编写的代码,如C、C++和FORTRAN编写的程序。虽然Python语言功能强大,操作简洁,但本节主要讲解Python语言的网络数据抓取功能,即如何使用简单的Python语言编写代码,快速而准确地抓取网页上的内容。
虽然可以使用工具从网站上收集数据,但很多个性化数据的获取依旧需要使用编程来实现。考虑到易用性,Python才是数据获取的最佳选择[40](见图2.48)。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_53.jpg?sign=1739279253-W7mvdgRK76bVVtGTwrVYNpHnOkAGpWLi-0-54e689e4c1170f65b9e49ac3f289a8ae)
图2.48 编程语言排行
2.7.1 环境配置
Mac操作系统自带的Python不需配置即可使用,允许多个版本同时存在。图2.49显示系统中包含Python2.7.10和Python3.7.0两个版本。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_54.jpg?sign=1739279253-XGhYc95jyc8IKDZ4VrDvUaPqqCPbhKLY-0-da89152e709031e0661a57dd4307f750)
图2.49 Mac系统安装的两个Python版本
Windows系统下,Python的安装非常简单。双击下载的安装包,出现Python安装向导,见图2.50,建议勾选界面底部的“Install launcher for all users (recommended)”和“Add Python3.5to PATH”选项,选择“Install Now”,然后单击“下一步”按钮,即可完成安装。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_55.jpg?sign=1739279253-QdESm6oMtzfen87FpdSz6LDNf1VIH40r-0-2ccce7cb6ce2484fb2fab2cdc3454c44)
图2.50 Python安装向导
说明:
① 如果希望修改安装位置,可以选择“Customize installation”自定义安装模式。
② 如果没有勾选“Add Python3.5to PATH”选项,需要设置环境变量,设置方法如下。
右击“计算机”,在出现的快捷菜单中选择“属性|高级系统设置”,在“高级”选项卡中选择“环境变量”,在弹出的对话框的“系统变量”中选择“Path”,见图2.51,然后单击“编辑”按钮;在弹出的“编辑系统变量”对话框的“变量值”中添加Python的安装路径,见图2.52。如Python的安装路径是“C:\python”,则添加“;C:\python”(不区分大小写),前面的“;”是为了分隔多个安装路径。
安装结束后,可以在“cmd命令行”中输入“python”,如果出现图2.53所示的Python版本的数据,则表明安装正确。
另外,退出Python的函数是“exit( )”。
也可以选择“开始”菜单的“Python3.5|IDLE(Python3.564-bit)”,出现图2.54所示的信息,表明安装正确。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_56.jpg?sign=1739279253-DrLDYf2vhvHsYAInL7LXuL2x18SKEBOR-0-130ad9baac6d56d590c3b56ba2f9c25d)
图2.51 设置Python环境变量
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_57.jpg?sign=1739279253-9aVWddf17hK9Ic0EAszJxsWNCsMvN3F5-0-a12fbf039375aeb9ed04183e52d7b569)
图2.52 编辑系统变量
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_58.jpg?sign=1739279253-T896tYUYlxceuSg2E3XlGEyY1YW0v1T2-0-b402610cd1c36c913e6b94a61350bca3)
图2.53 命令行显示Python版本的数据
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_59.jpg?sign=1739279253-NXRJhJBUAvJ8RzXQAGvTflpJW1V1Qiu0-0-a271ea5ba20738f48adeb223c8df6bdf)
图2.54 Python交互窗口
2.7.2 第一个Python程序
我们用2.7.1节介绍的第二种方法进入Python交互窗口,完成第一个Python程序。先尝试Python的使用方法,使用“print("hello world")”函数实现输出,见图2.55。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_60.jpg?sign=1739279253-Vf4otgc4LMhsR4vjkMsnqTcoIVJufjxn-0-dc8a2dba6541f87d902a5aa8a6576a78)
图2.55 第一次使用Python
然后新建第一个Python程序,并运行该程序,见图2.56,具体步骤如下。
<1> 选择“File|New File”菜单命令,新建程序文件。然后输入如下代码,注意英文大小写。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_61.jpg?sign=1739279253-yPzYTC91naykAcCupw969EuUOuXI0qpc-0-691e57e552406c2fb71046cdede0e38e)
<2> 选择“File|Save”菜单命令,保存文件为“1.py”。
<3> 选择“Run|Run Module”菜单命令或按F5键运行程序,结果见图2.56。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_62.jpg?sign=1739279253-sFCBsMhqTXPzr1K2a2DIaFQcFlsmLMHS-0-623c0eaa8c5404017a559586d8933344)
图2.56 程序“1.py”运行结果
说明:
① 函数print( )是Python的一个重要输出函数,功能是将括号中的一个或多个对象输出。本例中将字符串“hello world”直接输出。实际上,该函数还可以输出数值、布尔、列表和字典等对象。
② Python语言严格区分大小写,使用函数时注意括号和双引号均为英文格式。
2.7.3 变量和运算符
变量是在程序运行过程中值允许改变的量。变量存储在计算机的内存中,Python变量不需要声明,变量被赋值后就意味着创建了变量,即根据赋值的数据类型在内存中开辟一块空间保存变量的值,因此变量可以是整数,也可以是小数,还可以是字符等,在后续章节中有更详细的介绍和使用。常见的变量使用方法如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_63.jpg?sign=1739279253-kVVxFFQbskgBBCdMgFCKXnglSqEhZKRL-0-6a07e4b641da4a3a35b32719fb88d260)
第1条语句为变量var1赋值为整数1,第2条语句为变量var2赋值为小数“3.14”,第3条语句为变量var3赋值为字符串"abc"。
用“=”为变量赋值,左侧是变量名,右侧是变量值。Python也允许同时为多个变量赋相同或不同的值,格式如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_64.jpg?sign=1739279253-dp8qR8Po1oV9UO3LxEUupJHDmRJefLYn-0-82195bb2520028bc716fd55d2ab8ee4f)
变量名是标识符的一种,必须严格遵守Python标识符的规定。变量名的首字符必须是字母或下划线,其他字符可以包含字母、数字和下划线。注意,变量名不可以是Python保留的关键字。查看Python关键字的方法是进入帮助功能,然后输入“keywords”,具体方法如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_65.jpg?sign=1739279253-X09ZiOyUKBqtqtTfUXR9ZQ6Oa0r39b4Z-0-14096a83e2c3da3b225a84e1a445eb1e)
注意:help( )函数的功能是查看函数或模块用途的详细说明,按q键退出帮助。
Python的关键字有25个,见图2.57。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_66.jpg?sign=1739279253-dV3hDVx9G1zfNjs7cW5z3TgurwpwMXTJ-0-99c739b562be048d0a7add5eec975496)
图2.57 Python的关键字
变量被赋值后,可以使用type( )函数查看变量中保存值(或者说对象)的数据类型,使用id( )函数查看其分配的内存空间,具体方法如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_67.jpg?sign=1739279253-KRAbomECrCzqmSxwayy6F3virbmDJNf6-0-a70f5673633010dff7a3ac728a269b12)
说明:
① 变量var1保存的对象是整数数据(int),变量var2保存的对象是浮点(也称为小数)型数据(float),这两种数据统称为数值型数据。变量var3保存的对象是字符串(str)。
② 对象是有数据类型的,但变量无数据类型。如上例中的小数“3.14”是浮点型数据类型的对象,被赋予变量var2,变量可以被多次赋值,每次赋值的对象的数据类型可以是不同的。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_68.jpg?sign=1739279253-5SQTjfUyaxxX5ljqC5BUfYhcDjXNunbp-0-fd30b1e93b57091f3b8494eb1f3905d5)
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_69.jpg?sign=1739279253-FIFrnKZeTShkUh1iy3X4mlF5KMGCqmAv-0-358431929a922d1aee3cd77908d895c3)
Python有6种数据类型,分别是Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。本节主要介绍前3种数据类型。
1.Number(数字,也称为数值)型数据
Python支持4种数值型数据,除了前面使用的int和float,还有bool(布尔)和complex(复数)。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_70.jpg?sign=1739279253-ZpjxzoMsLqA8TT4DuzTfAckZYYrRu1Wc-0-0a0b938f1858fe25bb9fd6a55c9ad4dd)
布尔型数据仅包含“True”和“False”两个值,对应的数字分别是“1”和“0”,它们可以与数字相加,任意布尔型数据也可以相加。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_71.jpg?sign=1739279253-t1P9amjSSGQma2uJzY4Vc1WAUVFdVlQL-0-0ce39e2015436f4a4a3668065b0d6b2a)
复数型数据由实数和虚数构成,如“a + bj”,或者用函数complex(a,b)表示。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_72.jpg?sign=1739279253-2NeSrRTlUrJLrifVXNs4WDF1b2N1LA5J-0-da64eff98453b8c7c354d65fcf791a91)
2.String(字符串)型数据
字符串是由单引号(')或双引号(")括起来的零个或多个字符。字符串的索引以“0”为初始值,索引“-1”为右侧末尾的位置。如2.7.2节中第一个Python程序中的字符串"hello world",字符串的索引值可以方便地将字符串中的部分字符取出,例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_73.jpg?sign=1739279253-A2XgNdKZuTKWYjFntTI5CNrzEjRpFsZg-0-a16e0d909205824b91d2c417162d43cc)
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_74.jpg?sign=1739279253-kpNWQ2BLcJf4qu1iy9weZiOAPZ1GzNf9-0-77b13e92691a557b8937081c5167998a)
说明:
① “[0]”表示字符串的第1个字符,“[-1]”表示字符串的最后一个字符。
② “[3:]”表示字符串的第4个至最后一个字符。
③ “var8*2”表示复制当前字符串,数字表示复制的次数。
④ "UCASS" + var8表示将两个字符串连接。
⑤ “[6:9]”表示字符串的第7~9个字符。
字符串使用“+”运算符时,必须保证左右两侧均是字符串,若数据类型不正确,可能导致出错。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_75.jpg?sign=1739279253-izxUAj4YVbj6QfEJuS7N0gJJCgd0NUXB-0-3bd5924abea9a588e7648284fb5d7b31)
说明:
① 表达式“100+ var8”中,“+”运算符左侧不是字符串,运算后产生了错误。
② 可以使用str(100)函数将数字100变成字符串"100",即可避免这类问题。
字符串中的“\”是转义特殊字符,具有特殊的含义。如“\n”表示换行,如不希望“\”转义,可以在字符串前面添加字符“r”,常见的转义特殊字符见表2.6。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_76.jpg?sign=1739279253-3mds6LAjDJMFCdvxOuVGabmP6aAscXQr-0-46851506c5e56e2bdad4c60883696a23)
表2.6 转义特殊字符
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_77.jpg?sign=1739279253-wRjo8u1iWou2LZ7sYaU8ychfLCSnJf6B-0-73f080ea928477b85278a586bd6b924f)
字符串还有一个经常使用的函数len( ),其功能是返回字符串的长度。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_78.jpg?sign=1739279253-6yPyn3yAT6evJZgcnUjyhc4o5yozNdHg-0-dc6b3ba1d4eb184ea4feb2083ca982c4)
3.List(列表)型数据
Python的列表型数据功能强大,在进行网页内容获取的时候被频繁使用。列表由写在“[ ]”之间、用“,”分隔的元素构成。列表中元素的类型可以不同,最常用的元素类型是数字、字符串和嵌套列表(即列表中的一个元素是另一个列表)。定义列表类型的变量方法如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_79.jpg?sign=1739279253-KucSAtf5kVeMaXQ0O4U6SvSxwYloWnq9-0-dd7f474fb08fd29e47d89032e1fc01d0)
与字符串类似,也可以使用索引值表示列表中的元素。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_80.jpg?sign=1739279253-rPjdcXWdvhSaivsxg1v7cxm6tFJyakas-0-435d3169059de2eb83ec2d5ceba38b81)
说明:
① “print(var9)”表示输出列表的全部元素。
② “var9[0]”表示列表的第1个元素。
③ “var9[2:]”表示列表的第3个至最后一个元素。
④ “var9*2”表示复制当前列表2次。
列表的常用函数有append( )、reverse( )、count( )、index( )、insert( )、remove( )和sort( )等。
函数append( )的功能是将参数追加入列表对象的结尾。reverse( )函数的功能是将列表对象中的元素按所在位置进行反转。count( )函数的功能是返回列表中某元素的个数。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_81.jpg?sign=1739279253-pOSaWmASHdzrcaN9lwNsx0lNIjcGfOcF-0-33fea822aeab33f32de423ce5dfc2acc)
函数index( )的功能是返回参数在列表中的索引位置。函数insert( )的功能是在任何位置增加一个列表元素。函数remove( )的功能是删除列表元素。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_82.jpg?sign=1739279253-ot67dI6ZEOmM4j2SBrmJ0wmvqvkUI7Zr-0-d0a5530adbae825069c6eef3a24c56ab)
说明:
① 函数insert( )包含两个参数,第一个参数是索引值,第二个参数是插入内容。
② 函数remove( )只有一个参数,即删除的列表元素,若列表中包含参数,则删除列表中找到的第一个列表元素,如上例var9.remove("abc")只删除第一个元素"abc",而未删除第二个"abc"元素。若参数并不能在列表中找到,则返回错误提示数据。
思考:列表var9包含两个相同的元素'abc',则函数index('abc')返回哪个的索引值?
函数sort( )的功能是对列表元素进行从小到大的排序,若列表元素的数据类型不同,则无法排序(有些Python版本也支持数据类型不同的列表元素排序,如Python2.7.10),显示错误数据。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_83.jpg?sign=1739279253-lRMd6uBTm3cBuRg2GhR4EU4iSQiyPJMC-0-a387f225ff54909d702738030995e920)
说明:
① 函数sort( )出现无法排序的错误提示,是因为列表元素有字符串,还有整数和小数,而字符串和数值型数据是无法比较大小的。
② 函数sort( )使用“reverse=True”参数时,是按照从大到小降序排列。
③ 函数sort( )使用“key=len”参数时,是按照长度从小到大升序排列。
④ 单独使用var9的功能与print(var9)相同,功能是输出列表的全部元素。
Python语言支持的运算符包括算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。赋值运算符在前面的案例中已经多次使用,算术运算符、比较(关系)运算符和逻辑运算符应用广泛。
4.算术运算符
算术运算符见表2.7。假设变量a赋值为23,变量b赋值为10,变量c赋值为“TV”。
表2.7 算术运算符
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_84.jpg?sign=1739279253-iVEUqhyH0HlDpagPUmKO1A6wUEWq5EV3-0-8dfa758ffedbd0e743dd7350d1ddbbd0)
说明:
① 乘法运算符的左右两侧均为数字型数据时,表示两个数字相乘。当左侧为字符串、右侧为整数n时,表示复制左侧字符串n次。
②23除以10的商是2余数是3,所以取模运算“a % b=3”,而整除运算“a // b=2”。
5.比较(关系)运算符
比较运算符见表2.8。假设变量a赋值为23,变量b赋值为10。
表2.8 比较运算符
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_85.jpg?sign=1739279253-fbgXM0JLp5mem5gI77fMDLM6XOp9bQm6-0-732b73f950751c95fdd6e2ffee6568f9)
说明:比较运算符的运算结果只能是“True”或“False”。“True”或“False”都是Python关键字,首字母大写,且默认为蓝色显示。
6.逻辑运算符
逻辑运算符见表2.9。假设变量a赋值为23,变量b赋值为10,变量c赋值为0,变量d赋值为“True”,变量e赋值为“False”。
表2.9 逻辑运算符
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_86.jpg?sign=1739279253-fBrQE6flLsWvPQgc3Cd3wMVSXI1Nmb5P-0-8f43828281972d228553516969fae3de)
说明:任何非零数字型数据均认为是逻辑值“True”,逻辑值“True”和“False”可以与数字型数据进行算术运算,此时逻辑值“True”被认为是数字1,“False”是数字0。
7.成员运算符
成员运算符见表2.10。假设变量a赋值为“abc”,变量b赋值为“Abc”(注意字符串的大小写),变量c赋值为列表['ABC','UCASS','abc']。
表2.10 成员运算符
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_87.jpg?sign=1739279253-nfl7O5io29NZIJn3CWEk6d3dvr4erxuR-0-e1a0df65d80269d91e9adbd9fa8882ce)
2.7.4 条件语句
Python语言包含三种语句,最简单的是顺序语句,即按照语句的先后顺序执行。第二种是条件语句,根据条件进行判断和选择执行的语句。第三种是循环语句,根据条件决定执行的次数。
条件语句也称为分支语句或if语句,格式如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_88.jpg?sign=1739279253-2JOEEzvJByf2ITg4Q90JeDFYfp1Ayzhg-0-04d7b86203588690fd45ba77178cccc3)
说明:
① 必须使用4个空格的缩进表示语句块的开始和结束。
② 条件和else后面的“:”必须书写。
③ 根据需要,决定elif语句的个数及是否包含else语句。
1.单分支条件语句
条件语句的使用方法有多种情况,最简单的单分支条件语句只包含一个if,没有elif和else。只有一个分支。例如,新建一个程序文件test.py。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_89.jpg?sign=1739279253-aAmcpwB7k1qCn5LnNDXj4ARXe5AisSDC-0-d6ade920fa7d9c6d85faf98208fbb80b)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_90.jpg?sign=1739279253-4XYN9sDuIshWnkhQdXEu1WSFAD8R5oVl-0-3d124c8b0280e69b9bcccbf07c4ce0c1)
说明:变量a赋值为整数10,输出时必须使用函数str(a)转换为字符串,才能使用“+”运算符。
2.双分支条件语句
双分支条件语句包含两个分支,根据条件是“True”还是“False”来决定执行的分支。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_91.jpg?sign=1739279253-pFhftGtzqqfno2EmEOVMWv75nl84bVAM-0-1668049f3ff6786be40c29d7458983ed)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_92.jpg?sign=1739279253-qeFCJLL9RGnn9jkbFY8eBLkJDOIMomi5-0-644b9d4e67382b164d59f049c77753b9)
说明:缩进表示语句块的开始和结束,最后一行语句没有任何缩进,不属于if语句,也不属于else语句,是单独的一条顺序语句,无论条件“a>0”的结果是“True”还是“False”,均执行该条语句。
3.多分支条件语句
多分支条件语句包含三个或以上的分支,根据条件结果执行相应的分支。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_93.jpg?sign=1739279253-1QU8ydEgm5mHeb8W7nBF7GBqTMc4RhH6-0-ce31fdc727e02dacdaa3ffe2320d307c)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_94.jpg?sign=1739279253-IHUUIhjkKgLMVSmwaBVFYZv4gjFy3Tu4-0-7f655fc873f6131fd430fec971f1d186)
说明:
① 判断变量a是否是零值的语句是“a==0”,不能写成“a=0”,前者“==”是比较运算符,后者“=”是赋值运算符。
② 本例中条件语句只包含一个elif分支,实际上可以根据需要包含多个elif分支,只有当前面的所有条件均不为“True”时才执行else语句。
③ 各条件不能有交集。
4.注释
注释是对程序代码的解释和说明。注释并不执行,对程序的运行结果也没有任何影响,主要用于帮助自己或他人更好地理解代码。注释要准确简洁,格式一致,尽量保证注释与所注释的代码相邻,一般在代码的上方或右侧进行注释。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_95.jpg?sign=1739279253-uCSgUPJbr0iEXfdYK2megz15pJkSHl22-0-5d69417563593baeedcd256af6ba10c7)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_96.jpg?sign=1739279253-BrXmbrmmbVlhMNgS9hvYOJr5UA3JE45Q-0-53947bc741df6f6836211a3fc1915264)
说明:
① 单行注释以“#”开头,可以在所注释代码的上方或右侧。
② 多行注释需要在注释的上面使用3个英文引号、下面使用3个英文引号。引号可以是单引号或双引号,但上下引号必须一致。
2.7.5 循环语句
在编写程序时经常需要完成大量的重复工作,为了减少代码的长度,提高程序可读性,降低复杂度,可以使用循环语句完成这类问题。
Python包含两种循环语句:for循环、while循环。
1.for循环语句
Python中的for循环语句可以方便地遍历一个序列的全部元素,如一个列表中的每个元素,一个字符串中的每个字符。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_97.jpg?sign=1739279253-T50Huczgp9LbDOsvsXs4hDJq7jHewmx7-0-63605b4256d4c72b58ea54159aaac509)
遍历列表元素的代码如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_98.jpg?sign=1739279253-riyvblFzcv5yn7QnVN1HP5xpaaqSUHA5-0-819465274ba26e76d3be74e8846c5909)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_99.jpg?sign=1739279253-d1siAiiMb4av6e4U5LMl1H6WMY7mndz9-0-0e11021b30b07ada5b48d01e86897852)
说明:
① 程序共循环4次。第1次循环取出列表langs中的第一个元素'Java'并打印,然后依次取出第二个、第三个、第四个元素并打印。
② 循环语句中的变量c用于临时存储每次循环取出的元素,此变量名只需符合标识符规则即可,名字可以任意设定。
遍历列表元素的方法不止一种,也可以使用如下代码实现。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_100.jpg?sign=1739279253-nGcJEH2Wy2xCs53uieJJBAn6zkxvjmrQ-0-972a8bb774ea83b55558f3b95b6374f0)
说明:
① 函数len(langs)用于返回langs列表的元素个数,本例返回“4”。
② 函数range(start,end,step)包含3个参数。start设置计数的起始值。end设置计数的结束值,但不包括end。step设置每次增加的间距,默认为1。本例的range(0,4)表示从0开始,每次增加1,包含1、2、3但不包含4,即打印langs[0]、langs[1]、langs[2]、langs[3],遍历了列表的全部元素。
遍历字符串的代码如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_101.jpg?sign=1739279253-PQSPifW9Vx9dOa95tqy8T20hA59w6my2-0-17390d39767ae0cd54c0b7838f87f796)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_102.jpg?sign=1739279253-NSkI2Xk5VDg2xQddkiHzoMBwIoNZXBzS-0-8956cd8d3f756122c47749757f67f22a)
说明:
① 循环语句中的变量c用于临时存储字符串中的每个字符。
② 本循环语句共循环3次。
2.while循环语句
Python中,while循环语句包含一个执行条件,当条件满足时就执行某段程序,直至条件不再满足。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_103.jpg?sign=1739279253-lwW8Vulynhzis0WcN34w3guJl8HCBx5W-0-e1749c99db55ee0a5a8676956070752f)
使用while循环语句遍历列表元素的代码如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_104.jpg?sign=1739279253-rY4Ju0RLFaKaNAFyEypUOIYnFM50W6fO-0-f4f2c760340da12391e9591743704c4a)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_105.jpg?sign=1739279253-DTFiJ28zIWQ8fhjvTTBdp15PTIPS0qjm-0-c8ad654fc1cb4843051b6c0be37a1c2f)
说明:
① 本例中的函数len(langs)的返回值是4。变量i的初始值是0,满足条件,则循环1次,变量i的值重新赋值为1;然后循环判断条件是否满足,直到变量i赋值为4时,条件不再满足,退出循环。本例共循环4次。
② 本例中的变量i必须在while循环语句前赋值,否则变量i没有赋值,无法进行条件判断。
循环语句while和for中经常使用break语句终止循环(即使满足循环条件也会停止执行)。continue语句用于跳出本次循环,执行下一次循环。注意,break语句将终止整个循环。例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_106.jpg?sign=1739279253-lGzQwH3GRzOM17YFY3mx9IxNTcwowTGa-0-e8fe9ea4763e02b4e78c16ecd6e4592b)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_107.jpg?sign=1739279253-yI7sTyypDtHBUKcL6J0ogmS76UlL7gpu-0-de2dfc68e2b2218001ea65e4e73a00c4)
说明:
① 程序的功能是从1开始的整数相加,当和大于10时不再相加跳出循环,打印输出。
② for循环语句的循环体包含两条语句。第一条是“sum= sum + i”,第二条是if语句,当条件“sum >10”的结果是“True”时,执行break语句,即条件满足退出for循环语句,执行for循环语句后面的print语句。
③ 程序最后的print语句的缩进格式表示这条语句不属于for循环,如该语句缩进,则属于for循环,该语句循环4次,输出如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_108.jpg?sign=1739279253-jb15eiu7m4Ss30Y4aOyLsdR60uxk9ym5-0-b6c2ac2cb42c75ace72db10fc784bc0f)
例如,语句continue如下。
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_109.jpg?sign=1739279253-dES9G3LPNj2taK0X9Yo9fButY1oUMur8-0-c3d68e3782f85d4e004dd93592ae46b5)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_110.jpg?sign=1739279253-FZH3teQewlN2ZUU3XeA468GEsZWHbhZG-0-6305fa354c24a13ae1decd5d3d06058a)
说明:
① 程序的功能是将1~10中的奇数相加,当超出10时不再相加跳出循环,打印输出。
② for循环语句的循环体包含两条语句。第一条是if语句,当条件“i %2==0”的结果是“True”时,即当变量i是偶数时,执行continue语句,跳出本次循环,即不执行第二条语句“sum= sum + i”,进入下一次循环。
循环语句还有一种包含else子句的用法,当循环条件不满足结束循环时执行,但循环被break语句终止时不执行。
输出20~30之间的质数的代码如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_111.jpg?sign=1739279253-RT4kqAjg0NwAg6U1Na7QXG2VenQdzpU2-0-108e0c4fe9a5b0c98ea4f56e2cb34401)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_112.jpg?sign=1739279253-9SENNCHx5YZ7IVcwTCDT2RxS6ggKMSuX-0-477a8a4f10439d3d3abde0bb8b613c66)
说明:
① 这是一个循环嵌套,即for循环语句中包含另一个for循环语句。
② 第二个for循环语句的范围是range(2,n//2),“n//2”表示n整除2的值。
③ 循环语句中的if语句的条件“n % x==0”表示当n能被x整除时,执行break语句终止内部的for循环,即不执行后面的else语句。但不影响外部for循环,即终止内部嵌套的for循环后,继续执行外部for循环。
④ 当内部for循环一直没有满足if条件,但因为超出range(2,n//2)范围而终止时,执行else语句,即n不能整除2~n//2的所有整数,则可判断其为质数。
思考:若将else语句缩进到与if语句同列,则运行结果如何?
2.7.6 输入和输出
Python语言经常使用print( )函数完成输出,使用函数input( )实现输入。函数print( )在前面的案例中已经多次使用,本节介绍如何使用该函数完成格式化输出,例如:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_113.jpg?sign=1739279253-vdwlA8XIze2iAtb7wdoEfgda1VNIIMGK-0-f8ab6887437c93f8a46d8d3521b412f3)
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_114.jpg?sign=1739279253-XVJEZi5YXRsdgbNamCMVPc3MVH1aQZKX-0-6e55ec1192ce22962246eca6b93359b8)
说明:
① 函数print( )中的“%”符号表示转换说明符的开始。转换说明符的具体含义见表2.11。
② 函数print( )还可以设置左对齐,显示正负号,设置最小字段宽度和精度等格式,具体参见帮助文档[41]。
表2.11 字符串格式化转换类型
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_115.jpg?sign=1739279253-nYfVuK9DUKr3GtSkidxioZFRE0MZAztp-0-9a4ff40d6123fb4d1b5184de3dcf1090)
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_116.jpg?sign=1739279253-FfGXzOGBjtKfOI5IwmYC1huWTfiO2mL1-0-dba707001d78842d5a25e08b7b6e8844)
函数input( )的功能是返回用户输入的字符串,默认的标准输入是键盘,每次仅读入一行文本。
程序运行结果如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_117.jpg?sign=1739279253-DJ0yVEn6nTF9FlP0L96ANphZbrXxrAHy-0-800979f3bd54c1a83656550159a359d7)
说明:
① 函数input( )包含一个参数时用于提示用户输入的内容。
② 程序运行input( )时,需要用户手动输入内容并回车后才能继续执行其他语句。
2.7.7 文件的读/写
文件对象用于建立与磁盘文件的联系,可以实现文件内容的读取,将字符串写入文件,或将获取的网络数据使用文件对象存储,方便后续的修改和使用。
读/写文件前,先用open( )函数打开一个文件,该函数的功能是返回一个文件对象。其格式如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_118.jpg?sign=1739279253-cQc4lxpnYg1kJTkxMc8F7uf9HBvnUDza-0-e9c520bfeafed9892e74776b89875a08)
说明:
① 第一个参数表示文件的名字,第二个参数说明打开文件的模式,即如何使用该文件,该参数省略,表示文件以“r”模式打开。文件的打开模式见表2.12。文件的打开模式可以有多种组合,如“r”模式表示以只读方式打开文件,“r+”模式是文件既可读也可写,从文件头部开始写,覆盖原文件的内容,但不会创建不存在的文件。“w+”模式是文件既可读也可写,若文件存在,则覆盖整个文件,与“r+”模式不同的是,若文件不存在,则新建文件。
表2.12 模式参数
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_119.jpg?sign=1739279253-PpNETqJ0XXeldg4g1OrhflBXy1O8LJSc-0-f4cdabcf8abe7fd6ccdd98d71b7372c0)
② 通常情况下,文件是以文本模式打开的,读写采用默认的UTF-8编码格式,以二进制模式打开的情况使用较少,一般以字节的形式进行读写操作。
文件对象file的常用函数见表2.13。
表2.13 文件对象的常用函数
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_120.jpg?sign=1739279253-9NPvy4iz3KBbE9bgZMHvsMLU4ijBVKY2-0-1e29bbd29bb6a2b752bd8a9f0640302f)
例如,读取文件内容的代码如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_121.jpg?sign=1739279253-ek3ZT69sy2RFa4H30NvApMypJLqz5YWU-0-6ce787d4a5fb26e4a66d9e1ee9ce9494)
说明:
① 代码的第1行以只读方式打开文件“test.txt”,函数open( )生成文件对象f。
② “f.name”的功能是返回文件对象f的文件名。
③ 函数f.read(10)从文件头部开始读取10字节后,赋值给变量line。
例如,将字符串写入文件的代码如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_122.jpg?sign=1739279253-fJxkscwPrnVPQWHim64rgL5bX4lyHRFQ-0-2f1a493a1c7490e66ea0d364b8ba0abb)
说明:
① 代码第2行以只写方式打开文件“test.txt”,若该文件不存在,则新建此文件。
② 代码“f. write(var1)”的功能是将变量var1的字符串写入对象f指向的文件“test.txt”。
③ 最后一行代码用于关闭文件。
例如,从一个文件中读取内容写入另一个文件的代码如下:
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_123.jpg?sign=1739279253-kyLDu4rZeETHoQhNSKnPqbBcsd1IwNdO-0-d5f4ac1d80a0689740b965a113d7a4bd)
![](https://epubservercos.yuewen.com/19D8F9/17493186307060406/epubprivate/OEBPS/Images/txt002_124.jpg?sign=1739279253-kwNuqZ1cjiiuPsbFT35VObqrlfAxQVBy-0-54909c5c0f40e672c6ebfe4e070313f8)
说明:
① 第1行缺少文件打开模式,默认表示文件以只读模式打开。
② 循环语句while多次执行,直到文件“input.txt”中的内容全部被读取。循环体中使用if语句判定是否退出循环,当内容全部读取后,再次读取时变量line的值为空,不符合条件,则使用语句break结束循环。
③ 最后2行代码分别关闭两个文件。