内容正文:
项目二 数据类型及其运算
Contents
变量定义的方法
常用数据类型
常用运算符
变量定义的方法
PART 01
常量与变量
在编写程序时,表示数据的量可以分为两种:常量和变量。
常量,是指在程序运行过程中值不能发生改变的量,如1、3.5、3+4i、"abc"等。
变量,是指在程序运行过程中值可以发生改变的量。与数学中的变量一样,需要为Python中的每一个变量指定一个名字,如x、y、test等。
定义一个变量
Python变量的类型由其值的类型决定。变量在使用前不需要先定义,为一个变量赋值后,则该变量会自动创建。变量的命名规则如下:
变量名可以包括字母、数字和下划线,但是数字不能作为开头字符。例如,test1是有效变量名,而1test则是无效变量名。
系统关键字不能做变量名使用。例如,and、break等都是系统关键字,不能作为变量名使用。
Python的变量名区分大小写。例如,test和Test是两个不同的变量。
示例01
定义一个变量
【任务描述】
了解变量的定义和使用方法
【关键步骤】
了解变量的定义和使用方法
1 test='Hello World!’
2 Test=123
3 print(test) #输出“Hello World!”
4 print(Test) #输出“123”
5 test=10.5
6 print(test) #输出“10.5”
下面的代码说明了变量的定义和使用方法。
定义一个变量
示例01
代码缩进 4个空格
正文缩进1.27厘米
7
变量1,变量2,…,变量n=值1,值2,…,值n
在一条语句中可以同时定义多个变量,其语法格式如下:
赋值运算符右边的值1、值2、……、值n会分别赋给左边的变量1、变量2、……、变量n。
同时定义多个变量
代码缩进 4个空格
正文缩进1.27厘米
8
同时定义多个变量
【任务描述】
了解多个变量的使用方法
【关键步骤】
了解多个变量的使用方法
示例02
代码缩进 4个空格
正文缩进1.27厘米
9
name,age='张三',18
对于下面的代码:
执行完毕后会定义两个变量:name是一个字符串型变量,其值为"张三";age是一个整型变量,其值为18。
1 x,y=5,10
2 x,y=y,x
对于已定义的变量,也可以在一条语句中修改多个变量的值。例如:
第1行代码的作用是定义了两个整型变量x和y,它们的值分别是5和10。第2行代码的作用是将赋值运算符右边y和x的值取出并分别赋给左边的x和y,执行完毕后,x的值为10,y的值为5,即将x和y的值进行了交换。
同时定义多个变量
示例01
代码缩进 4个空格
正文缩进1.27厘米
10
数据类型
PART 02
数据类型-Number
【任务描述】
了解int(整型)
了解float(浮点型)
了解complex(复数类型)
【关键步骤】
了解int(整型)
了解float(浮点型)
了解complex(复数类型)
示例01
12
整型数字包括正整数、0和负整数,不带小数点,无大小限制。整数可以使用不同的进制来表示:不加任何前缀为十进制整数;加前缀0o为八进制整数;加前缀0x则为十六进制整数。例如,对于下面的代码:
a,b,c=10,0o10,0x10
执行完毕后,a、b、c的值分别是10、8和16。其中,0o10为八进制数,输出时转为十进制数8;0x10为十六进制数,输出时转为十进制数16。
数据类型-Number
示例01
13
浮点型数字使用C语言中的double类型实现,可以用来表示实数,如3.14159、-10.5、3.25e3等。当前环境中浮点数的取值范围和精度可以通过以下代码查看:
import sys #导入sys包
sys.float_info #查看当前环境中浮点型数字的取值范围和精度
执行上面代码后,可以查看到如下格式的信息:
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
其中,min和max是浮点数的最小值和最大值,dig是浮点数所能精确表示的十进制数字的最大位数。
数据类型-Number
示例02
14
复数由实部和虚部组成,每一部分都是一个浮点数,其书写方法如下:
a+bj或a+bJ
其中,a和b是两个数字,j或J是虚部的后缀,即a是实部、b是虚部。
在生成复数时,也可以使用complex函数,其语法格式如下:
complex([real[,imag]]
例如,对于下面的代码:
c1,c2,c3,c4,c5=3+5.5j,3.25e3j,complex(5,-3.5),complex(5),complex()
执行完毕后,c1、c2、c3和c4的值分别是(3+5.5j)、3250j、(5-3.5j)、(5+0j)和0j。
数据类型-Number
示例03
15
Python中的字符串可以写在一对单引号中,也可以写在一对双引号或一对三双引号中。例如:
s1,s2='Hello World!',"你好,世界!"
执行完毕后,s1和s2的值分别是字符串“Hello World!”和“你好,世界!”。
对于不包含任何字符的字符串,如''或"",称为空字符串(或简称为空串)。
String
16
转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\’ 单引号
\” 双引号
换行
\r 回车
\t 制表符
String
17
数据类型-String
【任务描述】
了解string
了解转义符
了解子串
【关键步骤】
了解string
了解转义符
了解子串
示例04
18
1 s1='Hello \
2 World!' #上一行以\作为行尾,说明上一行与当前行是同一条语句
3 s2='It's a book.' #单引号非成对出现,报SyntaxError错误
4 s3='It\'s a book.' #使用\'说明其是字符串中的一个单引号字符
5 s4="It's a book." #使用一对双引号的写法,字符串中可以直接使用单引号,不需要转义
6 s5="你好!
欢迎学习Python语言程序设计!" #通过
换行
数据类型-String
示例04
19
利用下标“[]”可以从字符串中截取一个子串,其语法格式为:
s[beg:end]
其中,s为原始字符串,beg是要截取子串在s中的起始下标,end是要截取子串在s中的结束下标。
省略beg,则表示从s的开始字符进行子串截取,等价于s[0:end];
省略end,则表示截取的子串中包含从beg位置开始到最后一个字符之间的字符(包括最后一个字符);
beg和end都省略则表示子串中包含s中的所有字符。
数据类型-String
示例04
20
Python中字符串中字符的下标有两种索引方式:从前向后索引和从后向前索引。
从前向后索引方式中,第1个字符的下标为0,其他字符的下标是前一字符的下标增1;
从后向前索引方式中,最后一个字符的下标为-1,其他字符的下标是后一字符的下标减1。
欢 迎 学 习 P y t h o n 语 言 程 序 设 计 !
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
字符串
从前向后索引
从后向前索引
数据类型-String
示例04
21
1 s='欢迎学习Python语言程序设计!’
2 print(s[2:4] #输出“学习”
3 print(s[-3:-1]) #输出“设计”
4 print(s[2:-1]) #输出“学习Python语言程序设计”
5 print(s[:10]) #输出“欢迎学习Python”
6 print(s[-5:]) #输出“程序设计!”
7 print(s[:]) #输出“欢迎学习Python语言程序设计”
数据类型-String
示例04
22
1 s='欢迎学习Python语言程序设计!’
2 print(s[2]) #输出“学”
3 print(s[-1]) #输出“!”
如果要截取的子串中只包含1个字符,则也可以采用写法:s[idx]
使用下标“[]”可以访问字符串中的元素,但不能修改。例如,对于“s[2]='复'”这样的代码,执行时会报TypeError错误。
数据类型-String
示例04
23
List(列表)中可以包含多个元素,且元素类型可以不相同。每一元素可以是任一数据类型。所有元素都写在一对方括号“[]”中,每两个元素之间用逗号分隔。对于不包含任何元素的列表,即[],称为空列表。
1 2.5 ‘test’ 3+4j True [3,1.63] 5.3
0 1 2 3 4 5 6
-7 -6 -5 -4 -3 -2 -1
列表
从前向后索引
从后向前索引
List
24
与字符串相同,利用下标“[]”可以从已有列表中取出其中部分元素形成一个 新列表,其语法格式为:
ls[beg:end]
List
25
数据类型-List与Tuple
【任务描述】
了解List与tuple
了解切片
【关键步骤】
了解List与tuple
了解切片
示例05
26
1 ls=[1, 2.5, 'test', 3+4j, True, [3,1.63], 5.3]
2 print(ls[1:4]) #输出“[2.5, 'test', (3+4j)]”
3 print(ls[-3:-1]) #输出“[True, [3, 1.63]]”
4 print(ls[2:-1]) #输出“['test', (3+4j), True, [3, 1.63]]”
5 print(ls[:3]) #输出“[1, 2.5, 'test’]”
6 print(ls[-2:]) #输出“[[3, 1.63], 5.3]”
7 print(ls[:]) #输出“[1, 2.5, 'test', (3+4j), True, [3, 1.63], 5.3]”
数据类型-List与Tuple
示例05
27
1 ls=[1, 2.5, 'test', 3+4j, True, [3,1.63], 5.3]
2 print(ls[2]) #输出“test”
3 print(ls[-3]) #输出“True”
如果只访问列表ls中的某一个元素,则可以使用写法:ls[idx]
通过下标“[]”不仅可以访问列表中的某个元素,还可以对元素进行修改。
例如:ls[2]=15 #将列表ls中第3个元素的值改为15
数据类型-List与Tuple
示例05
28
Tuple(元组)与列表类似,可以包含多个元素,且元素类型可以不相同。与列表的不同之处在于:元组的所有元素都写在一对小括号“()”中,且元组中的元素不能修改。
1 t=(1, 2.5, 'test', 3+4j, True, [3,1.63], 5.3)
2 print(t[1:4]) #输出“[2.5, 'test', (3+4j)]”
3 print(t[-3:-1]) #输出“[True, [3, 1.63]]”
4 print(t[2:-1]) #输出“['test', (3+4j), True, [3, 1.63]]”
5 print(t[:3]) #输出“[1, 2.5, 'test’]”
6 print(t[-2:]) #输出“[[3, 1.63], 5.3]”
7 print(t[:]) #输出“[1, 2.5, 'test', (3+4j), True, [3, 1.63], 5.3]”
8 print(t[2]) #输出“test”
9 print(t[-3]) #输出“True”
数据类型-List与Tuple
示例05
29
与元组和列表类似,Set(集合)中同样可以包含多个不同类型的元素,但集合中的各元素无序、不允许有相同元素且元素必须是可哈希(hashable)的对象。
集合中的所有元素都写在一对大括号“{}”中,各元素之间用逗号分隔。创建集合时,既可以使用{},也可以使用set函数。set函数的语法格式为:set([iterable])
Set与Dictionary
30
Dictionary(字典)是另一种无序的对象集合。
但与集合不同,字典是一种映射类型,每一个元素是一个键(key):值(value)对。
在一个字典对象中,键必须是唯一的,即不同元素的键不能相同;
另外,键必须是可哈希数据,即键不能是列表、元组、集合、字典等类型;
值可以是任意类型。
对于不包含任何元素的字典,即{},称为空字典。
Set与Dictionary
31
数据类型-Set与Dictionary
【任务描述】
了解Set与Dictionary
了解Set与Dictionary的特点
【关键步骤】
了解Set与Dictionary
了解Set与Dictionary的特点
示例06
32
1 a={10, 2.5, 'test', 3+4j, True, 5.3, 2.5}
2 print(a) #输出“{True, 2.5, 5.3, 10, (3+4j), 'test’}”
3 b=set('hello’)
4 print(b) #输出“{'e', 'l', 'o', 'h’}”
5 c=set([10, 2.5, 'test', 3+4j, True, 5.3, 2.5])
6 print(c) #输出“{True, 2.5, 5.3, 10, (3+4j), 'test’}”
7 d=set((10, 2.5, 'test', 3+4j, True, 5.3, 2.5))
8 print(d) #输出“{True, 2.5, 5.3, 10, (3+4j), 'test'}”
数据类型-Set与Dictionary
示例06
33
创建字典时,既可以使用{},也可以使用dict函数。如果要创建一个空字典,可以使用{}或dict():
a={}
b=dict()
如果在创建字典的同时,需要给出字典中的元素,如:
1 a={'one':1, 'two':2, 'three':3}
2 b=dict(one=1, two=2, three=3)
3 c=dict(zip(['one','two','three'], [1,2,3]))
4 d=dict([('one',1), ('two',2), ('three',3)])
5 e=dict({'one':1, 'two':2, 'three':3})
这5条语句创建的5个字典对象的元素完全相同,使用print函数查看结果,都能得到:{'one': 1, 'two': 2, 'three': 3}
数据类型-Set与Dictionary
示例06
34
与列表等序列对象不同,在访问字典中的元素时不能通过下标方式访问,而是通过键访问。例如:
1 info={'name':'张三', 'age':19, 'score':{'python':95,'math':92}}
2 print(info['name']) #输出“张三”
3 print(info['age']) #输出“19”
4 print(info['score']) #输出“{'python': 95, 'math': 92}”
5 print(info['score']['python']) #输出“95”
6 print(info['score']['math']) #输出“92”
执行完毕后,第2至5行代码分别按对应注释中的描述输出结果。由于info['score']访问到的仍然是一个字典,所以后面可以再分别通过info['score']['python']和info['score']['math']访问该字典中的元素。
数据类型-Set与Dictionary
示例06
35
运算符
PART 03
在字符串中可以给出一些占位符用来表示不同类型的数据,而实际的数据值在字符串之外给出。
占位符 描述
%d 有符号整型十进制数
%f或%F 有符号浮点型十进制数
%s 字符串
占位运算符
37
1 s1='%s上次数学成绩%d,本次%d,成绩提高%f' %('小明',85,90,5/85)
2 s2='%5s上次数学成绩%5d,本次%5d,成绩提高%.2f' %('小明',85,90,5/85)
3 s3='%5s上次数学成绩%05d,本次%05d,成绩提高%08.2f' %('小明',85,90,5/85)
1 小明上次数学成绩85,本次90,成绩提高0.058824
2 小明上次数学成绩 85,本次 90,成绩提高0.06
3 小明上次数学成绩00085,本次00090,成绩提高00000.06
通过print函数分别输出s1、s2和s3,可得到下面结果:
占位运算符
38
运算符 使用方法 功能描述
+(加) 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次幂
算术运算符
39
算术运算符
【任务描述】
了解算术运算符的使用
【关键步骤】
了解算术运算符的使用
示例07
1 i1,i2=10,3
2 f1,f2=3.2,1.5
3 c1,c2=3+4.1j,5.2+6.3j
4 print(i1+i2) #输出“13”
5 print(c1-c2) #输出“(-2.2-2.2j)”
6 print(f1*f2) #输出“4.800000000000001”
7 print(i1/i2) #输出“3.3333333333333335”
8 print(i1//i2) #输出“3”
9 print(i1%i2) #输出“1”
10 print(-f1) #输出“-3.2”
11 print(+f2) #输出“1.5”
12 print(i1**i2) #输出“1000”
算术运算符
示例07
41
运算符 使用方法 功能描述
= y=x 将x的值赋给y
+= y+=x 等价于y=y+x
-= y-=x 等价于y=y-x
*= y*=x 等价于y=y*x
/= y/=x 等价于y=y/x
//= y//=x 等价于y=y//x
%= y%=x 等价于y=y%x
**= y**=x 等价于y=y**x
赋值运算符
42
赋值运算符
【任务描述】
了解赋值运算符的使用
【关键步骤】
了解赋值运算符的使用
示例08
1 i1,i2=10,3 #i1和i2的值分别被赋为10和3
2 i1+=i2 #i1的值被改为13
3 print(i1) #输出“13”
4 c1,c2=3+4.1j,5.2+6.3j #c1和c2的值分别被赋为3+4.1j和5.2+6.3j
5 c1-=c2 #c1的值被改为-2.2-2.2j
6 print(c1) #输出“-2.2-2.2j”
7 f1,f2=3.2,1.5 #f1和f2的值分别被赋为3.2和1.5
8 f1*=f2 #f1的值被改为4.8
9 print(f1) #输出“4.8”
10 i1,f1=3,0.5 #i1和f1的值分别被赋为3和0.5
11 i1**=f1 #i1的值被改为1.7320508075688772(即3的0.5次幂)
12 print(i1) #输出“1.7320508075688772”
赋值运算符
示例08
44
运算符 使用方法 功能描述
==(等于) y==x 如果y和x相等,返回True,否则返回False
!=(不等于) y!=x 如果y和x不相等,返回True,否则返回False
>(大于) y>x 如果y大于x,返回True,否则返回False
<(小于) y<x 如果y小于x,返回True,否则返回False
>=(大于等于) y>=x 如果y大于或等于x,返回True,否则返回False
<=(小于等于) y<=x 如果y小于或等于x,返回True,否则返回False
比较运算符
45
比较运算符
【任务描述】
了解赋值运算符的使用
【关键步骤】
了解赋值运算符的使用
示例09
1 i1,i2,i3=25,35,25 #i1、i2和i3分别被赋为25、35和60
2 print(i1==i2) #输出“False”
3 print(i1!=i2) #输出“True”
4 print(i1>i3) #输出“False”
5 print(i1<i2) #输出“True”
6 print(i1>=i3) #输出“True”
7 print(i1<=i2) #输出“True”
比较运算符
示例09
47
运算符 使用方法 功能描述
and(逻辑与) x and y 如果y和x都为True,返回True,否则返回False
or(逻辑或) x or y 如果y和x都为False,返回True,否则返回False
not(逻辑非) not x 如果x为True,返回False,如果x为False,返回True
1 n=80,a=100
2 print(n>=0 and n<=a) #输出“True”,判断n是否大于等于0且小于等于a
3 print(n<0 or n>a) #输出“False”,判断n是否小于0或大于a
4 print(not(n>=0 and n<=a)) #输出“False”
逻辑运算符
48
十进制整数转换为二进制采用“除基取余法”:用2去除十进制整数,得到商和余数;如果商不为0,则继续用2除,再得到商和余数,重复该步骤直至商为0;最后将余数按照从后至前的顺序排列,即得到转换后的十进制数。
位运算符
49
二进制数转十进制数的规则是“按权展开求和”,即将二进制数的每一位写成数码乘以位权的形式,再对乘积求和。例如,对于二进制数11010B,其对应的十进制数为:
11010B=1*2^4+1*2^3+0*2^2+1*2^1+0*2^0
=1*16+1*8+0*4+1*2+0*1
=16+8+0+2+0
=26
位运算符
50
运算符 使用方法 功能描述
&(按位与) y&x 如果y和x对应位都为1,则结果中该位为1,否则为0
|(按位或) y|x 如果y和x对应位都为0,则结果中该位为0,否则为1
^(按位异或) y^x 如果y和x对应位不同,则结果中该位为1,否则为0
<<(左移位) y<<x 将y左移x位(右侧补0)
>>(右移位) y>>x 将y右移x位(左侧补0)
~(按位取反) ~x 如果x的某位为1,则结果中该位为0,否则为1
位运算符
51
位运算符
【任务描述】
了解位运算符的使用
【关键步骤】
了解位运算符的使用
示例10
1 i1,i2=3,6 #i1对应的二进制数是11B,i2对应的二进制数是110B
2 print(i1&i2) #输出“2”。计算方法:011B&110B=010B=2
3 print(i1|i2) #输出“7”。计算方法:011B|110B=111B=7
4 print(i1^i2) #输出“5”。计算方法:011B^110B=101B=5
5 print(i1<<1) #输出“6”。计算方法:11B<<1=110B=6
6 print(i1>>1) #输出“1”。计算方法:11B>>1=1B=1
位运算符
示例10
53
运算符 使用方法 功能描述
is x is y 如果y和x对应同样的存储单元,返回True,否则返回False
is not x is not y 如果y和x不对应同样的存储单元,返回True,否则返回False
身份运算符
54
身份运算符
【任务描述】
了解身份运算符的使用
【关键步骤】
了解身份运算符的使用
示例11
1 x,y=15,15
2 print(x is y) #输出“True”
3 print(x is not y) #输出“False”
4 print(x is 15) #输出“True”
5 x,y=[1,2,3],[1,2,3]
6 print(x is y) #输出“False”
7 print(x==y) #输出“True”
8 print(x is [1,2,3]) #输出“False”
9 x=y
10 print(x is y) #输出“True”
身份运算符
56
运算符 使用方法 功能描述
in x in y 如果x是可迭代对象y的一个元素,返回True,否则返回False
not in x not in y 如果x不是可迭代对象y的一个元素,返回True,否则返回False
成员运算符
57
成员运算符
【任务描述】
了解成员运算符的使用
【关键步骤】
了解成员运算符的使用
示例12
1 x,y=15,['abc',15,True]
2 print(x in y) #输出“True”
3 x=20
4 print(x not in y) #输出“True”
5 y=(20,'Python’)
6 print(x in y) #输出“True”
7 x,y='Py','Python’
8 print(x in y) #输出“True”
9 x,y=20,{15,20,25}
10 print(x in y) #输出“True”
11 x,y='one',{'one':1,'two':2,'three':3}
12 print(x in y) #输出“True”
13 print(1 in y) #输出“False”
成员运算符
示例12
59
运算符 使用方法 功能描述
+(连接) x+y 将序列x和序列y中的元素连接,生成一个新的序列
*(重复) x*n 将序列x中的元素重复n次,生成一个新的序列
序列运算符
60
序列运算符
【任务描述】
了解序列运算符的使用
【关键步骤】
了解序列运算符的使用
示例13
1 x,y=[12,False],['abc',15,True]
2 z=x+y #x和y连接后的结果赋给z
3 print(z) #输出“[12, False, 'abc', 15, True]”
4 s1,s2='我喜欢学习','Python’
5 s=s1+s2 #s1和s2连接后的结果赋给s
6 print(s) #输出“我喜欢学习Python”
7 x_3=x*3 #将序列x的元素重复3次,生成一个新序列并赋给x_3
8 print(x_3) #输出“[12, False, 12, False, 12, False]”
9 s_3=s*3 #将字符串s重复3次,生成一个新字符串并赋给s_3
10 print(s_3) #输出“我喜欢学习Python我喜欢学习Python我喜欢学习Python”
序列运算符
示例13
62
优先级 运算符 描述
1 ** 乘方
2 ~、+、- 按位取反、正号、负号
3 *、/、//、% 乘/序列重复、除、整除、模
4 +、- 加/序列连接、减
5 >>、<< 右移位、左移位
6 & 按位与
7 ^ 按位异或
8 | 按位或
9 >、<、>=、<=、==、!=、is、is not、in、not in 比较运算符、身份运算符、成员运算符
10 =、+=、-=、*=、/=、//=、%=、**= 赋值运算符
11 not 逻辑非
12 and 逻辑与
13 or 逻辑或
运算符优先级
63
感谢观看
$$