第3章数据与计算 数据和计算就是计算思维中的“计算环境”,它是一个程序运行所需要的硬件和软件。其中,数据部分包含数据类型、存储字节数量、存储表示方式与精度、数值大小与范围等;运算部分包含算术运算(含整除、求余)、关系运算、逻辑运算、位操作运算、赋值运算、条件运算等;组合符号部分包含关键字、标识符、变量名、表达式等;顺序程序部分包含常量定义、变量声明、输入输出的函数调用、模块引用、源程序的结构与书写格式、赋值语句等。 本章首先介绍输入输出操作、Python编码风格与简单程序组成、组合符号等,然后介绍数据类型的概念,最后分别介绍数字、字符串、布尔数据、列表、元组、字典、集合等数据类型及其运算。 注意,一台计算机的计算环境是固定的,程序运行是不可能超越这个环境的。例如,不能在32位Windows系统中安装64位的Python语言,反之亦然。仅就二进制浮点数据而言,国际电气电子工程师学会早在1985年就制定出IEEE 754标准。在这个标准中定义了浮点数的格式、一些特殊数值、非数值(例如NaN)等。通过这些工业标准,使制造软件(智力)产品的过程如同工业流水线一样,这也是国内外教育界大力推动计算思维的原因之一,毕竟,学习Python程序设计的目标之一是在特定计算环境下构造新的计算产品。 3.1输 入 输 出 大多数程序都包含输入数据和输出结果,没有输入数据的程序将运行在封闭的数据环境中,缺乏通用性,没有输出结果的程序则完全没有意义。另外,程序运行时序通常都是输入数据、进行计算和输出结果,这就是简单程序的形式。下面就介绍输入输出操作。 3.1.1输入数据 在输入数据方面,Python提供内置库中的input()标准函数来实现,一般调用格式如下: var=input()其中,是用引号界定的提示信息(即字符串)。 input()函数的功能是提示用户输入一个数据,并将该数据作为字符串送给指定的变量。 【例31】input()函数示例。 在IDLE交互环境中,输入如下命令: >>> data=int(input("请输入一个整数数据:")) >>> data运行结果如图31所示。 图31例31的运行结果 3.1.2输出数据1. 简单输出操作在输出数据方面,Python提供内置库中的print()标准函数来实现,格式如下: print(v1, v2, …)print()函数用于显示一行内容,即显示值表(v1,v2,…)中的全部(可以只有一个)数据,值表中的数据间必须用逗号分隔。 【例32】print()函数示例。 在IDLE交互环境中,输入如下命令: >>> x=12 >>> y=34 >>> print(x, y)运行结果: 12 342. 详解print()函数 print()函数的一般调用格式如下: print(, ="", ="\n", =sys.stdout, =False)说明: (1) : 表示可以一次输出多个对象,多个对象需要用逗号分隔。 (2) =" ": 用来间隔多个对象,默认值是一个空格,也可自行设置。 (3) ="\n": 用于设定结尾方式,默认是换行,也可自行设置。 (4) =sys.stdout: 用于指定对象必须要有写(write)的方法。 (5) : 该参数取True表示强制清除缓存,取False表示缓存由文件表示。 3. 数据格式 为表示直观的显示效果,需要对不同类型数据格式进行描述,如表31所示。表31数据格式描述 转换类型含义d有符号位的十进制整数o无符号位的八进制u无符号位的十进制续表 转换类型含义x或X无符号位的十六进制e或E科学计数法表示的浮点数f或F十进制浮点数g或G若指数大于-4或小于精度值,则和e相同,否则和f相同g单个字符(接受整数或者单字符字符串)r字符串(使用repr转换任意Python对象)s字符串(使用str转换任意Python对象)【例33】格式输出示例。 源程序如下: year=2017 month=12 day=25 #格式符%02d:数字转成两位整型, 不足两位高位补0, 字符原样显示 print("整数数据:\t%04d-%02d-%02d"%(year,month,day)) pi=3.1415926 #格式符%06.2f:总宽度为6, 小数2位, 小数点1位, 高位补00 print("实数数据:\t%06.2f"%pi) #格式符%.2e:以科学计数法输出浮点型, 保留2位小数 print("指数数据:\t%.2e"%pi) n=128 #格式符%4d:输出十进制, 高位补空格 print("十进制数据:\t%4d"%n) #格式符%4o:输出八进制, 高位补空格 print("八进制数据:\t%4o"%n) #格式符%04x:输出两位十六进制, 字母小写, 高位补00 print("十六进制数据:\t%04x"%n) #格式符%04X:输出四位十六进制, 字母大写, 高位补00 print("十六进制数据:\t%04X"%n)运行结果如图32所示。 图32例33的运行结果 3.2编码风格与简单程序 在介绍如何编写程序前,还需要介绍Python程序的编码风格。要让程序具有较好的可读性,养成良好的编码风格是至关重要的。 3.2.1编码风格 作为现代语言,Python引入大多数软件开发过程中遵循的编程风格。它给出了一个高度可读、视觉感知极佳的编码风格。每个Python程序员都应该理解并运用这些风格,其中的大多数要点都会对编程有所帮助。 (1) 使用4个空格表示缩进层次,而不是Tab键。 (2) 每行确保不要超过79个字符,行尾字符或第80个字符专门表示换行。 (3) 适当使用空行分隔语句块、函数、类、模块等对象。 (4) 最好让注释信息独占一行,即成为注释行。 (5) 把空格放到操作符两边以及逗号后面。 (6) 使用统一的标识符命名,例如使用著名的SmallTalk法则。 (7) 函数名和方法名用小写字母,并用下画线连接成组合符号。 (8) 类名首字母大写,其余使用小写字母。 (9) 程序结构要简单易读,使用标准语句模式。 3.2.2简单程序 简单程序是指该程序自始至终按照语句序列的排列顺序,从头到尾逐条执行,即严格遵循“属性声明→准备数据→进行计算→输出结果→程序结束”的处理时序。 【例34】计算矩形面积。 源程序如下: a=int(input("矩形长度:\t")) #输入矩形长度 b=int(input("矩形宽度:\t"))#输入矩形宽度 area=ab#计算矩形面积 print("矩形面积:\t",area) #输出结果程序运行时输入矩形的长度和宽度是5和8,则运行结果如图33所示。 图33例34的运行结果 注意: 本例中的第1行调用int()函数将字符串格式的数据转换成整型数据。另外,字符\t是表示功能转义的特殊符号,可实现左对齐。 【例35】输入一个华氏温度值,编程输出对应的摄氏温度值。 将华氏温度(用f表示)转换成摄氏温度(用c表示)的公式是c =5×(f-32)/9。 源程序如下: f=float(input("华氏温度:\t"))#输入华氏温度值 c=5(f-32)/9#计算摄氏温度值 print("摄氏温度:\t",c)#输出摄氏温度值程序运行时输入华氏温度数据是100,则运行结果如图34所示。 图34例35的运行结果 本例中包含两个整数相除(实除运算)导致结果为实型数据。另外,通常输入数据是从最左侧开始的,而这里的摄氏温度值是一个18位的实型(含正负符号和小数点的float类型)数据,这样使输入数据与输出数据没有办法实现左对齐或右对齐。 3.3组 合 符 号 通常计算机语言(例如Java、C、Python等)都是使用键盘符号作为编程所用的字符集,字符集包含大小写字母、阿拉伯数字、空格、标点、特殊字符、功能字符等。将字符集中的字符按照特定规则进行组合,就成为语句中的相关语法成分。“组合符号”包括标识符(含预定义标识符)、运算符、分隔符、字面量(即常量)等,其中标识符可以用于表示关键字、变量名、函数名、对象名、类名、模块名、包名等。 运算符还可以与常量、变量、函数调用等一起构成计算式(表达式),从而表示各种运算,通常运算符是由一个或多个字符组成的。另外,分隔符用于区分不同的语法成分,常用分隔符有逗号和空格两种。逗号主要用在类型说明和函数的参数表中,用于分隔各个变量。空格用于在语句各成分之间作为分隔符。 3.3.1标识符1. 标识符及其定义在程序中使用的关键字、变量名、函数名、类名、文件名等统称为标识符。除语句定义符、关键字、标准函数名等均是由系统定义以外,其余都是由用户自行定义的。Python规定,标识符只能是由字母(A~Z,a~z)、下画线和数字(0~9)构成的一个字符串,并且其中的第一个字符必须是字母或下画线。在Python语言中有许多预定义的运算符号如+、-、、/等,它们是不可以用于定义标识符的。 表32中的标识符都是合法的。表32合法标识符示例 标 识 符说明average_score由字母和下画线构成grade80由字母和数字构成_numbers由字母和下画线构成并以下画线开头表33中的组合符号都是不合法的标识符。表33不合法的组合符号示例 标 识 符说明标 识 符说明x2使用非法字符ab由减号作为首字符2n由数字作为首字符$salary由美元符作为首字符2. 定义标识符的要求 在定义标识符时,还应该特别注意如下要求。 (1) Python并没有限制标识符的长度,但是任何计算环境的资源都是有限的,所以建议在使用标识符时将其长度约束在32个字符以内。 (2) Python自动区别标识符中的大小写字母,例如age和AGE就是两个不同的标识符。 (3) 不要随意定义标识符,由于因为标识符是用于标识一个语法成分的符号,在命名时应尽量沿用相应的意义(例如计算习惯),以提高程序的可读性,最好做到“见名知义”。例如,用salary和pay表示工资是比较合理的。 (4) 一些组合符号(例如if、for等)已经被Python作为关键字,不能作为标识符。 (5) 以双下画线开始和结束的组合符号通常被Python定义特殊含义,例如__init__为类的构造方法(函数在对象编程中的称呼),也是不能作为标识符的。 (6) 避免使用预定义标识符名作为自定义标识符,例如int、float、list、string、tuple等。 3.3.2关键字 关键字是在Python中具有特定意义的字符串,通常也称为保留字,即系统已经进行定义并约束其使用范围,所以用户自定义标识符不能与关键字相同。 【例36】使用Python帮助系统查看关键字。 具体操作如下: 进入IDLE交互环境中,并输入如下命令: >>> help()输入命令后的显示内容如图35所示。 图35help()命令 如图35所示,在左下角的显示信息表示进入IDLE帮助系统,此时的提示符为help>字符串。这时要查看关键字列表,可输入如下命令: help> keywords输入命令后的显示内容如图36所示。 图36关键字 要退出帮助系统,可输入如下命令: help> quit输入命令后的显示内容如图37所示。 图37退出帮助系统 此时的提示符还原为>>>字符串,表示再次进入IDLE交互环境。 3.3.3预定义标识符 Python语言包含许多系统内置的类名、对象名、异常名、函数名、方法名、模块名、包名等对象的预定义名称,例如math、float、ArithmeticError、print等,建议读者避免使用预定义标识符名作为自定义标识符。 【例37】使用Python的help()内置函数查看内置函数。 要显示input()内置函数的详细内容,可在IDLE交互环境中输入如下命令: >>> help(input)输入命令后的显示内容如图38所示。 图38函数input()的帮助信息 【例38】使用Python的help()内置函数查看内置异常。 要显示内置异常ArithmeticError的详细内容,可在IDLE交互环境中输入如下命令: >>> help(ArithmeticError)输入命令后的显示内容如图39所示。 图39计算出错ArithmeticError异常的帮助信息(部分截图) 3.3.4命名规则 在使用组合符号时,应该尽量做到见名知意,这样可以增加程序的可读性。Python倡导并遵循的命名规则如表34所示。表34Python遵循的标识符命名规则 项目说明文件名全小写,可用下画线作为分隔符包或模块全小写,可用下画线作为分隔符,例如mypackage或my_package类单词中的首字母大写,内部类可用额外的前导下画线,例如Myclass函数或方法全小写,可用下画线作分隔,例如my_example,my__function等函数或方法的参数用self作实例方法的第1个参数,用cls作为类方法的第1个参数。若函数的参数名与保留字同名,可用后缀下画线区分全局变量对from module import ,若要阻止全局变量则可在其上加前导下画线3.4数 据 类 型 数据类型是指简单数据的基本属性,这是一个十分重要的概念,因为数据运算必须遵守一条基本原则: 只有相同或兼容类型的数据之间才能进行运算。 3.4.1数据类型及其分类1. 基本数据类型与复合数据类型基本数据类型也称为简单数据类型,这些类型的数据是不能再分解的。在这些数据类型的基础上,可以创建其他的数据类型(又称为复合数据类型),例如列表、元组、集合、字典等,均是由若干元素合成的。Python中的基本数据类型包括整型、浮点型、布尔类型等,这类数据具有明确的数据范围和相应的运算模式。 2. 不可变数据类型与可变数据类型 在了解数据类型和构成后,还需要知道数据类型是否是可变的。Python中的不可变数据类型是不允许元素的值发生变化的,但是可变数据类型则会允许元素的值发生变化,即若对此类变量进行像append、+、+=等修改操作,系统均会正常运行。 在Python中,可变数据类型包括整型、浮点型、布尔类型、列表和字典,不可变数据类型包括字符串型、元组等。 3.4.2常量和变量 在介绍计算机中的数据时,自然要区分常量和变量。 1. 常量 所谓常量(又称为字面量)是指在程序运行过程中始终都不会发生变化的一个值,它完全是由书写形式确定的,而与数学、物理、化学等领域中的经典常数没有关联。在编程过程中,经常将一些关键的数据设置成常量,这样做可以提高程序的可读性,而且对程序设计的扩充与修改也是十分方便的。 2. 变量 所谓变量是指在程序运行过程中可能会发生变化的一个量,本质上是所对应存储单元的内容发生了变化。在程序设计过程中,正是由于变量值不断发生变化,才能使计算结果最终能够满足实际的需要。合理地使用变量可以提高程序的可读性,而且有利于对程序进行扩充修改。 3.5数 字 数 据 数字数据主要包括整数、实数、分数和复数,基于计算机数据的离散且有限的性质,这些数据作为类型分别称为整型、实型、分数型和复数型。 3.5.1整型数据1. 整型常量在Python中,允许使用4种整型(int)常量,除默认的十进制常量外,还可以使用二进制、八进制、十六进制等数制表示的常量,不过要通过添加前缀来与十进制常量进行区分,二进制、八进制和十六进制数的前缀分别是0b、0o和0x(其中x可写为X)。 【例39】int数据示例。 源程序如下: a=1234 b=0o1234#八进制数 c=0X1234#十六进制数 print("a=",a,"\nb=",b,"\nc=",c)#转义字符\n表示换行运行结果如图310所示。 图310例39的运行结果 从运算结果可以发现,一个由数字组成的字符串按不同进制识别,将得到不同的结果,这就导致计算机中必须严格区分各种数据类型。 2. 算术运算 整型数据的算术运算如表35所示。表35算术运算 运算符名称描述+加两个数据相加减表示负数,或一个数减去另一个数乘两个数相乘或返回一个被重复若干次的字符串/除两个数据相除//整除两个数据相除后的整数商部分%取余两个数据相除后的余数部分乘方两个数据的乘方运算在Python中,整除运算符//可以用于实数运算,例如5.2//3的结果是1.0,而5/2的结果是2.5。 【例310】算术运算示例。 源程序如下: a=2 b=4 c=5 print("c%a=",c%a) #整数取余运算 print("c/a=",c/a) #除法运算, 结果为2.5 print("c//a=",c//a) #整除运算, 结果为2 print("ba=",ba) #乘方运算 print("cab=",cab)#乘方运算从右至左计算为(右结合)运行结果如图311所示。 图311例310的运行结果 【例311】在居民身份证的18位数字中,有关于出生年、月、日、性别等的信息,例如第7~10位、第11~12位、第13~14位分别表示出生年、月、日,第17位表示性别,奇数指男性,偶数指女性。编程显示这4个信息。 求解方法: 输入一个虚构的身份证号码(例如510102196109089543),利用整除和取余运算分别取出其中的出生年、月、日和性别信息。 源程序如下: id=int(input("身份证号码:")) year=id//100000000%10000 month=id//1000000%100 day=id//10000%10 sex=id%100//10 print("出生日期:",year,"年",month,"月",day,"日") if sex % 2==1: print("此人男性") else: print("此人女性")本例中使用整除和取余运算分别取身份证号码中的出生年、月、日和性别信息。 运行结果如图312所示。 图312例311的运行结果 3. 位运算 位运算是以二进制整数的数位为基础进行运算的,没有进位与借位问题,也不涉及符号位,所以又称为按位运算。常用的按位运算符如表36所示。表36按位运算符 运算符名称描述&按位与两个数进行运算,若对应两个二进制位均为1,则结果为1,否则为0|按位或两个数进行运算,若对应两个二进制位均为0,则结果为0,否则为1^按位异或两个数进行运算,若对应两个二进制位相异,则结果为1,否则为0 ~按位取反对每个二进制位取反,即1变为0,0变为1<<左移全部二进制位左移指定位,高位丢弃,低位补0>>右移全部二进制位右移指定位,低位丢弃,高位沿用 说明: 左移n位是将该值乘以2n,右移n位是将该值除以2n。 【例312】位运算示例。 源程序如下: a=0o400#八进制数 b=a<<1#左移1位 print("a=",a,"\nb=",b)本例中的第1行使用八进制常量0o400,对应的十进制数值为256;第2行使用左移运算<<,这里左移1位是将该值乘以2,即最低位添0,则得到512。 运行结果如图313所示。 图313例312的运行结果 3.5.2实型数据 实型(float)常量又称为浮点型常量,常常用于表示有小数部分的数据。尤其是对于一些很大或很小的数以及一些其他非整数的十进制数据,都必须使用浮点型常量。浮点数代表具有小数部分的十进制数,它们可以用自然计数法或科学计数法来表示。其中,自然计数法是由一个整数部分和一个纯小数部分组合来表示浮点型数据的,例如123.456。科学计数法是使用指数幂形式来表示浮点型数据的,例如12.3456e1、1.23456e2和0.123456e3。 由于只有相同或兼容类型的数据才能进行计算,所以当参与运算的数据中有一个为浮点数时,会自动将另一个数转换为浮点数,其结果也是浮点数。在Python中除法运算与数学保持一致。即两个整数相除8/5的结果为1.6,不再是1,也就是除法中的两个数据在Python中已在运算前进行过类型转换,然后相除并得到浮点数形式的商。另外,Python使用符号“//”表示整除,又称为floor除法,例如8//5的结果为1,6.5//2.5的结果为2.0。 有些数据类型是兼容的,可以在进行数据类型转换后进行处理,举例如下。 【例313】数据类型转换示例。 源程序如下: ch1=65 ch2=66 print("ASCII码65表示:\t%c"%ch1) print("ASCII码66表示:\t%c"%ch2) N1=0x12 print("N1转换为十进制:\t",N1) N2=0x123 print("N2转换为十进制:\t",N2) N3=123456789 print("N3转换为十进制:\t",N3)本例中的%c和%d是描述字符和整数的格式符,运行结果如图314所示。 图314例313的运行结果 3.5.3分数型数据 分数(fractions)数据由分子和分母这两个整数构成,分别作为构造函数Fraction()中的两个参数,即Fraction(x,y)表示分数x/y。使用分数后,可避免浮点数的某些计算误差,但在使用分数前需要导入分数模块fractions。由于Python通过重载技术实现分数的四则运算,所以分数的四则运算可以直接书写,系统会自动计算出对应的分数运算结果。 【例314】分数数据示例。 源程序如下: #导入分数模块fractions from fractions import Fraction a=Fraction(1,2) b=Fraction(1,3) print("a-b=",a-b) print("a+b=",a+b) print("ab=",ab) print("a/b=",a/b)运行结果如图315所示。 图315例314的运行结果 本例中的Fraction(1,2)表示生成分数数据1/2。注意,分数数据是不能由实型数据05替代的,因为数据类型不同。 3.5.4复数型数据 正如数学运算那样,Python中的复数是由实部和虚部构成的数据,例如2+5J(其中J可以是小写字母j),显然虚部是必须存在的。标记虚部的后缀符号可以是j或J。由于Python通过重载技术实现复数的四则运算,所以复数的四则运算可以直接书写,系统会自动计算出对应的复数运算结果。 【例315】复数数据示例。 源程序如下: a=2+3J b=3+2J print("a-b=",a-b) print("a+b=",a+b) print("ab=",ab) print("a/b=",a/b)运行结果如图316所示。 图316例315的运行结果 3.6字符串型数据 Python可以使用字符串(string)类型,并没有表示单个字符的数据类型,即单个字符将作为长度为1的字符串进行处理。另外,Python中的内置数据类型string可用于实现字符串的表示和处理。 3.6.1字符串常量 表示字符串常量,可以通过单引号或双引号界定,具体用法如表37所示。表37字符串常量 字符串常量说明单引号包含在单引号中的字符串,其中可以内含双引号双引号包含在双引号中的字符串,其中可以内含单引号三单引号包含在三单引号中的字符串,可以表示跨行的字符串【例316】字符串常量示例。 源程序如下: print("") print("Python Programming") print("")本例中定义3个字符串常量并分别进行显示。 运行结果如图317所示。 图317例316的运行结果 3.6.2转义字符 Python的字符型常量具有16位值,并可以转换成整数,可以用整数运算符对它进行操作。全部可见的ASCII字符(除控制字符)都是可以直接用引号界定的,例如"A"、"5"、""等,但是对于那些不能直接输入的字符即控制字符,则可以通过转义字符来表示,如表38所示。表38转义字符 转义字符说明\(在行尾时)续行符\\反斜杠符号\'单引号\"双引号\a响铃\b退格(Backspace)\e转义\000空符号\n换行\v纵向制表符\t横向制表符\r回车\f换页\ddd八进制数ddd代表的字符,例如\012代表换行\xdd十六进制数dd代表的字符,例如\x0a代表换行\other其他的字符以普通格式输出【例317】含转义字符的字符串示例。 源程序如下: s="a\tb\tc"#转义字符\t表示横向制表符 d="\101"#表示八进制数的ASCII码 e="\x41"#表示十六进制数的ASCII码 print("s=",s) print("d=",d) print("e=",e)运行结果如图318所示。 图318例317的运行结果 3.6.3字符串测试函数 Python中内置许多字符串测试函数,测试函数的返回结果是布尔类型,即结果是True或False。测试函数均要求字符串至少包含一个字符,否则将返回False。常用字符串测试函数如表39所示。表39字符串测试函数 函数说明isalpha()判断是否全部为字母,若是,则返回True,否则返回Falseisalnum()判断是否全部为字母和数字,若是,则返回True,否则返回Falseisdigit()判断是否全部为数字,若是,则返回True,否则返回Falseislower() 判断是否全部为小写字母,若是,则返回True,否则返回Falseisupper()判断是否全部为大写字母,若是,则返回True,否则返回Falseisspace()判断是否全部为空格,若是,则返回True,否则返回False【例318】字符串测试函数示例。 源程序如下: str="Python 6.3.3" dgt="123456789" print("isalpha():\t",str.isalpha()) print("isalnum():\t",str.isalnum()) print("isdigit():\t",str.isdigit()) print("islower():\t",str.islower()) print("isupper():\t",str.isupper()) print("isspace():\t",str.isspace()) print("123456789:\t",dgt.isalnum())运行结果如图319所示。 图319例318的运行结果 3.6.4字符串运算符 字符串运算符如表310所示。表310字符串运算符 运算符描述+字符串左右连接重复表示字符串[]通过索引号获取字符串中的指定字符[: ]截取字符串中的连续部分In成员运算符,若字符串中包含指定字符则返回True,否则返回False续表 运算符描述not in成员运算符,若字符串中不含指定字符,则返回True,否则返回Falser/R原始字符串,字符串均按字面来使用,无转义特殊或不可显示字符【例319】字符串运算示例。 源程序如下: s1="Python" s2="Programming" s3=s1+s2 s4=s13 s5=s2[0:6] s6="python" in s1 s7="python" not in s1 print("s1:\t",s1) print("s2:\t",s2) print("s3:\t",s3) print("s4:\t",s4) print("s5:\t",s5) print("s6:\t",s6) print("s7:\t",s7)运行结果如图320所示。 图320例319的运行结果 3.6.5字符串内置函数 字符串内置函数如表311所示。表311字符串内置函数 函数描述capitalize()串首字符大写center(width)返回原串居中部分并用空格填充至width的新串count(str,beg=0,end=len(string))返回子串str在原串string中出现的次数,若beg或end指定,则返回指定范围内子串str出现的次数decode(encoding='UTF8',errors= 'strict')以encoding编码格式解码原串string。除非errors指定ignore或replace,否则若出错,则默认抛出ValueError续表 函数描述expandtabs(tabsize=8)将原串中Tab符转换成空格,Tab默认空格数为8find(str,beg=0,end=len(string))检测子串str是否包含在原串string中。若指定beg和end,则检查是否包含在指定范围内,若是则返回开始索引值,否则返回-1format()格式化字符串index(str,beg=0,end=len(string))与find()一样,若子串str不在原串string中,则抛出异常join(seq)以原串作为分隔符,将子串seq中的所有元素合并为新串ljust(width)返回原串,左对齐并用空格填充至长度为width的新串lower()转换原串中所有大写字母为小写lstrip()删除原串左侧的空格max(str)返回str串中的最大字母min(str)返回str串中的最小字母replace(str1,str2,num=count(str1))将原串中的子串str1替换成子串str2,若指定num则替换不超过num次rfind(str,beg=0,end=len(string))与find()类似,不过是从右边开始rindex(str,beg=0,end=len(string))与index()类似,不过是从右边开始rjust(width)返回长度的width的串,原串右对齐,前面用空格填充rpartition(str)与partition()类似,不过是从右边开始查找rstrip()删除原串末尾的空格split(str="",num=count(str))以子串str为分隔符将原串切片,若指定num则仅分隔num个子串strip([obj])在原串上调用lstrip()和rstrip()swapcase()翻转原串中的大小写字母title()返回“标题化”的原串,即单词以大写开始,其余字母小写translate(str,del="")根据子串str给出的表转换原串的字符upper()转换原串中的小写字母为大写形式zfill(width)返回长度为width的新串,原串右对齐,前面填充0【例320】字符串内置函数示例。 源程序如下: #初始化字符串 str="Python Pragramming" #将字母转换成大写形式 s1=str.upper() #将字母转换成小写形式 s2=str.lower() print("原始字符串:\t",str) print("转换成大写:\t",s1) print("转换成小写:\t",s2)运行结果如图321所示。 图321例320的运行结果 字符串是任何信息处理的基础,在第4章中将详细介绍字符串及其编程。 3.7布尔型数据 布尔型(boolean)数据又称为逻辑型数据,用于表示条件判断。实际上,数学中的关系运算也可以进行条件判断,这是布尔型数据中的较简单形式。下面首先说明关系运算,然后再介绍布尔型数据和运算。 George Boole(1815—1864)是英国杰出的数学家,他最早开创了逻辑代数的理论。后来,人们为了纪念他,就将逻辑类型数据称为布尔类型数据。 3.7.1关系运算 关系运算符用于比较运算,只有相同数据类型的两个表达式才能进行比较,运算结果只能为两种逻辑值True或False。关系运算符的内容如表312所示。表312关系运算符 名称关系运算符示例名称关系运算符示例大于>20>10不等于!=20!=10小于<20<10大于等于>=20>=10等于==20==10小于等于<=20<=10例如: 关系表达式50>100的结果为False。 说明: (1) 关系运算符确定一个操作数与另一个操作数之间的关系,运算的结果为逻辑类型,它经常用于条件语句和循环语句中的条件判断。 (2) 英文符号比较大小是按其ASCII码的码值大小进行比较的。汉字字符串比较大小使用相应的汉语拼音字母代替该汉字。然后,再按英文字母比较大小的规则进行比较。 关系比较运算符与数学中的比较运算一致,一般是两个类型相同的对象进行运算,一般而言不同对象之间不能进行比较。数字进行比较的是数值大小,字符串进行比较的是对应ASCII码的码值大小,所以可以用<、<=、>、>=、==和!=这些运算符来连接两个字符串,依次比较字符串中各个字符的ASCII值,得到比较的逻辑结果为True还是False。 列表和元组也是可以比较的,操作逻辑与字符串类似。 3.7.2布尔常量 布尔型数据只有两个: True和False,分别表示真或假。在Python中,空数据类型的布尔运算结果均为False。实际上,布尔型数据是整型数据的子类。条件比较运算的结果就是布尔型数据,因此布尔型数据通常作为程序中的分支选择或循环重复的测试条件来使用。 说明: (1) 所有关系表达式的返回值都是布尔型常量True或False。 (2) 在输出逻辑类型的数据时,结果只能是True或False。 (3) 布尔型数据不能转换成另外的数据类型。 3.7.3布尔运算 布尔运算符是对一个或两个逻辑型表达式实施逻辑运算,只能产生逻辑型的运算结果,即True或False。在Python中,只有逻辑与(and)、逻辑或(or)和逻辑非(not)3个逻辑运算符。逻辑运算符的含义如表313所示。表313逻辑运算符 名称逻辑运算符示例说明逻辑与anda and ba和b同时为True则结果为True,其余都为False逻辑或ora or ba和b同时为False则结果为False,其余都为True逻辑非notnot aa为True则结果为False,a为False则结果为True注意: 在运用逻辑与(and)和逻辑或(or)运算符时,可以通过合理地安排表达式的执行顺序来提高程序的运行效率。例如,对于逻辑与(and)运算符,如果左侧的表达式结果为False,就不必再计算右侧表达式了。同样,对于逻辑或(or)运算符,如果左侧的表达式结果为True,也就不必计算右侧表达式了。这种运算处理类似于零乘任何数为零,也没有相乘。 【例321】编程判断2017年是否为闰年。(提示: 闰年条件是能被4整除但不能被100整除,或能被400整除。) 是否闰年的布尔型表达式为year%4==0 and year%100!=0 or year%400==0。 源程序如下: year=int(input("今年:")) flag=year%4==0 and year%100!=0 or year%400==0; if flag: print(year,"年是闰年") else: print(year,"年不是闰年")本例中的第1行要求键盘输入年份(实际输入为2017),第2行直接使用布尔型表达式来表示闰年条件,第3~6行使用if语句得到判断结果并显示。 运行结果如图322所示。