Python从入门到精通 第三章(基本数据类型)

一、数字类型

1、整数类型

(1)整数类型与数学中的整数概念一致,理论上的取值范围是负无穷到正无穷,实际上,只要计算机内存足够大,Python程序可以使用任意大小的整数(这在C语言中是很难实现的)。

(2)默认情况下,整数采用十进制表示,如果想要采用其它进制则需要增加引导符号,如下表所示。

进制种类

引导符号

描述

十进制

默认情况,例如2005、803

二进制

0b或0B

由字符0和1组成,例如0b1010、0B1001

八进制

0o或0O

由字符0到7组成,例如0o1712、0O7753

十六进制

0x或0X

由字符0到9、a到f或A到F组成,例如0x3FFF、0X7BC0

(3)运算示例:

# 0x3F2转换为十进制即1010,0o1762转换为十进制即1010
print((0x3F2 + 1010)/0o1762)

# 0x1010转换为十进制即4112
print(0x1010 == 4112)

2、浮点数类型

(1)浮点数类型与数学中实数的概念一致,表示带有小数的数值。Python中的浮点数必须带有小数部分,小数部分可以是0,例如1010是一个整数,但1010.0是一个浮点数(需要注意的是,值相同的整数和浮点数,进行幂运算的结果可能会不同,主要体现在精度上)。

(2)浮点数有两种表示方法,一种是十进制形式的一般表示,另一种是科学计数法表示。十进制形式比较简单,这里不再赘述;科学计数法使用字母e或E作为幂的符号,以10为基数,表示为

        例如1.01e3的值为1010.0,-1.01E-3的值为-0.00101。

(3)Python浮点数类型的数值范围和小数精度受不同计算机系统的限制,一般来说,浮点数的取值范围在-1.79×10308到1.79×10308之间,浮点数之间的区分精度约为2.22×10-16。(一般可以认为浮点数类型没有范围限制,运算结果准确)

3、复数类型

(1)复数类型表示数学中的复数,Python中,复数可以看做是二元有序实数对(a,b),表示a+bj,其中a是实数部分,b是虚数部分(b=1时也不能省略b)。

(2)复数类型中实部和虚部都是浮点类型,对于复数z,可以用z.real和z.imag分别获得它的实数部分和虚数部分。

二、数字类型的运算

1、数值运算操作符

(1)算数运算符是运算符的一种,是完成基本的算术运算使用的符号。

操作符及运算

描述

+

x+y,x与y的和

-

x-y,x与y的差

*

x*y,x与y的积

/

x/y,x与y的商,运算结果为浮点数

//

x//y,x与y的整数商,即不大于x与y的商的最大整数

%

x%y,x与y做除法后的余数,也称为模运算

-x

x的相反数

+x

x本身

**

x**y,x的y次幂

(2)算数运算符的优先级:先乘除后加减;同级运算符是从左至右计算;可以使用()调整计算的优先级。以下表格的算数优先级由高到最低顺序排列。

(3)数值运算可能改变结果的数据类型,类型的改变与运算符有关,有如下基本规则:

①整数和浮点数混合运算,输出结果是浮点数。

②整数之间运算,产生结果类型与操作符相关,除法运算的结果必定是浮点数。

③整数或浮点数与复数运算,输出结果是复数。

(4)上表中的所有二元运算操作符(+、-、*、/、//、%、**)都可以与赋值符号(=)相连,形成强赋值运算符(+=、-=、*=、/=、//=、%=、**=),实际上强赋值运算符就是C语言中的复合运算符。为了方便描述,用op表示这些二元运算操作符,增强赋值操作符的用法如下:x op = y等价于x = x op y。

2、数值运算函数

函数

描述

abs(x)

x的绝对值

divmod(x,y)

(x//y,x%y),输出为二元组形式(也称为元组类型)

pow(x,y)或pow(x,y,z)

x**y或(x**y)%z,幂运算

round(x)或round(x,d)

对x四舍五入,保留d为小数,无参数d则返回四舍五入的整数值

max(x1,x2,…,xn)

x1,x2,…,xn的最大值,n没有限定,可以是任意数量

min(x1,x2,…,xn)

x1,x2,…,xn的最小值,n没有限定,可以是任意数量

3、数值比较运算

(1)对于数字类型,比较运算可以在整数和浮点数之间任意进行。

(2)涉及复数类型的比较运算受限,只能判断是否相等,即只能使用“==”和“!=”,其它判断大小的比较符号都不能使用,否则会报错。

三、真假无值与逻辑运算

1、真假值:True与False

(1)True和False是Python的关键字,表达相对立的“真”“假”二元数值,严格来说,它们也属于数字类型,其中True表示与1相等的值,False表示与0相等的值。

(2)一般True和False仅用于真假逻辑的场景,不与整数进行数值比较。对于更广泛的应用场景,Python将所有非0值数字都等价为True,这个等价将广泛应用于逻辑判断。

(3)True和False与其它数字类型数据进行运算时,True,对应的数字是1,False对应的数字是0。

2、无值:None

(1)None是Python的关键字,表达无、没有、空等含义。

(2)None不是False,它不表示0,不表示空字符串,不对应任何数值。

(3)示例:

a = print("2005.08.03")
print(a == None)
# print函数运行后不会返回任何内容,因此变量a的值是空
# 作为程序设计逻辑完整性要求,需要用某个值赋给变量a,这个值就是None

3、逻辑运算:and、or、not

(1)与或非操作可以组合使用,为了让操作关系更加清楚,可以借助小括号进行分组。

(2)当and和or组合使用且没有使用括号分组时,按照从左向右的原则依次计算,直至产生结果。

四、运算符的优先级

以下表格的算数优先级由高到最低顺序排列。

五、字符串类型及格式化

1、字符串的表示

(1)字符串是字符的序列表示,根据字符串的内容分为单行字符串和多行字符串。

①单行字符串可以由一对单引号(‘)或双引号(“)作为边界来表示,单引号和双引号的作用相同。当使用单引号时,双引号可以作为字符串的一部分;当使用双引号时,单引号可以作为字符串的一部分。

②多行字符串可以由一对三单引号(’’’)或三双引号(”””)作为边界来表示,两者作用相同。

"""
使用多行字符串,在敲代码时输入回车,输出也会自动换行
另外,三双引号也可以用来做注释
"""
print("""多行'字符串'1
多行"字符串"2""")

# 使用单行字符串,在敲代码时输入回车,输出并不会跟着换行
print("单行'字符串'1"
      "单行'字符'串2")

2、反斜杠字符

(1)反斜杠字符(\)是一个特殊字符,在Python字符串中表示“转义”,即该字符与后面相邻的一个字符共同组成了新的含义,例如\n表示换行、\\表示反斜杠、\’表示单引号、\”表示双引号、\t表示制表符(Tab,协助在输出文本时垂直方向保持对齐)等。

print("这里\n有一个换行")
print("这里\\有一个反斜杠")
# 当字符串中既需要出现单引号又需要出现双引号,则需要使用转义字符
print("既需要'单引号'又需要\"双引号\"")
print("这里\t有一个制表符")

(2)反斜杠字符(\)同时还可以作为续行符,在第一章中有相关介绍,这里不再赘述。

3、字符串的索引

(1)对字符串中某个字符的检索被称为索引,索引的使用方式如下:

<字符串或字符串变量>[序号]

(2)字符串包括两种序号体系:正向递增序号和反向递减序号。

如果字符串长度为L,正向递增需要以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1;反向递增需要以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。

print("玛卡巴卡,唔西迪西"[4])
print("玛卡巴卡,唔西迪西"[1])
print("玛卡巴卡,唔西迪西"[0])
print("玛卡巴卡,唔西迪西"[-1])
print("玛卡巴卡,唔西迪西"[-8])

4、字符串的切片

(1)对字符串中某个子串或区间的检索称为切片,切片的使用方式如下:

<字符串或字符串变量>[N:M]

①切片获取字符串从N到M(不包含M)的字符子串,其中N和M为字符串的索引序号,可以混合使用正向递增序号和反向递件序号。

②切片要求N和M都在字符串的索引区间,如果N大于等于M,则返回空字符串。

③如果N缺失,则默认将N设为0;如果M缺失,则默认表示到字符串结尾。

print("玛卡巴卡,唔西迪西"[1:4])
print("玛卡巴卡,唔西迪西"[8:4])
print("玛卡巴卡,唔西迪西"[:4])
print("玛卡巴卡,唔西迪西"[0:4])
print("玛卡巴卡,唔西迪西"[5:])
print("玛卡巴卡,唔西迪西"[5:9])

(2)字符串切片还有一种高级用法,使用方式如下:

<字符串或字符串变量>[N:M:K]

①该方法获取字符串从N到M(不包含M)、以K为步长(可简单理解为每K个字符取一个字符)的字符串,其中N和M为字符串的索引序号,可以混合使用正向递增序号和反向递件序号,K为整数。

②当K为负数时,将返回从M到N(不包含N)的反向字符串。

print("玛卡巴卡,唔西迪西"[1:4:2])
print("玛卡巴卡,唔西迪西"[1:8:2])
print("玛卡巴卡,唔西迪西"[::4])
print("玛卡巴卡,唔西迪西"[8:1:-1])
print("玛卡巴卡,唔西迪西"[:2:-2])
print("玛卡巴卡,唔西迪西"[::-1])

5、字符串的基本格式化

(1)在字符串中整合变量时需要使用字符串的格式化方法,字符串格式化用于解决字符串和变量混合输出时的格式安排问题。Python推荐使用format格式化方法,其使用方式如下:

<模板字符串>.format(<逗号分隔的参数>)

①模板字符串是一个由字符串和槽组成的字符串,用来控制字符串和变量的显示效果。槽用大括号({})表示,对应format方法中逗号分隔的参数。

②如果模板字符串有多个槽,且槽内没有指定序号,则按照槽出现的顺序分别对应format方法中的不同参数。

# 输出字符串模板中采用大括号{}表示一个槽位置,每个槽位置对应format()中的一个变量
a = 2005
b = 803

print("数字{}和数字{}的乘积是{}".format(a,b,a*b))
print("数字{0}和数字{1}的乘积是{2}".format(a,b,a*b))
print("数字{1}和数字{0}的乘积是{2}".format(a,b,a*b))

③如果字符串中出现槽的数量和format方法中出现的参数数量不一致,即程序不能够通过简单的顺序对应确定参数使用,则必须在槽中使用序号指定的参数使用,否则会产生IndexError错误。

6、字符串的格式控制

(1)format方法的槽除了包括参数序号,还可以包括格式控制信息,语法格式如下:

{<参数序号>:<格式控制标记>}

:

<填充>

<对齐>

<宽度>

<,>

<.精度>

<类型>

引导符号

用于填充的单个字符

<左对齐

>右对齐

^居中对齐

槽的设定输出宽度

数字的千位分隔符,适用于整数和浮点数

浮点数小数部分的精度或字符串的最大输出长度

整数类型b,c,d,o,x,X,浮点数类型e,E,f,%

(2)格式控制标记包括:<填充><对齐><宽度><,><.精度><类型>6个字段,由引导符号(:)作为引导标记,这些字段都是可选的,可以组合使用。它们可以分为两组。

①第一组是<填充><对齐>和<宽度>,它们是相关字段,主要用于对显示格式的规范。

[1]宽度指当前槽的设定输出字符宽度,如果该槽参数实际值比宽度设定值大,则使用参数实际长度;如果槽参数实际值比宽度设定值小,则按照对齐指定方式在宽度内对齐,默认以空格字符补充。

[2]对齐字段分别使用<、>、和^三个符号表示左对齐、右对齐和居中对齐,默认使用左对齐。

[3]填充字段可以修改默认填充字符,填充字符只能有一个。

# 输出字符串模板中采用大括号{}表示一个槽位置,每个槽位置对应format()中的一个变量
s = "2005.08.03"

print("{:20}".format(s)+"字符串结束")    # 左对齐,宽度为20
print("{:2}".format(s)+"字符串结束")     # 左对齐,宽度为2,比变量s的宽度小,以s的宽度为准
print("{:^20}".format(s)+"字符串结束")   # 居中对齐,宽度为20
print("{:>20}".format(s)+"字符串结束")   # 右对齐,宽度为20
print("{:*^20}".format(s)+"字符串结束")  # 居中对齐,宽度为20,填充*
print("{:^20}".format(s)+"字符串结束")   # 居中对齐,宽度为20

[4]格式控制标记可以用变量来表示,即用槽来指定所对应的控制标记及数量(槽中槽)。

# 输出字符串模板中采用大括号{}表示一个槽位置,每个槽位置对应format()中的一个变量
s = "2005.08.03"

print("{0:{1}}".format(s,20)+"字符串结束")      # 左对齐,宽度为20
print("{0:{1}}".format(s,2)+"字符串结束")       # 左对齐,宽度为2,比变量s的宽度小,以s的宽度为准
print("{0:{1}^20}".format(s,"*")+"字符串结束")  # 居中对齐,宽度为20,填充*

②第二组是<,><.精度>和<类型>,主要用于对数值本身的规范。

[1]逗号(,)用于显示数字类型的千位分隔符。

print("{:-^25,}".format(1234567890)+"字符串结束")
print("{:-^25}".format(1234567890)+"字符串结束")

[2]<.精度>由小数点开头,对于浮点数,精度表示小数部分输出的有效位数;对于字符串,精度表示输出的最大长度。此时小数点可以理解为对数值的有效截断,如果小数点保留长度超过原本的输出长度,则以原本的输出长度为准。

print("{:.2f}".format(1234567890)+"字符串结束")          # 左对齐,精度为2
print("{:>25.3f}".format(1234567890)+"字符串结束")       # 右对齐,宽度为25,精度为3
print("{:.2f}".format(123456.7890)+"字符串结束")         # 左对齐,精度为2
print("{:>25.3f}".format(123456.7890)+"字符串结束")      # 右对齐,宽度为25,精度为3
print("{:.2}".format("1234567890")+"字符串结束")         # 左对齐,输出长度为2
print("{:>25.3}".format("1234567890")+"字符串结束")      # 右对齐,宽度为25,输出长度为3
print("{:>25.20}".format("1234567890")+"字符串结束")     # 右对齐,宽度为25,输出长度为20(过长,以字符串长度为准)

[3]<类型>表示输出整数和浮点数类型的格式规则。

b:输出整数的二进制形式。

c:输出整数对应的Unicode字符。

d:输出整数的十进制形式。

o:输出整数的八进制形式。

x:输出整数的小写(主要针对a-f)十六进制形式。

X:输出整数的大写(主要针对A-F)十六进制形式。

e:输出浮点数对应的小写字母e的指数形式。

E:输出浮点数对应的大写字母E的指数形式。

f:输出浮点数的标准浮点形式。

%:输出浮点数的百分比形式。

六、字符串类型的操作

1、字符串操作符

(1)字符串变量之间可以使用“+”拼接生成新的字符串。

(2)字符串变量可以和整数使用“*”重复拼接相同的字符串,计算结果就是字符串重复指定次数的结果。(值得注意的是,数字型变量和字符串之间不能进行除“*”外的其它计算)

(3)操作符in可以判断一个字符串是否是另一个字符串的子串。

2、字符串处理函数

函数

描述

len(x)

返回字符串x的长度,也可返回其它组合数据类型的元素个数(因为是以Unicode字符为计数基础,所以中英文字符及标点字符等都是一个长度单位)

str(x)

返回任意类型x所对应的字符串形式

chr(x)

返回Unicode编码x对应的单字符

ord(x)

返回单字符x表示的Unicode编码

hex(x)

返回整数x对应十六进制数的小写形式字符串

oct(x)

返回整数x对应十六进制数的大写形式字符串

3、字符串处理方法

方法

描述

str.lower()

返回字符串str的副本,全部字符小写

str.upper()

返回字符串str的副本,全部字符大写

str.split(sep=None)

返回一个字符串列表,由str根据sep被分隔的部分构成,省略spe则默认以空格分隔(比如分隔一个英文句子为多个英文单词)

str.count(sub)

返回sub子串在str中出现的次数

str.replace(old,new)

返回字符串str的副本,其中所有old子串被替换为new(old和new的长度可以不同,甚至new的长度可以为0)

str.center(width,fillchar)

字符串居中函数,fillchar(填充在居中字符串两侧的字符)参数可选,width为整体宽度(width小于str长度时,以str长度为准)

str.strip(chars)

从字符串str中去掉在其左侧和右侧chars中列出的字符(默认为空白字符)

str.join(iter)

在iter变量(例如列表变量或字符串变量)的每一个元素(最后一个元素除外)后增加一个str字符串,返回结果

4、字符串比较运算

注:“方法”是程序设计中的一个专有名词,属于面向对象程序设计领域。在Python解释器内部,所有数据类型都采用面向对象方式实现,因此大部分数据类型都有一些处理方法。实际上方法也是函数,只是调用方式和一般的函数不同,一般的函数采用fun(x)的方式调用,而方法则采用<a>.func(x)的方式调用,方法仅作用于前导对象<a>。

(1)与数值比较运算一样,字符串也可以进行比较运算,同样有六种操作。

(2)两个字符串比较采用从左向右依次比较字符的方式,根据对应Unicode编码值大小决定字符串大小关系,如果第一个字符的Unicode编码值不同,则没必要再继续比较就可得出大小关系;如果第一个字符的Unicode编码值相同,则继续向后比较,如果每个对应的字符的Unicode编码值全都相同,则两个字符串相等。

七、类型判断和类型间转换

1、类型判断

(1)type函数可以将变量类型输出,如下图所示。

(2)float表示浮点数类型,int表示整数类型,str表示字符串类型,bool表示布尔类型。

(3)type函数的输出不是字符串,而是一种内部类型表示,所以不能采用字符串比较方式进行类型的判断,但是可以使用type函数直接进行比较。

name = "Zhang" + "San"
print(type(name) == type("123"))
print(type(name) == type(123))

2、数值与字符串类型转换

函数

描述

int(x)

将x转换为整数,x可以是浮点数(直接舍弃小数部分,不使用四舍五入)或字符串

float(x)

将x转换为浮点数,x可以是整数或字符串

str(x)

将x转换为字符串,x可以是整数或浮点数

(1)例1:

# 1. 输入单位重量的价格
price_str = input("请输入单位重量的价格:")

# 2. 输入购买重量
weight_str = input("请输入购买重量:")

# 3. 计算金额
# 1> 将单价转换成小数
price = float(price_str)

# 2> 将重量转换成小数
weight = float(weight_str)

# 3> 计算付款金额
money = price * weight

print(money)

(2)例2:

# 1.将单价转换成小数
price = float(input("请输入单位重量的价格:"))

# 2.将重量转换成小数
weight = float(input("请输入购买重量:"))

# 3.计算付款金额
money = price * weight

print(money)

猜你喜欢

转载自blog.csdn.net/Zevalin/article/details/135409460