




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python数据分析与机器学习第2章
Python语言基础《Python数据分析与机器学习》2.1
控制台的输入与输出■通常,程序会通过输入输出的功能与用户进行交互。程序可以通过
input()函数获取用户从键盘输入的信息,可以通过print()函数打印输出数据。《Python数据分析与机器学习》2.1.1数据的输入Python中的input()函数可用于接收用户从键盘输入的数据,无论用户输入什么内容,该函数都返回字符串类型。其格式如下:input(prompt=None,
/)其中prompt表示提示信息,默认为空,如果不空,则显示提示信息。然后等待用户输入,输入完毕
后按回车键,将用户输入作为一个字符串返回,
并自动忽略换行符。可以将返回结果赋予变量。说明:函数形式参数列表中的斜线表示该函数中斜线之前的参数只能以位置参数形式来传递实际参数,而不能以关键参数形式来传递实际参数。位置参数和关键参数相关知识请参考本书函数部分。>>>x=input("请输入x值:")请输入x值:100>>>x"100">>>
type(x)<class
"str">当用户输入100,按回车键之后,input()函数将字符串"100"赋予变量x,结果就是字符串"100"。内置函数type()返回对象的类型。>>>x=input("请输入x值:")请输入x值:like>>>
x"like">>>
type(x)<class
"str">当用户输入like,按回车键之后,input()函数
将字符串"like"赋予变量x,结果就是字符串"like"。即不管输入什么内容,input()函数的返回结果都是字符串。《Python数据分析与机器学习》#截取整数部分#截取整数部分#将10进制的字符串"4"转换为整数#无穷大,inf不区分大小写>>>
int(23.54)23>>>
int(-3.52)-3>>>
int("4")4>>>
float("5")5.0>>>
float("5.67")5.67>>>
float("inf")Inf>>>
eval("3+5")8>>>
eval("[1,2,3]")[1,
2,
3]>>>x=int(input("请输入x值:"))请输入x值:100>>>
x100>>>
type(x)<class
"int">>>>x=eval(input("请输入x值:"))请输入x值:100.36>>>x
#获得浮点数100.36>>>x=eval(input("请输入x值:"))请输入x值:100>>>x
#获得整数100>>>x=eval(input("请输入x值:"))请输入x值:100+200>>>x
#获得表达式的值300可以使用int()、float()将数值字符串转换为数值类型。也可以利用eval()实现字符串内的表达式计算或执行字符串内的命令。int和float都是类,调用int()和float()实际上是根据int和float类来创建int和float类型的对象。关于类与对象的概念及用法在后面有单独的一章来介绍。对初学者来说,可以将int()和float()暂时先理解为函数的调用。表达式中,其他一些类名后面加括号也是创建类的对象,在学习类与对象这一章之前,可以先理解为函数的调用,返回该类型的对象。《Python数据分析与机器学习》2.1.2数据的输出
Python中最简单的输出方式就是使用print()函数。其格式如下:print(value,
...,
sep="
",
end="\n",
file=sys.stdout,
flush=False)其中各参数的解释如下:value:表示需要输出的对象,一次可以输出一个或者多个对象(其中...表示任意多个对象),当输出多个对象时,对象之间要用逗号(,)分隔;sep:表示输出时对象之间的间隔符,默认用一个空格分隔;end:表示输出以何字符结尾,默认值是换行符;file:表示输出位置,可将输出定向到文件,file指定的对象要可“写”,默认值是sys.stdout(标准输出);flush:将缓存里面的内容是否强制刷新输出,默认值是False。>>>
print("hello","world","!")hello
world
!一次输出三个对象,中间默认用空格隔开。>>>
print("hello","world","!",sep="*")hello*world*!一次输出三个对象,中间用*隔开。>>>
print("hello","world","!",sep="")helloworld!一次输出三个对象,中间无分隔,因为sep参数值被设置为空字符串了。>>>
print("hello","world","!",end="*")hello
world
!*一次输出三个对象,以*结尾。>>>
with
open("c:\\test\\ok.txt","w")
as
f:print("helloworld!",file=f)将输出helloworld!写入到c盘test文件夹中ok.txt文件。print()函数中参数end默认值为"\n",打印结束后换行。如果要实现不换行,只需修改参数end的值,使其在输出内容结束后,打印end参数指定的值。《Python数据分析与机器学习》2.2
标识符、变量与赋值语句标识符■标识符是指用来标识某个实体的一个符号。在编程语言中,标识符是用户编程时使用的名字。变量、常量、函数等对象的名字就是标识符。合法的标识符在Python中,标识符只能由字母、数字0-9以及下画线组成,并且要符合以下规则:标识符开头必须是字母或下画线,不能以数字开头;标识符是区分大小写的;标识符不能使用关键字;最好不要使用内置模块名、类型名、函数名、已经导入的模块名及其成员名作为标识符,否则将改变原标识符所指的含义。《Python数据分析与机器学习》#pow为内置函数名>>>
pow(2,3)8>>>
pow=9#重新定义了pow的含义>>>
pow9>>>
pow(2,3)#pow的含义已经被改变Traceback
(most
recent
call
last):File
"<pyshell#36>",
line
1,
in
<module>pow(2,3)TypeError:
"int"
object
is
not
callable以上代码显示由于使用了内置函数名pow做为变量名(标识符)导致pow()函数原有功能不能使用。可以通过dir(
builtins
)查看所有内置的函数、变量和类等对象。《Python数据分析与机器学习》2.关键字在Python中,有一部分标识符构成编程语言的关键字。这样的标识符是保留字,不能用于其他用途,否则会引起语法错误。Python关键字如表2.1所示。我们也可以导入keyword模块后使用print(keyword.kwlist)查看所有Python关键字。在Python中,以下划线开头的标识符有特殊的含义,在自定义普通标识符时尽量避免使用下划线开头。《Python数据分析与机器学习》2.2.2变量■变量是计算机语言中能储存计算结果或能表示值的抽象概念,表示某个对象值的名字。不同变量是通过名字相互区分的,因此变量名具有标识作用,也是标识符。可以通过变量名访问变量所指的对象。■例如语句iAge=10中iAge就是一个变量,它当前的值为整数10。语句
x=iAge+5中,x和iAge均为变量,通过iAge访问其所指的当前整数对象
10,变量x指向运算结果整数对象15。例如:下面是几种赋值语句的不同用法。>>>
myVar
=
"Hello
World!">>>
print(myVar)Hello
World!>>>
myVar
=
3.1416>>>
print(myVar)3.1416需要说明的是,Python中变量的类型是可以随时变化的。与许多编程语言不同,Python语言允许同时对多个变量赋值。>>>
x,y=1,2>>>
x1>>>
y2>>>
a=b=2>>>
a2>>>
b22.2.3赋值语句《Python数据分析与机器学习》赋值是创建变量的一种方法。赋值的目的是将值与对应的名字进行关联。Python中通过赋值语句实现变量的赋值。赋值语句的格式如下:<变量>=<表达式>其中“=”表示赋值,“=”左边是一个变量,“=”右边是一个表达式(由常量、变量和运算符构成)。Python首先对表达式进行求值,然后将结果存储到变量中。如果表达式无法求值,则赋值语句出错。一个变量如果未赋值,则称该变量是“未定义的”。在程序中使用未定义的变量会导致错误。《Python数据分析与机器学习》2.3
常用数据类型■Python语言中常用的内置数据类型主要有数值、布尔、序列、映射、集合和其他类类型。其中序列、映射和集合等由其他元素组合而成,因而被成为组合类型或容器类型。2.3.1数值类型《Python数据分析与机器学习》数值类型包括整数、浮点数和复数三种类型。整数类型int整数就是没有小数部分的数值,分为正整数、0和负整数。Python语言提供了类型int用于表示现实世界中的整数信息。例如下列都是整数:100、0、-100。浮点数类型float浮点数就是包含小数点的数或科学计数法表示的数,Python语言提供了类型float用于表示浮点数。例如下列值都是浮点数:15.0、0.37、-11.2、2.3e2、3.14e-2、5e2。复数类型complexPython中的复数由两部分组成:实部和虚部。复数的形式为:实部+虚部j。例如2+3j、0.5-0.9j都是复数。值得一提的是,Python支持任意大的数字,仅受内存大小的限制。另外,为了提高可读性,在数值中可以使用下画线。>>>
1_23_456_78901234567890>>>
0x_12_ab_8ff19577087>>>
1_23.5_67123.567《Python数据分析与机器学习》2.3.2布尔类型■布尔类型(bool)是用来表示逻辑“是”、“非”的一种类型,它只有两个值:True和False。例如:>>>
3
>
2True>>>
4
+
5
==
5
+
4True>>>
a
=
-8>>>
a
*
2
>
aFalse《Python数据分析与机器学习》2.3.3常用序列类型■序列是指数据元素按照位置顺序排列的组合体。序列类型分为不可变序列和可变序列。常用的序列有列表list、元组tuple、整数序列range、字符串str。其中元组tuple、整数序列range和字符串str是不可变的序列,列表list是可变的序列。列表list列表是一种序列类型。用方括号“[”和“]”将列表中的元素括起来。列表中的元素可以是任何类型的数据,元素之间以逗号进行分隔。如[1,2,3,True]、["one","two","three","four"]和[3,4.5,"abc"]都是列表。元组tuple元组是一种序列。用圆括号“(”和“)”作为边界将元素括起来。元组中的元素可以是任何类型的数据,元素之间以逗号分隔。如(1,2,3,True)、("one","two","three","four")和(3,4.5,"abc")都是元组。《Python数据分析与机器学习》3.整数序列rangerange表示不可变的由整数构成的序列类型,常用于for循环中指定循环次数。有以
下两种调用格式:range(start,stop[,step])和range(stop),返回一个从start开始括start),到stop结束(不包括stop),两个整数元素之间间隔为step的range对象。参数说明:start:整数序列元素的开始值为start,默认是从0开始。例如range(6)等价于range(0,6)end:整数序列元素到end结束,但不包括end。例如:range(0,6)产生包含0、1、2、3、4、5的可迭代对象,但不包含6;step:步长,表示所产生的整数序列对象元素之间的间隔,默认为1。例如:range(0,6)等价于range(0,6,1)。步长也可以是负数,这时开始值一般大于结束值,否则将产生一个元素个数为0的空整数序列对象。《Python数据分析与机器学习》■下面给出几个创建range类型对象的例子。>>>
x=range(10)>>>
print(x)range(0,
10)>>>
type(x)<class
"range">■以range对象为基础,可以生成列表或元组,例如:>>>
y=list(x)>>>
y[0,
1,
2,
3,
4,
5,
6,
7,
8,
9]>>>
z=tuple(x)>>>
z(0,
1,
2,
3,
4,
5,
6,
7,
8,
9)《Python数据分析与机器学习》字符串类型str字符串是一种序列。用英文的单引号、双引号、三引号(三个单引号或三个双引号)作为两侧定界符的字符序列称为字符串,如"Python"、"在Python3中,所有的字符串都是Unicode字符串;对于单个字符的编码,可以通过ord()函数获取该字符的Unicode码,通过chr()函数把编码转换为对应的字符。>>>
ord("a")97#得到对应的字符>>>
chr(97)"a"Hello,World"、"123"、"""abcd8
^"""等。>>>ord("我")25105>>>
chr(25105)"我"《Python数据分析与机器学习》5.序列中的索引序列类型有很多共同适用的操作,将在第2.7节中详细阐述相关操作。为了方便第2.6节中循环语句的阐述,这里先简单介绍序列索引(下标)的概念,第2.7节会再详细阐述。序列中的每个元素具有一个位置编号称为索引或下标。序列中的第1个位置索引为0,第2个元素索引为1,依次类推,最后一个元素的索引值为序列中元素总个数减1。
例如列表[3,4.5,"abc"]中,第1个元素3的索引为0,第2个元素4.5的索引为1,第
3个元素"abc"的索引为2。可以通过索引获取序列中的元素。例如:>>>
x=[3,4.5,
"abc"]>>>
x[0]3>>>
x[1]4.5>>>
x[2]"abc">>>x[3]
#索引越界,引起错误Traceback
(most
recent
call
last):File
"<pyshell#10>",
line
1,
in
<modulex[3]IndexError:
list
index
out
of
range>>>《Python数据分析与机器学习》2.3.4映射类型■字典(dict)是Python中唯一内建的映射类型。字典用花括号“{”和
“}”将元素括起来;每个元素是由冒号分隔的键(key)和值(value)两部分构成,冒号之前是键,冒号之后是值;元素之间用逗号分隔。字典中的键必须是不可变类型的数据。如{"1801":"张三","1802":"徐虎",
"1803":"张林"}。字典是键值对的集合,可通过键查找关联的值数据。字典对象是一个可变对象,可以对其元素进行添加、删除和修改等操作。《Python数据分析与机器学习》2.3.5集合类型■集合(set)表示由不重复元素组成的无序、有限数据集。set对象中的元素是不可变类型的数据。set对象本身是一种可变类型,因此可以对set对象中的元素进行添加、删除等操作。同一集合可以由各种不可变类型的
元素组成,但元素之间没有任何顺序,并且元素都不重复。如{"car","ship","train","bus"}。2.4
运算符与表达式《Python数据分析与机器学习》运算符分类算术运算符在Python中,算术运算符有:+(加)、-(减)、*(乘)、/(真除法)、//(求整商)、%(取模)、**(幂)。关系运算符在Python中,关系运算符有:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。关系运算符根据表达式值的真假返回布尔值。测试运算符在Python中,测试运算符有:in、not
in、is、is
not。测试运算符也是根据表达式值的真假返回布尔值。逻辑运算符在Python中,逻辑运算符有:and(与)、or(或)、not(非)。通过逻辑运算符可以将任意表达式连接在一起。《Python数据分析与机器学习》2.4.2运算规则与表达式表达式一般由运算符和操作数/操作对象组成。比如表达式1+2,"+"称为运算符,1和2被称为操作数。有关的运算符和表达式见表2.2《Python数据分析与机器学习》利用关系运算符比较大小首先要保证操作数之间是可比较的。关系运算符可以连用,等价于几个用and连接起来的表达式。对于字符串的比较,是通过从左到右依次比较相同位置上字符编码的大小,直到找到第一个不同的字符为止,这个位置上不同字符的编码大小就决定了字符串的大小。列表比较大小也是从左到右一个元素一个元素的依次比较。>>>
"a">"A"True>>>
"abcae"<"abcAb"False前三个位置上字符相同,第四个位置上不同字符决定了字符串的大小>>>
"abc"=="abc"True>>>"a"<"我"True>>>
5<6<8True>>>《Python数据分析与机器学习》测试是否为同一个对象或
内存地址是否相同,返回
布尔值True和False。当是同一个对象时,用is的表达式返回True,而用is
not的表达式返回False。当不是同一个对象时,用is的表达式返回False,而用is
not的表达式返回True。■同一性测试运算符is和is
not
>>>x=[1,3,5]>>>
y=[1,3,5]#测试x、y是否为同一个对象#测试x、y指向的内容是否相等>>>
x
is
yFalse>>>
x==yTruex、y相等但并非为同一个对象。等号==测试值是否相同,运算符is测试是否指向同一个对象,如果指向同一个对象,则内存地址应该相同。内置函数id(变量名)返回变量所指对象的内存地址。>>>id(x)#读者得到的内存地址可能不一样47896712《Python数据分析与机器学习》不论not后跟何值,其返回值一定是布尔值True或False。当not后跟False、0、[]、""、{}、None等值时,返回值是True。被判定为False的值除了False以外,还有None、数值类型中的0值、空字符串、空元组、空列表、空字典、空集合等。逻辑操作符and和or是一种短路操作符,具有惰性求值的特点:表达式从左向右解析,一旦结果可以确定就停止。逻辑运算符and、or不一定会返回布尔值True和False。计算表达式exp1
and
exp2时,先计算exp1的值,当exp1的值为True或非空值(非0、非None、值非空的其他数据类型),才计算并输出exp2的值;当exp1的值为False或空值(0、None、值为空的其他数据类型),直接输出exp1的值,不再计算exp2。计算表达式exp1
or
exp2时,先计算exp1的值,当exp1的值为True或非空值(非0、非
None、值非空的其他数据类型),直接输出exp1的值,不再计算exp2;当exp1的值
为False或空值(0、None、值为空的其他数据类型),才计算并输出exp2的值。《Python数据分析与机器学习》2.4.3条件表达式在后面即将讲到的选择结构和循环结构中会根据条件表达式的值来决定下一步的走向。在进行逻辑判断的时候,被判定为False的值除了False以外,还有None、数值类型中的0值、空字符串、空元组、空列表、空字典、空集合等。条件表达式的值只要不是判定为False的值就认为判定为True,这样只要是Python合法的表达式都可以做为条件表达式,包含有函数调用的表达式也可以。那么,如何将成绩score在90~100或50~60(均包含两端的值)之间表示为条件表达式呢?我们可以这样考虑:先将成绩score在90~100之间表示出来,可以用90<=
score<=100表示;再将成绩score在50~60之间表示出来,可以用50<=score<=60表示;最后考虑这两者之间是或者的关系,用or来连接。这样,最后的条件表达式可
以表示为90<=score<=100
or
50<=score<=60。如果某一个score为95,则该表达式变为
90<=95<=100
or
50<=95<=60。根据<=和or运算的规则,我们知道这个表达式的值为
True。如果某一个score为75,则该表达式变为90<=75<=100
or
50<=75<=60。利用<=
和or运算规则,我们知道这个表达式的值为False。《Python数据分析与机器学习》2.4.4
复合赋值运算符变量的值经常被用于表达式中进行计算,计算结束后可能需要重新将结果赋值给该变量。如x=x+1表示赋值号右边取变量x的原来值,然后加1,再重新赋值给变量x。在Python中,这个语句也可以写成x+=1。同样地,x=x+y也可以写成x+=y。运算符+与=共同构成一个复合赋值运算符,也称为增强型赋值运算符。算术运算符+、-、*、/、//、%和**均可与=构成复合赋值运算符。这些运算符和赋值号之间不能有空格。表2.3列出了复合赋值运算符及其实例。以*=运算符为例。>>>
a=3>>>
b=5>>>
a*=b>>>
a15实际上a*=b,就相当于a=a*b,表示将左操作数乘以右操作数再赋值给左操作数。其他复合赋值运算符的功能类似。《Python数据分析与机器学习》2.5
分支结构■Python中的分支结构根据条件表达式的判断结果为真(包括非零、非空)还是为假(包括零、空),选择其中一个分支运行。分支结构又称为选
择结构。Python的分支结构控制语句主要有:单分支语句、双分支语句、多分支语句、嵌套分支语句和分支结构的三元运算。从Python
3.10开始
引入了match-case模式匹配分支结构。《Python数据分析与机器学习》2.5.1单分支if语句单分支if语句由四部分组成:关键字
if、条件表达式、冒号、表达式结果为真(包括非零、非空)时要执行的语句体。其语法形式如下所示:if条件表达式:语句体单分支if语句的执行流程如图2.1所示。单分支if语句先判断条件表达式值的是真还是假。如果判断的结果为真(包括非零、非空),则执行语句体中的操作;如果条件表达式的值为假(包括零、空),则不执行语句体中的操作。语句体既可以包含多条语句,也可以只由一条语句组成。当语句体由多条语句组成时,要有统一的缩进形式,否则可能会出现逻辑错误或导致语法错误。《Python数据分析与机器学习》【例2-1】从键盘输入圆的半径,如果半径大于等于0,则计算并
输出圆的面积和周长。程序代码:#example2_1.py#coding=gbkimport
mathr=eval(input("请输入圆的半径:"))if
r>=0:d=2*math.pi*rs=math.pi*r**2print("圆的周长=",d,"圆的面积=",s)程序测试:运行程序example2_1.py,请首先输入一个大于等于0的半径,如5,观察程序的运行结果。再次运行程序,请输入一个小于0的半径,如-1,观察程序的运行结果。只有在输入的半径为大于等于0的数时,会产生正确的输入和输出。如果输入的半径小于0,则不产生任何输出。程序运行结果:请输入圆的半径:5圆的周长=31.4159265359圆的面积=78.5398163397《Python数据分析与机器学习》2.5.2双分支if/else语句双分支if/else语句的语法形式如下所示:if条件表达式:语句体1else:语句体2双分支if/else语句的执行流程如图2.2所示。if/else语句是一种双分支结构。先判断条件表达式值的真假,如果条件表达式的结果为真(包括非零、非空),则执行语句体1中的操作;如果条件表达式为假(包括零、空),则执行语句体2中的操作。语句体1和语句体2既可以包含多条语句,也可以只由一条语句组成。《Python数据分析与机器学习》【例2-2】从键盘输入年份t,如果年份t能被
400整除,或者能被4整除但不能被100整除,则输出“t年是闰年”,否则输出“t年不是闰年”,t用输入的年份代替。程序代码:
#example2_2.py #coding=gbkt=int(input("请输入年份:"))if
t%400==0
or
(t%4==0
and
t%100!=0):print(t,"年是闰年")else:print(t,"年不是闰年")程序测试:运行程序,请首先输入年份1996,观察程序的运行结果。再次运行程序,请输
入年份2000,观察程序的运行结果。再次运
行程序,请输入年份2003,观察程序的运行
结果。程序第一次运行结果:请输入年份:19961996年是闰年程序第二次运行结果:请输入年份:20002000年是闰年程序第三次运行结果:请输入年份:20032003年不是闰年《Python数据分析与机器学习》2.5.3多分支if/elif/else语句多分支if/elif/else语句的语法形式如下■多分支语句的执行流程如图2.3所示。所示:if条件表达式1:语句体1elif条件表达式2:语句体2……elif条件表达式n-1:语句体n-1else:语句体n《Python数据分析与机器学习》【例2-3】从键盘输入标准价格和订货量。根据订货量大小,给客户以不同的价格折扣,计算应付货款(应付货款=
订货量×价格×(1-折扣))。订货量300以下,没有折扣;订货量300及以上,
500以下,折扣为3%;订货量500及以
上,1000以下,折扣5%;订货量1000
及以上,2000以下,折扣8%;订货量
2000及以上,折扣10%。分析:键盘输入标准价格price、订货量
Quantity,依照上述标准进行判断得到折扣率。假设输入的值均大于0。程序代码:
#example2_3.py#coding=gbkprice=eval(input("请输入标准价格:"))Quantity=eval(input("请输入订货量:"))if
Quantity<300:Coff=0.0elif
Quantity<500:Coff=0.03elif
Quantity<1000:Coff=0.05elif
Quantity
<2000:Coff=0.08else:Coff=0.1Pays=Quantity
*
price
*
(1-Coff)print("支付金额:",Pays)《Python数据分析与机器学习》2.5.4分支结构的嵌套在某一个分支的语句体中,又嵌套新的分支结构,这种情况称为分支结构的嵌套。分支结构的嵌套形式因问题不同而千差万别,因此分析透彻每一个分支的逻辑情况是编写程序的基础。【例2-4】输入客户类型、标准价格和订货量。根据客户类型(<5为新客户,>=5老客户)和订货量给予不同的折扣,计算应付货款(应付货款=订货量×价
格×(1-折扣))。如果是新客户:订货量800以下,没有折扣;否则折扣为2%。如果是老客户:订货量500以下,折扣为3%;订货量500及以上,1000以下,
折扣5%;订货量1000及以上,2000以下,折扣8%;订货量2000及以上,折扣10%。请绘制流程图,并编写程序。分析:输入数据后,应首先对客户类型、价格和订货量的输入值进行简单判断,是否大于0。当这三个值均大于0才开始做应付货款的计算,否则提示输入数据错误。数据输入正确之后的处理流程如图2.4所示。#example2_4.py#coding=gbkCtype=int(input("请输入客户类《型Py(th小on于数5据为分新析客与户机)器:学"习))》Price=eval(input("请输入标准价格:"))
Quantity=eval(input("请输入订货数量:"))if
Ctype>0
and
Price>0
and
Quantity>0:if
Ctype<5:if
Quantity<800:Coff=0else:Coff=0.02else:if
Quantity<500:Coff=0.03elif
Quantity
<
1000:Coff=0.05elif
Quantity
<2000:Coff=0.08else:Coff=0.1Pays=Quantity*Price*(1-Coff)print("应付款为:",Pays)else:print("输入错误。")《Python数据分析与机器学习》2.5.5分支结构的三元运算对于简单的if/else结构,可以使用三元运算表达式来实现。如:x=5if
x>
0:y=1else:y=0可以用三元运算改写为:x=5y
=
1
if
x>0
else
0结果完全一样。if/else的三元运算表达式为:变量=值1
if条件表达式else值2。如果条件表达式为True,变量取“值1”,否则变量取“值2”。在程序设计过程中,如果某个代码段中没有语句,将可能导致语法错误,我们可以先用pass来替代,让程序结构变得完整,后续再做功能语句的补充。《Python数据分析与机器学习》2.5.6
match-case分支结构Python
3.10开始引入了基于模式匹配的match-case分支结构。这里只简单介绍基于字面值的匹配。x=5match
x:case
3:print("x=3")case
5|6:#运算符“|”表示或print("x=5或x=6")case
_:
#默认分支,当上述分支均不匹配时执行该分支print("x不是3、5或6中的任何一个")执行结果为:x=5或x=6也可以没有默认分支,就像if语句没有else分支一样。还可以在case后面使用变量,用该
变量接收match后面的表达式值,并可以用if语句添加判断条件。x=10match
x:case
3:print("x=3")case
5|6:print("x=5或x=6")case
y
if
y>8:
#用if语句添加判断条件print("x大于8")输出结果为:x大于8《Python数据分析与机器学习》2.6
循环结构■Python语言中包含while和for两种循环结构。while循环结构是在给定的判断条件为真(包括非零、非空)时,重复执行某些操作;判断条件为假(包括零、空)时,结束循环。for循环结构是当被遍历的可迭代对象中还有新的值可取时,重复执行某些操作;当被遍历的可迭代对象中没有新的值可取了,结束循环。《Python数据分析与机器学习》2.6.1简单while循环结构简单的while循环语句结构如下:while条件表达式:循环体简单的while循环由关键字while、条件表达式、冒号、循环体构成。简单while结构循环语句的执行流程如图2.5所示。其执行过程:
计算while关键词后面的条件表达式值;如果其值为真(包括非零、非空),则转步骤(2),否则转步骤(3);执行循环体,转步骤(1);循环结束。循环开始之前,如果while关键词后面的条件表达式为假(包括零、空),则不会进入循环体,直接跳过循环部分。如果一开始while关键词后面的条件表达式为真(包括非零、非空),则
执行循环体;每执行完一次循环体,重新计算
while关键词后面的条件表达式值,若为真,则继续执行循环体;循环体执行结束后重新判断
while关键词后面的条件表达式;直到该条件表达式的值为假(包括零、空),则结束循环。
while关键词后面条件表达式中的变量取值决定条件表达式的真假,该变量称为循环控制变量。《Python数据分析与机器学习》■在使用while语句时,要注意以下几点:组成循环体的各语句必须是以相同的格式缩进。循环体既可以由单个语句组成,也可以由多条语句组成。如果语句尚未确定,可以暂时使用pass语句表示空操作,但不能没有任何语句。循环开始之前要为循环控制变量赋初值,使得while后面的条件表达式有初始的真、假值。如果一开始while后面的条件表达式为假(包括零、空),则不会进入循环,否则就进入循环,开始执行循环体。循环体中要有语句改变循环控制变量的值,使得条件表达式因为该变量值的改变而可能出现结果为假(包括零、空),从而能够导致循环终止,否则会造成无限循环。《Python数据分析与机器学习》【例2-5】计算并输出小于等于200的所有正偶数之和。分析:设置变量aInt从1开始计数,每次增长1,直到aInt超过200,循环终止。可以预知循环执行200次。每次判断aInt是否为偶数,若是偶数就累加到和sumInt变量中。#example2_5.py#coding=gbkaInt=1sumInt=0while
aInt
<=
200:if
aInt
%
2
==
0:sumInt=sumInt+aIntaInt
=
aInt
+
1print("1-200的偶数和:",sumInt)该程序中,aInt是循环控制变量,其初始值设为1,每次循环步进为1,其变化直接控制着循环的推进和次数。sumInt的初始值为0,用来累加1-200以内的偶数之和。《Python数据分析与机器学习》2.6.2简单for循环结构for循环结构通过遍历一个序列等可迭代对象中的每个元素来建立循环。简单for循环结构语句的语法形式如下所示:for变量in序列或迭代器等可迭代对象:循环体简单for循环结构语句的执行流程如图2.6所示。循环开始时,for关键词后面的变量从in关键词后面的序列等可迭代对象中取其元素值,如果没有取到值,则不进入循环;如果可迭代对象中有值可取,则取到最前面的值,接着执行循环体。循环体执行完成后,for后面的变量继续取可迭代对象的下一个元素值,如果没有值可取了,则终止循环;否则取到下一个元素值后继续执行循环体;然后重复以上过程,直到可迭代对象中没有新的值可取了,循环终止。《Python数据分析与机器学习》【例2-6】用列表存储若干计算机配件的名称,利用for循环逐一输出配件名称。程序代码:#example2_6.py#coding=gbkprint("设备名称列表:",end="")for
name
in
nameList:print(name,end="
")程序运行结果:>>>RESTART:
D:\test\example2_6.py设备名称列表:CPU内存主板硬盘显卡显示器>>>程序example2_6.py的每次循环过程中,变量name依次访问到nameList列表中的一个
字符串元素,然后执行循环体中的print语句,打印当前name变量值。print()函数输出结束时不换行,而是添加一个空格。nameList=["CPU","内存","主板","硬盘","显卡","显示■器"可]以用for循环直接遍历range整数序列对象。>>>
for
i
in
range(0,10):print(i,end="
")执行结果为:0
1
2
3
4
5
6
7
8
9>>>
for
i
in
range(3,15,2):print(i,end="")执行结果为:3
5
7
9
11
13>>>
for
i
in
range(15,3,-2):print(i,end="
")执行结果为:15
13
11
9
7
5《Python数据分析与机器学习》■range整数序列对象经常被用到for循环结构中,用于遍历序列的索引值。例2-6也可以使用以下方法实现。#example2_6_2.py#coding=gbkprint("设备名称列表:",end="")for
i
in
range(len(nameList)):print(nameList[i],end="
")■语句range(len(nameList))先求
len(nameList)的值为6;然后执行range(6),生成元素为0、1、2、3、4、5的可迭代对象。i
依次取可迭代对象中的值。将nameList=["CPU","内存","主板","硬盘","显卡","显示器"这]个值作为访问列表nameList中元素的索引(即元素在列表中所处的位置)。通过
nameList[i]语句获取索引i对应的列表中的元素。2.6.3
break语句和continue语句《Python数据分析与机器学习》break语句可以在while和for循环中用于提前终止循环。在循环进行过程中,如果执行了break语句,则循环体中该break语句之后的部分不再执行并终止循环。如果break语句在具有两层循环嵌套的内层循环中,则只终止内层循环,进入到外层循环的下一条语句继续执行。在多层嵌套的循环结构中,break语句只能终止其所在层的循环。循环体中break语句是否执行,通常由if语句来判断。图2.7给出了循环体中含break语句的while循环结构执行流程。图2.8给出了循环体中含break语句的for循环结构执行流程。其中循环体1、break语句和循环体2三部分共同构成循环体。《Python数据分析与机器学习》continue语句可以用在while和for循环中。循环体中如果执行了continue语句,本轮循环跳过循环体中
continue语句之后的剩余语句,回到循环开始的地方重新判断是否进入下一轮循环。在嵌套循环中,
continue语句只对其所在层的循环起作用。图2.9给出了循环体中含continue语句的while循环结构执行流程。图2.10给出了循环体中含continue语句的for循环结构执行流程。其中循环体1、continue语句和循环体2三部分共同构成循环体。【例2-7】阅读以下两个程序,理解
break语句和continue语句的区别。程序代码:for
astr
in
strs:if
astr=="Null":break
#遇到单词“Null”,则终止循环
print(astr)print("End")程序代码:#example2_7_2.pystrs=["Mike","Tom","Null","Apple","Betty","Null",#example2_7_1.pystrs=["Mike","Tom","Null","Apple","Betty","Null","Amy"f]or
astr
in
strs:if
astr=="Null":continue#遇到单词“Null”,则跳过该单词print(astr)print("End")break语句与continue语句的主要区别《Python数据分析与机器学习》break语句一旦被执行,循环体中break语句之后的部分不再执行,且终止该break所在层的循环;continue语句的执行不会终止整个当前循环,只是提前结束本轮循环,本轮循环跳过循环体中
continue语句之后的剩余语句,提前回到循环开始的地方,重新判断是否进入下一轮循环。《Python数据分析与机器学习》带else的循环结构■与一般程序设计语言不同,Python中的while和for语句结构后面还可以带有else语句块。当while后面的条件表达式为真(True、非空、非零)时,反复执行循环体。当循环因为while后面的条件表达式为假(False、零、空)而导致不能进入循环或循环终止,else语句块执行一次,然后结束
该循环结构。如果该循环是因为执行了循环体中的break语句而导致循环终止,else语句块不会执行,直接结束该循环结构。当for关键词后面的变量能够从in后面的序列或迭代器等可迭代对象中取到值,则执行循环
体。循环体执行结束后,变量重新从可迭代对象中取值。当for后面的变量从in后面的可迭代对象中取不到新的值,则循环终止,else语句块执
行一次,然后终止循环结构。当循环是因为循环体中执行了break语句而导致终止,则else语句块不执行,直接终止循环结构。这里不对带else语句块的循环结构展开阐述。《Python数据分析与机器学习》2.6.4循环的嵌套■《Python数据分析与机器学习》程序代码如下:
#example2_8.py #coding=gbke=1n=1while
True:#始终循环,直到执行break语句终止循环s=1
#计算新的阶乘之前,初值重新设置为1for
i
in
range(1,n+1):s
=
s*ie
=
e
+
1/sif
1/s<1e-8:
break
#终止循环n
=
n+1print("n=",n)print("e=",e)程序运行结果如下:n=
12e=
2.7182818282861687《Python数据分析与机器学习》2.7
常用组合类型■Python中常见的序列(如列表、元组、字符串)、映射(如字典)以及集合(set)是三类主要的组合数据类型,也称为容器类型。■本节首先介绍序列的基本概念,接着介绍列表、元组、字符串、字典和集合的概念与用法,然后再介绍列表推导式、字典推导式、集合推导式的基本用法。■在Python中,把按照位置顺序形成的数据集称为序列。Python中的列表、元组和字符串都是序列。所有序列类型都可以进行某些特定的操作,包
括:索引、切片(又称分片)、加、乘以及检查某个元素是否为序列中
的成员等。除此之外,Python还有计算序列长度、找出最大元素和最小
元素等内建函数。《Python数据分析与机器学习》2.7.1列表list■列表将若干个以逗号分隔的元素依次放置在一对方括号中。列表中的元素可以是任意类型的数据对象。同一列表中各元素的类型可以各不相同。列表中的元素允许重复。Python中列表是可以修改的,修改方式包括向
列表添加元素、从列表删除元素以及对列表的某个元素进行修改。《Python数据分析与机器学习》列表创建列表的创建,即用一对方括号将以逗号分隔的若干元素(数据、表达式的值、函数、lambda表达式等)括起来。下面是几种创建列表的例子:>>>
list1
=
["a",200,"b",150,
"c",100]#创建空列表>>>
list2
=
[]>>>
list2[]>>>
list3=list()>>>
list3[]在Python中,经常用到列表中的列表,即二维列表。这种情况下,列表中的元素也是列表。>>>list_sample=[["IBM","Apple","Lenovo"],["America","America","China"]]《Python数据分析与机器学习》列表访问列表访问就是通过列表的索引返回相应位置上的元素。列表中的每个元素被关联一个序号,即元素的位置,也称为索引。索引值是从0开始,第二个则是1,以此类推,从左向右逐渐变大;列表索引也可以从后往前,最后一个位置的索引值为-1,从右向左,每个位置的索引值减一,逐渐变小。索引的访问方式适用于包括列表、元组和字符串等在内的所有序列类型对象。序列的访问如图
2.11所示。一维列表的访问>>>
vehicle[0]"train">>>
vehicle[1]"bus">>>
vehicle[4]Traceback
(most
recent
call
last):File
"<pyshell#20>",
line
1,
in<module>vehicle[4]IndexError:
list
index
out
of
range>>>
vehicle[-1]"ship">>>
vehicle[-4]"train"列表vehicle有4个元素,>>>vehicle=["train","bus","car","正sh向ip"访]问列表vehicle的合法索引范围是0~3,逆向访问列表vehicle的合法索引范围是-1~-4。我们可以看出,若一个列表有n个元素,则访问元素的合法索引范围是-n~n-1,当序号x为负时,表示从右边计数,其访问的元素实际为序号为n+x的元素。这个规律对所有序列类型均有效。对序列进行索引操作时,如果索引超出了范围,则会导致出错。《Python数据分析与机器学习》■二维列表的访问■对二维列表中的元素进行访问,需要使用两对方括号来表示,第一个表示选择子列表,第二个在选中的子列表中再选择其元素。>>>
computer=[["IBM","Apple","Lenovo"],["I","A","L"]]>>>
computer[0][-1]"Lenovo">>>
computer[1][2]"L"■多维列表的访问与二维列表的访问类似,这里不做详细阐述。《Python数据分析与机器学习》修改元素■列表中的元素可以通过重新赋值来更改某个元素的值,要注意列表元素的合法索引范围,超过范围则会出错。>>>
vehicle
=
["train",
"bus",
"car",
"ship"]>>>
vehicle[-1]="bike">>>
vehicle["train",
"bus",
"car",
"bike"]《Python数据分析与机器学习》列表切片在列表中,可以使用切片操作来选取指定位置上的元素组成新的列表。简单的切片方式为:原列表名[start:end:step]需要提供开始值start和结束值end作为切片的开始和结束索引边界。开始值start索引位置上的元素是包含在切片内的,结束值end索引位置上的元素则不包括在切片内;当切片的左索引start为0时可缺省,当右索引end为列表长度时也可缺省。切片操作从原列表中每次间隔step的元素组成新的列表。当step为1时,该参数可以省略。>>>
vehicle
=
["train",
"bus",
"car",
"ship"]>>>vehicle[0:3]
#不包含结束位置3上的元素
["train","bus","car"]>>>
vehicle[0:1]["train"]>>>
vehicle[:3]["train",
"bus",
"car"]>>>
vehicle[3:]["ship"]>>>
vehicle[:]选取索引位于[start,end)区间内,从start开始,["train","bus","car","ship"]>>>
vehicle[3:3][]《Python数据分析与机器学习》对列表切片操作时,也可以使用负数作为索引。获取索引为-3和-2位置上的元素组成新列表>>>
vehicle[-3:-1]["bus",
"car"]获取索引从-2至列表末尾位置上的元素组成新列表>>>
vehicle[-2:]["car",
"ship"]>>>
n=list(range(10))>>>
n[0,
1,
2,
3,
4,
5,
6,
7,
8,
9]步长为2,索引值从0开始,每次增长2,但索引值必须小于10。>>>
n[0:10:2][0,
2,
4,
6,
8]当切片开始值与结束值均省略,表示在整个原列表范围内进行切片操作。如果step大于0,切片索引从第0个位置开始;如果step小于0,切片索引从最后一个元素开始。>>>
n[::3][0,
3,
6,
9]步长为负数时,start不能小于end值。>>>
n[7:2:-1][7,
6,
5,
4,
3]11超过范围,实际索引从最后一个元素开始。>>>
n[11::-2][9,
7,
5,
3,
1]这里步长为负数,表示在整个列表内,从后往前取值。>>>
n[::-2][9,
7,
5,
3,
1]>>>
n[::-1][9,
8,
7,
6,
5,
4,
3,
2,
1,
0]另外,利用切片还可以更改元素值。分别更改索引号为2和3的位置上元素值。>>>
n[2:4]=[10,11]>>>
n[0,
1,
10,
11,
4,
5,
6,
7,
8,
9]判断、统计列表中的元素《Python数据分析与机器学习》通过in运算符判断一个元素是否在列表中>>>
vehicle
=
["train",
"bus",
"car",
"subway",
"ship",
"bicycle",
"car"]>>>
"car"
in
vehicleTrue>>>
"bike"
in
vehicleFalse>>>用count()方法统计某个元素在列表中出现的次数。>>>
vehicle
=
["train",
"bus",
"car",
"subway",
"ship",
"bicycle",
"car"]>>>
vehicle.count("car")2>>>
vehicle.count("bike")0确定元素在列表中的位置《Python数据分析与机器学习》index()方法用于从列表中找出与value值匹配的第一个元素索引位置。语法格式如下:index(value[,start=0[,stop]])如果没有指定参数start的值,则从索引为0的位置开始查找,否则从索引为strat的位置开始查找。如果没有指定结束索引位置stop的值,可以查找到列表最后元素,否则在位于[start,stop)内的索引区间查找。如果找不到匹配项,就会引发异常。>>>
vehicle
=
["train",
"bus",
"car",
"subway",
"ship",
"bicycle",
"car"]>>>vehicle.index("car")
#整个列表范围内"car"第1次出现的索引位置是22>>>vehicle.index("car",3)#在从索引为3开始,"car"第1次出现的索引位置是66>>>vehicle.index("car",3,6)
#在从3开始到6(不包含6)的索引范围内没有"car"Traceback
(most
recent
call
last):File
"<pyshell#83>",
line
1,
in
<module>vehicle.index("car",3,6)ValueError:
"car"
is
not
in
list《Python数据分析与机器学习》扩展列表元素■两个列表相加通过列表相加的方法生成新列表。"bicycle"]>>>vehicle1
#vehicle1没有改变["train",
"bus",
"car",
"ship"]>>>
vehicle2["subway",
"bicycle"]■列表与整数相乘用数字n乘以一个列表,会生成一个>>>vehicle1=["train","bus","car","ship"新]列表。在新列表中原来列表的元素将被重复n次。>>>
vehicle2
=
["subway",
"bicycle"]>>>
vehicle1
=
["train",
"bus"]>>>
vehicle1
+
vehicle2>>>
vehicle1*2["train",
"bus",
"car",
"ship",
"subway",["train",
"bus",
"train",
"bus"]#原列表保持不变>>>
vehicle1["train",
"bus"]《Python数据分析与机器学习》append()方法append()方法,追加单个元素到列表的尾部,只接受一个元素,元素可以是任何数据类型,被追加的元素在列表中保持着原结构类型。例如:>>>
vehicle
=
["train",
"bus",
"car",
"ship"]>>>vehicle.append
("plane")#追加一个元素"plane">>>
vehicle["train",
"bus",
"car",
"ship",
"plane"]>>>vehicle.append([8,9])
#追加一个元素[8,9]>>>
vehicle["train",
"bus",
"car",
"ship",
"plane",
[8,
9]]>>>vehicle.append(10,11)
#追加2个元素10和11,出错Traceback
(most
recent
call
last):File
"<pyshell#7>",
line
1,
in
<module>vehicle.append(10,11)TypeError:
append()
takes
exactly
one
argument
(2
given)extend()方法列表的extend()方法在列表的末尾一次性追加另一个容器对象(如列表、元组、字典、集合、
字符串)中的所有元素,扩展原有列表的元素。如果括号中的参数为字典,则将字典中的键(key)添加到调用extend()方法的列表末尾。>>>
vehicle
=
["train",
"bus",
"car",
"ship"]>>>
vehicle.extend(["plane"])>>>
vehicle["train",
"bus",
"car",
"ship",
"plane"]>>>
vehicle.extend([8,9])>>>
vehicle["train",
"bus",
"car",
"ship",
"plane",
8,
9]《Python数据分析与机器学习》insert()方法insert()方法,将一个元素插入到列表中的指定位置。列表的insert方法有两个参数,第一个参数是索引点,即插入的位置,第二个参数是插入的元素。>>>
vehicle
=
["train",
"bus",
"car",
"ship"]>>>
vehicle.insert(3,"plane")>>>
vehicle["train",
"bus",
"car",
"plane",
"ship"]>>>
vehicle.insert(0,"plane")>>>
vehicle["plane",
"train",
"bus",
"car",
"plane",
"ship"]>>>
vehicle.insert(-2,"bike")>>>
vehicle["plane",
"train",
"bus",
"car",
"bike",
"plane",
"ship"]《Python数据分析与机器学习》列表元素和列表的删除del命令使用del命令可以从列表中删除元素,也可以删除整个列表。>>>
vehicle
=
["train",
"bus",
"car",
"ship"]>>>
del
vehicle[3]>>>vehicle#删除了"ship"["train","bus","car"]>>>del
vehicle
#删除列表vehicle>>>vehicle
#列表vehicle不存在了Traceback
(most
recent
call
last):File
"<pyshell#82>",
line
1,
in
<module>vehicleNameError:
name
"vehicle"
is
not
definedremove()方法remove()方法用于移除列表中与某值匹配的第一个元素。如果找不到匹配项,就会引发异常。>>>
vehicle
=
["train",
"bus",
"car",
"ship",
"subway",
"ship",
">>>
vehicle.remove("ship")>>>
vehicle["train",
"bus",
"car",
"subway",
"ship",
"bicycle"]>>>
vehicle.remove
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福州英华职业学院《专项理论与实践II》2023-2024学年第二学期期末试卷
- 2025河北省建筑安全员C证考试(专职安全员)题库附答案
- 苏州市职业大学《涡轮发动机飞机结构与系统》2023-2024学年第二学期期末试卷
- 辽宁科技学院《起重机械结构力学》2023-2024学年第二学期期末试卷
- 南阳师范学院《网络经济》2023-2024学年第二学期期末试卷
- 浙江科技学院《环境数据处理》2023-2024学年第二学期期末试卷
- 沧州幼儿师范高等专科学校《诊断学基础A》2023-2024学年第二学期期末试卷
- 宿州航空职业学院《基地社工服务与田野基地建设》2023-2024学年第二学期期末试卷
- 重庆城市管理职业学院《口腔固定修复学》2023-2024学年第二学期期末试卷
- 江西冶金职业技术学院《内燃机学》2023-2024学年第二学期期末试卷
- 氩气安全技术说明书MSDS
- 汽车运行材料ppt课件(完整版)
- 四年级数学下册教案-练习一-北师大版
- GB∕T 1732-2020 漆膜耐冲击测定法
- 2022《化工装置安全试车工作规范》精选ppt课件
- Q∕GDW 12067-2020 高压电缆及通道防火技术规范
- 汽车系统动力学-轮胎动力学
- 《经济研究方法论》课程教学大纲
- 10T每天生活污水处理设计方案
- 中国民航国内航空汇编航路314系列航线
- 山西特色文化简介(课堂PPT)
评论
0/150
提交评论