(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)
(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。(一般可以认为浮点数类型没有范围限制,运算结果准确)
(1)复数类型表示数学中的复数,Python中,复数可以看做是二元有序实数对(a,b),表示a+bj,其中a是实数部分,b是虚数部分(b=1时也不能省略b)。
(2)复数类型中实部和虚部都是浮点类型,对于复数z,可以用z.real和z.imag分别获得它的实数部分和虚数部分。
(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。
函数 | 描述 |
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没有限定,可以是任意数量 |
(1)对于数字类型,比较运算可以在整数和浮点数之间任意进行。
(2)涉及复数类型的比较运算受限,只能判断是否相等,即只能使用“==”和“!=”,其它判断大小的比较符号都不能使用,否则会报错。
(1)True和False是Python的关键字,表达相对立的“真”“假”二元数值,严格来说,它们也属于数字类型,其中True表示与1相等的值,False表示与0相等的值。
(2)一般True和False仅用于真假逻辑的场景,不与整数进行数值比较。对于更广泛的应用场景,Python将所有非0值数字都等价为True,这个等价将广泛应用于逻辑判断。
(3)True和False与其它数字类型数据进行运算时,True,对应的数字是1,False对应的数字是0。
(1)None是Python的关键字,表达无、没有、空等含义。
(2)None不是False,它不表示0,不表示空字符串,不对应任何数值。
(3)示例:
a = print("2005.08.03")
print(a == None)
# print函数运行后不会返回任何内容,因此变量a的值是空
# 作为程序设计逻辑完整性要求,需要用某个值赋给变量a,这个值就是None
(1)与或非操作可以组合使用,为了让操作关系更加清楚,可以借助小括号进行分组。
(2)当and和or组合使用且没有使用括号分组时,按照从左向右的原则依次计算,直至产生结果。
以下表格的算数优先级由高到最低顺序排列。
(1)字符串是字符的序列表示,根据字符串的内容分为单行字符串和多行字符串。
①单行字符串可以由一对单引号(‘)或双引号(“)作为边界来表示,单引号和双引号的作用相同。当使用单引号时,双引号可以作为字符串的一部分;当使用双引号时,单引号可以作为字符串的一部分。
②多行字符串可以由一对三单引号(’’’)或三双引号(”””)作为边界来表示,两者作用相同。
"""
使用多行字符串,在敲代码时输入回车,输出也会自动换行
另外,三双引号也可以用来做注释
"""
print("""多行'字符串'1
多行"字符串"2""")
# 使用单行字符串,在敲代码时输入回车,输出并不会跟着换行
print("单行'字符串'1"
"单行'字符'串2")
(1)反斜杠字符(\)是一个特殊字符,在Python字符串中表示“转义”,即该字符与后面相邻的一个字符共同组成了新的含义,例如\n表示换行、\\表示反斜杠、\’表示单引号、\”表示双引号、\t表示制表符(Tab)等。
print("这里\n有一个换行")
print("这里\\有一个反斜杠")
# 当字符串中既需要出现单引号又需要出现双引号,则需要使用转义字符
print("既需要'单引号'又需要\"双引号\"")
print("这里\t有一个制表符")
(2)反斜杠字符(\)同时还可以作为续行符,在第一章中有相关介绍,这里不再赘述。
(1)对字符串中某个字符的检索被称为索引,索引的使用方式如下:
<字符串或字符串变量>[序号]
(2)字符串包括两种序号体系:正向递增序号和反向递减序号。
如果字符串长度为L,正向递增需要以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1;反向递增需要以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。
print("玛卡巴卡,唔西迪西"[4])
print("玛卡巴卡,唔西迪西"[1])
print("玛卡巴卡,唔西迪西"[0])
print("玛卡巴卡,唔西迪西"[-1])
print("玛卡巴卡,唔西迪西"[-8])
(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])
(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错误。
(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)字符串变量之间可以使用“+”拼接生成新的字符串。
(2)字符串变量可以和整数使用“*”重复拼接相同的字符串,计算结果就是字符串重复指定次数的结果。(值得注意的是,数字型变量和字符串之间不能进行除“*”外的其它计算)
(3)操作符in可以判断一个字符串是否是另一个字符串的子串。
函数 | 描述 |
len(x) | 返回字符串x的长度,也可返回其它组合数据类型的元素个数(因为是以Unicode字符为计数基础,所以中英文字符及标点字符等都是一个长度单位) |
str(x) | 返回任意类型x所对应的字符串形式 |
chr(x) | 返回Unicode编码x对应的单字符 |
ord(x) | 返回单字符x表示的Unicode编码 |
hex(x) | 返回整数x对应十六进制数的小写形式字符串 |
oct(x) | 返回整数x对应十六进制数的大写形式字符串 |
方法 | 描述 |
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长度为准),返回按width居中并填充fillchar后的新字符串 |
str.strip(chars) | 从字符串str中去掉在其左侧和右侧chars中列出的字符,返回新字符串 |
str.join(iter) | 将iter变量(例如列表变量或字符串变量)的每一个元素后增加一个str字符串,然后返回生成的字符串 |
注:“方法”是程序设计中的一个专有名词,属于面向对象程序设计领域。在Python解释器内部,所有数据类型都采用面向对象方式实现,因此大部分数据类型都有一些处理方法。实际上方法也是函数,只是调用方式和一般的函数不同,一般的函数采用fun(x)的方式调用,而方法则采用<a>.func(x)的方式调用,方法仅作用于前导对象<a>。
(1)与数值比较运算一样,字符串也可以进行比较运算,同样有六种操作。
(2)两个字符串比较采用从左向右依次比较字符的方式,根据对应Unicode编码值大小决定字符串大小关系,如果第一个字符的Unicode编码值不同,则没必要再继续比较就可得出大小关系;如果第一个字符的Unicode编码值相同,则继续向后比较,如果每个对应的字符的Unicode编码值全都相同,则两个字符串相等。
(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)