




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python语言编程基础
全套课件授课教师:第1章Python概述课程描述Python诞生于20世纪90年代初,是一种解释型、面向对象、动态数据类型的高级程序设计语言,是最受欢迎的程序设计语言之一。本章介绍Python语言的基本情况。本章知识点1.1初识Python1.2开始Python编程1.3Python文本编辑器IDLE1.1初识Python1.1.1什么是Python1.1.2Python的特性1.1.1什么是PythonPython于20世纪80年代末由荷兰人GuidovanRossum(吉多·范罗苏姆)设计实现。Python的发展历史
1991年,VanRossum公布了0.9.0版本的Python源代码,此版本已经实现了类、函数以及列表、字典和字符串等基本的数据类型。0.9.0版本还集成了模块系统,VanRossum将模块描述为Python主要的编程单元。1994年,Python1.0发布。1.0新增了函数式工具。Python2.0集成了列表推导式(Listcomprehension)。Python的发展历史Python3.0也称为Python3000或Python3K。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python3.0在设计的时候没有考虑向下兼容。Python3.0的主要设计思想就是通过移除传统的做事方式从而减少特性的重复。很多针对早期Python版本设计的程序都无法在Python3.0上正常运行。为了照顾现有程序,Python2.6作为一个过渡版本,基本使用了Python2.x的语法和库,同时考虑了向Python3.0的迁移,允许使用部分Python3.0的语法与函数。基于早期Python版本而能正常运行于Python2.6并无警告的程序可以通过一个2to3的转换工具无缝迁移到Python3.0。2018年3月的TIOBE排行榜1.1.2Python的特性(1)简单易学(2)Python是开源的、免费的(3)Python是高级语言(4)高可移植性(5)Python是解释型语言(6)Python全面支持面向对象的程序设计思想(7)高可扩展性(8)支持嵌入式编程(9)功能强大的开发库1.2开始Python编程1.2.1下载和安装Python1.2.2执行Python脚本文件1.2.3Python语言的基本语法1.2.1下载和安装Python/downloads/1.2.2执行Python脚本文件使用Python语言编写的Hello程序只有一行代码:print(“HelloWorld”)第一行的“>>>”是Python语言运行环境的提示符第二行是Python语句的执行结果1.2.2执行Python脚本文件C语言编写的的Hello程序:#include<stdio.h>intmain(){printf("HelloWorld\n");return0;}一般来说,同样功能的程序,Python语言实现的代码行数仅相当于C语言的1/5至1/10,简洁程度取决于程序的复杂度和规模。1.2.3Python语言的基本语法1.Python语句2.缩进1.Python语句Python程序由Python语句组成,通常一行编写一个语句。例如:print('Hello,')print('IamPython')Python语句可以没有结束符,不像C或JAVA那样在语句后面必须有分号(;)表示结束。当然,Python程序中也可以根据习惯在语句后面使用分号(;)。也可以把多个语句写在一行,此时就要在语句后面加上分号(;)表示结束。【例1-2】把多个语句写在一行的例子。print('Hello,');print('IamPython');2.缩进缩进指在代码行前面添加空格或Tab,这样做可以使程序更有层次、更有结构感,从而使程序更易读。缩进是Python语言中表明程序框架的唯一手段。在Python程序中,缩进不是任意的。平级的语句行(代码块)的缩进必须相同。在Python中,1个缩进=4个空格【例1-3】print('Hello,');print('IamPython');运行这段程序的结果如下:unexpectedindent1.3Python文本编辑器IDLE1.3.1打开IDLE1.3.2新建Python脚本1.3.3保存Python脚本1.3.4打开Python脚本1.3.5语法高亮1.3.6自动完成1.3.7语法提示1.3.8运行Python程序1.3.9IDLE的菜单项1.3.1打开IDLE可以在开始菜单的所有程序中,选择Python3.6分组下面的IDLE(Python3.664bit)菜单项,打开IDLE窗口。1.3.2新建Python脚本在菜单里依次选择File/NewFile(或按下Ctrl+N)即可新建Python脚本,窗口标题显示脚本名称,初始时为Untitled,也就是还没有保存Python脚本。1.3.3保存Python脚本在菜单里依次选择File/SaveFile(或按下Ctrl+S)即可保存Python脚本。如果是第一次保存,则会弹出保存文件对话框,要求用户输入保存的文件名。1.3.4打开Python脚本在菜单里依次选择File/OpenFile(或按下Ctrl+O)会弹出打开文件对话框,要求用户选择要打开的.py文件名。也可以右击.py文件,在快捷菜单中选择EditwithIDLE,即可直接打开IDLE窗口编辑该脚本。1.3.5语法高亮IDLE支持Python的语法高亮,也就是说能够以彩色标识出Python语言的关键字,告诉开发人员这个词的特殊作用。例如,在IDLE查看例1-1,注释显示为红色,print显示为紫色,字符串显示为绿色。1.3.6自动完成自动完成指用户在输入单词的开头部分后IDLE可以根据语法或上下文自动完成后面的部分。依次选择Edit/ExpandWord菜单项,或者按下Alt+/组合键,即可实现自动完成。例如,输入pr后按下Alt+/组合键即可自动完成print。也可以输入Python保留字(常量名或函数名等)的开头在菜单里依次选择Edit/ShowCompletetions(或按下Ctrl+空格),弹出提示框。不过Ctrl+空格与切换输入法的功能键冲突。例如,输入p然后选择Edit/ShowCompletetions。1.3.7语法提示IDLE还可以显示语法提示帮助程序员完成输入,例如输入“print(”,IDLE会弹出一个语法提示框,显示print()函数的语法。1.3.8运行Python程序在菜单里依次选择Run/RunModule(或按下F5)可以在IDLE中运行当前的Python程序。语法错误如果程序中有语法错误,运行时会弹出一个invalidsyntax。然后一个浅红色方块定位在错误处。例如,运行下面的程序:print(,'Hello,');在print()函数中多了一个逗号。1.3.9IDLE的菜单项Python语言编程基础授课教师:第2章Python语言基础课程描述本章将介绍Python语言的基本语法和编码规范,并重点讲解Python语言的数据类型、运算符、常量、变量、表达式和常用语句等基础知识,为使用Python开发应用程序奠定基础。本章知识点2.1常量和变量2.2运算符和表达式2.3常用语句2.4组合数据类型2.1常量和变量2.1.1常量2.1.2变量2.1.3常量与变量的数据类型转换2.1.1常量常量是内存中用于保存固定值的单元,在程序中常量的值不能发生改变。Python并没有命名常量,也就是说不能像C语言那样给常量起一个名字。Python常量包括数字、字符串、布尔值和空值等。例如,数字7和‘abc’都是常量。1.数字Python包括整数、长整数、浮点数和复数4种类型的数字。(1)整数表示不包含小数点的实数,在32位计算机上,取值范围是-231到231-1,即-2147483648~2147483647。在64位计算机上,取值范围是-263到263-1,即-9223372036854775808~9223372036854775807。例如,1、-1、1009、-209都是整数。(2)长整数顾名思义,就是取值范围很大的整数。Python的长整数的取值范围仅与计算机支持的虚拟内存大小有关,也就是说,Python能表示非常大的整数。在Python中,超出整数范围的数就是长整数。(3)浮点数包含小数点的浮点型数字。(4)复数可以用a+bi表示的数字。a和b是实数,i是虚数单位。虚数单位是二次方程式x2+1=0的一个解,所以虚数单位同样可以表示为。在复数a+bi中,a称为复数的实部,b称为复数的虚部。一个复数可以表示为一对数字(a,b)。使用矢量图描述复数如图2-1所示。Re是实轴,Im是虚轴。使用矢量图描述复数2.字符串字符串是一个由字符组成的序列。字符串常量使用单引号(')或双引号(")括起来。例如:'我是一个字符串'"我是另一个字符串"(1)转义符号转义字符具体描述\n换行\r回车\’
‘
\""\\\\(在行尾时)续行符\a响铃\b退格(Backspace)\000空\v纵向制表符\t横向制表符当需要在字符串中使用特殊字符时,Python使用反斜杠(\)作为转义字符。(2)使用三引号('''或者""")可以使用三引号指定多行字符串。例如:'''多行字符串的例子。第一行第二行可以在多行字符串里面使用'单引号'或"双引号"'''补充:代码注释注释用于为程序添加说明性的文字。Python在运行程序时,会忽略被注释的内容。Python注释有单行注释和多行注释。单行注释用“#”表示注释开始,“#”之后的内容不会被执行。单行注释可以单独占一行,也可放在语句末尾。多行注释是用三个英文的单引号“'''”或双引号“"""”作为注释的开始和结束符号。补充:代码注释(2)使用三引号('''或者""")也可以在行尾使用转义字符(\)实现多行字符串。例如:'多行字符串的例子。\第一行。\第二行。'上面的例子相当于:'多行字符串的例子。第一行。第二行。'补充:代码续行通常,Python中的一条语句占一行,没有类似于C和Java中的分号等语句结束符号。在遇到较长的语句时,可使用语句续行符号,将一条语句写在多行之中。Python有两种续行方式。一种是使用“\”符号。应注意在“\”符号之后不能有任何其他符号,包括空格和注释。补充:代码续行另一种特殊情况下的续行方式是在使用括号(包括圆括号()、方括号[]和大括号{}等)时,括号中的内容可分多行书写,括号中的空白和换行符都会被忽略。(3)Unicode字符串前面介绍的字符串都是处理ASCII码字符的,ASCII是基于拉丁字母的一套电脑编码系统。它使用一个字节存储一个字符,主要用于显示现代英语和其他西欧语言。但是ASCII码不能表示世界上所有的语言。例如,中文、日文、韩文等都无法使用ASCII码表示。Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案,为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。如果要在程序中处理中文字符串,则需要使用Unicode字符串。(3)Unicode字符串Python表示Unicode字符串的方法很简单,只要在字符串前面加上u或U前缀即可,例如:u"我是Unicode字符串。"3.布尔值布尔值通常用来判断条件是否成立。Python包含两个布尔值,包含True(逻辑真)和False(逻辑假)。布尔值区分大小写,也就是说true和TRUE不能等同于True。4.空值Python有一个特殊的空值常量None。与0和空字符串(“”)不同,None表示什么都没有。None与任何其他的数据类型比较永远都返回False。2.1.2变量变量是内存中命名的存储位置,与常量不同的是变量的值可以动态变化。标识符是指Python语言中允许作为变量名或其他对象名称的有效符号。2.1.2变量Python的标识符命名规则如下:标识符名字的第1个字符必须是字母或下划线(_)。标识符名字的第1个字符后面可以由字母、下划线(_)或数字(0~9)组成。Python对大小写敏感,关键字和各种自定义标识符(如变量名、函数名等)在使用时区分大写和小写。2.1.2变量下面的代码说明了abc和Abc是两个不同的变量:Python变量的数据类型Python中数据类型与C语言不同,C语言中数据类型是需要在程序编译开始时声明变量类型,像C语言这样在编译期间就确定数据类型,要求在使用任一变量之前声明其数据类型的语言叫做静态类型语言,Java也如此。而Python则是一种动态类型语言,这种类型语言确定变量的数据类型是在给变量赋值的时候。因此在Python中使用变量时不用像C语言先声明数据类型,可直接使用。【例2-1】
在下面的代码中,定义了一个字符串变量a、数值变量b和布尔类型变量c。a="这是一个常量"b=2c=TruePython变量与地址的关系在C语言中,编译器会为变量分配一个空间,当变量改变值时,改变的是这块空间中保存的值。在程序运行中,变量的地址就不能再发生改变了。Python不同,它的变量与C语言中的指针相似,当变量赋值时,解释器为数值开辟一块空间,而变量则指向这块空间,当变量改变值时,改变的并不是这块空间中保存的值,而是改变了变量指向的空间,使变量指向另一空间。【例2-2】a="这是一个变量"b=a#此时变量b的值应等于变量a的值print(b)a="这是另一个变量"print(b)#对变量a的操作将不会影响到变量b运行结果如下:这是一个变量这是一个变量变量赋值过程的示意图id()函数可以使用id()函数输出变量的地址,语法如下:id(变量名)【例2-3】用id()函数输出变量地址的示例程序。str1="这是一个变量"print("变量str1的值是:"+str1)#“+”为连接字符串print("变量str1的地址是:%d"%(id(str1)))#“%”标记转换说明符的开始str2=str1print("变量str2的值是:"+str2)print("变量str2的地址是:%d"%(id(str2)))str1="这是另一个变量"print("变量str1的值是:"+str1)print("变量str1的地址是:%d"%(id(str1)))print("变量str2的值是:"+str2)print("变量str2的地址是:%d"%(id(str2)))2.1.3常量与变量的数据类型转换Python在定义变量时,不需要指定其数据类型,而是根据每次给变量所赋的值决定其数据类型。但也可以使用函数对常量和变量进行类型转换,以便对它们进行相应的操作。1.转换为数字可以将字符串常量或变量转换为数字。(1)使用int()函数将数字或字符串转换为整数(10进制表示),语法如下:int(x[,base])参数x是待转换的数字或字符串;参数base为可选参数,为参数x的进制,默认为10进制。注意:①x可以是数字或字符串,但是base被赋值后x只能是字符串。②x作为字符串时必须是base类型,也就是说x变成数字时必须能用base进制表示。1.转换为数字例题:int(3.14)#3
int(100,2)#出错,base被赋值后函数只接收字符串int('23',16)#35int('Pythontab',8)#出错,Pythontab不是8进制数1.转换为数字(2)使用long()函数将字符串转换为长整数,语法如下:long(x[,base])参数的含义与int()函数相同。1.转换为数字(3)使用float()函数将字符串或数字转换为浮点数,语法如下:float(x)参数x是待转换的字符串或数字。(4)使用eval()函数计算字符串中的有效Python表达式,并返回结果,语法如下:eval(str)参数str是待计算的Python表达式字符串。【例2-4】例2-4:a="1"b=int(a)+1print(b)运行结果为2。【例2-5】例2-5:a="1+2"print(eval(a))运行结果为3。2.转换为字符串可以将数字常量或变量转换为字符串。(1)使用str()函数将数值转换为字符串,语法如下:str(x)参数x是待转换的数值。2.转换为字符串(2)使用repr()函数将对象转换为字符串显示,语法如下:repr(obj)参数obj是待转换的对象。例题:>>>repr('hello')"'hello'"2.转换为字符串(3)使用chr()函数将一个整数转换为对应ASCII的字符,语法如下:chr(整数)(4)使用ord()函数将一个字符转换为对应的ASCII,语法如下:ord(字符)
【例2-6】print(chr(65))print(ord('A'))运行结果为:A652.转换为字符串(5)使用hex()函数将一个整数转换为一个十六进制字符串,语法如下:hex(整数)(6)使用oct()函数将一个整数转换为一个八进制字符串,语法如下:oct(整数)【例2-7】使用hex()函数和oct()函数打印8的十六进制字符串和八进制字符串。print(hex(8))print(oct(8))输出的结果如下:0x80o10十六进制字符串以0x开头,八进制字符串以0o开头。2.2运算符和表达式运算符是程序设计语言的最基本元素,它是构成表达式的基础。2.2.1运算符Python支持算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串运算符、成员运算符和身份运算符等基本运算符。1.算术运算符算术运算符具体描述例
子+相加运算1+2的结果是3-相减运算100-1的结果是99*乘法运算2*2的结果是4/除法运算(如不能整除,Python3默认的是提供17位数字的精度)4/2的结果是2.0%求模运算10%3的结果是1**幂运算。x**y返回x的y次幂2**3的结果是8//整除运算,即返回商的整数部分9//2的结果4
2.赋值运算符赋值运算符具体描述例
子=直接赋值x=3;将3赋值到变量x中+=加法赋值x+=3;等同于x=x+3;-=减法赋值x-=3;等同于x=x-3;*=乘法赋值x*=3;等同于x=x*3;/=除法赋值x/=3;等同于x=x/3;%=取模赋值x%=3;等同于x=x%3;**=幂赋值x**=3;等同于x=x**3;//=整除赋值x//=3;等同于x=x//3;【例2-8】x=3x+=3print(x)x-=3print(x)x*=3print(x)x/=3print(x)运行结果如下:6393.03.位运算符位运算符具体描述&按位与运算,运算符查看两个表达式的二进制表示法的值,并执行按位“与”操作。只要两个表达式的某位都为1,则结果的该位为1;否则,结果的该位为
0(同真为真)|按位或运算,运算符查看两个表达式的二进制表示法的值,并执行按位“或”操作。只要两个表达式的某位有一个为1,则结果的该位为1;否则,结果的该位为
0(同假为假)^按位异或运算。异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0~按位非运算。0取非运算的结果为1;1取非运算的结果为0<<
位左移运算,即所有位向左移>>
位右移运算,即所有位向右移【例题】x=8a=x>>3print(a)b=x<<3print(b)c=x>>5print(c)运行结果如下:16404.比较运算符比较运算符具体描述==等于运算符(两个=)。例如
a==b,若a等于b,则返回True;否则返回False!=不等运算符。例如
a!=b,若a不等于b,则返回True;否则返回False<>
不等运算符,与!=相同<
小于运算符>
大于运算符<=小于等于运算符>=大于等于运算符5.逻辑运算符逻辑运算符具体描述and逻辑与运算符。例如
aandb,当a和b都为True时等于True;否则等于Falseor逻辑或运算符。例如
aorb,当a和b至少有一个为True时等于True;否则等于Falsenot逻辑非运算符。例如
nota,当a等于True时,表达式等于False;否则等于True【例2-9】x=Truey=Falseprint("xandy=",xandy)print("xory=",xory)print("notx=",notx)print("noty=",noty)运行结果如下:xandy=Falsexory=Truenotx=Falsenoty=True6.字符串运算符、成员运算符具体描述+字符串连接*重复输出字符串[]获取字符串中指定索引位置的字符,索引从0开始[start,end]截取字符串中的一部分,从索引位置start开始到end结束(不包含end)in成员运算符,如果字符串中包含给定的字符则返回Truenotin成员运算符,如果字符串中未包含给定的字符则返回Truer或者R指定原始字符串。原始字符串是指所有的字符串都是直接按照字面的意思来使用,没有转义字符、特殊字符或不能打印的字符。原始字符串字符串的第一个引号前加上字母"r"或"R"【例2-10】b="hello"a=b+"world!"print(a)print(a*2)print(r"hello\nworld!")运行结果如下:helloworld!helloworld!helloworld!hello\nworld!7.运算符优先级运算符具体描述**指数运算的优先级最高~+-逻辑非运算符和正数/负数运算符。注意,这里的+和-不是加减运算符*/%//乘、除、取模和取整除+-加和减>><<位右移运算和位左移运算&按位与运算^|按位异或运算和按位或运算>==!=大于、等于和不等于%=/=//=-=+=*=**=赋值运算符isisnot身份运算符innotin成员运算符notorand逻辑运算符2.3常用语句2.3.1赋值语句2.3.2条件分支语句2.3.3循环语句2.3.4try-except语句2.3.1赋值语句赋值语句是Python语言中最简单、最常用的语句。通过赋值语句可以定义变量并为其赋初始值。例如:a=2b=a+5【例2-11】a=10a+=1print(a)a*=10print(a)a**=2print(a)运行结果如下:11110121002.3.2条件分支语句1.if语句1.单分支结构:if语句if条件表达式:
语句块【例2-12】if语句的例子ifa>10:print("变量a大于10")如果语句块中包含多条语句,则这些语句必须拥有相同的缩进。例如:ifa>10:print("变量a大于10")a=10【例2-13】嵌套if语句的例子ifa>10:
print("变量a大于10") ifa>100: print("变量a大于100")2.二分支结构:if…else语句if条件表达式:
语句块1else:
语句块23.多分支结构:if…elif…else语句if条件表达式1:
语句块1elif条件表达式2:
语句块2elif条件表达式3:
语句块3……else:
语句块n【例2-15】importdatetime#引入模块str="今天是"d=datetime.datetime.now()#获取当前的日期和时间ifd.weekday()==0:str+="星期一"elifd.weekday()==1:str+="星期二"elifd.weekday()==2:str+="星期三"elifd.weekday()==3:str+="星期四"elifd.weekday()==4:str+="星期五"elifd.weekday()==5:str+="星期六"else:str+="星期日"print(str)weekday()方法的返回值返回值具体描述0星期一1星期二2星期三3星期四4星期五5星期六6星期日2.3.3循环语句1.while语句2.for语句3.continue语句4.break语句1.while语句while条件表达式:
循环语句体【例2-16】使用while语句求1+2+…+9+10。i=1sum=0whilei<11:sum+=i
i+=1print(sum)while语句的扩展模式while<条件>:<语句块1>else:<语句块2>当whlie循环正常执行后,程序会继续执行else语句中内容。else语句只在循环正常执行之后才执行。因此,可以在<语句块2>中放置判断循环执行情况的语句。【例题】s,idx="BIT",0whileidx<len(s):print("循环进行中:"+s[idx])idx+=1else:s="循环正常结束"print(s)执行结果:循环进行中:B循环进行中:I循环进行中:T循环正常结束2.for语句foriinrange(start,end):
循环体程序在执行for语句时,循环计数器变量i被设置为start,然后执行循环体语句。i依次被设置为从start开始至end的所有值,每设置一个新值都执行一次循环体语句。当i等于end时,退出循环。【例2-17】使用for语句求1+2+…+9+10。i=1sum=0foriinrange(1,11):print(i)sum+=iprint(sum)for语句的扩展模式for<循环变量>in<遍历结构>:<语句块1>else:<语句块2>当for循环正常执行之后,程序会继续执行else语句中内容。else语句只在循环正常执行之后才执行。因此,可以在<语句块2>中放置判断循环执行情况的语句。【例题】forsin"BIT":print("循环进行中:"+s)else:s="循环正常结束"print(s)执行结果:循环进行中:B循环进行中:I循环进行中:T循环正常结束循环中的else扩展用法总结else中的语句块只在一种条件下执行,即循环正常遍历了所有内容或由于条件不成立而结束循环。3.continue语句在循环体中使用continue语句可以跳过本次循环后面的代码,重新开始下一次循环。【例2-18】计算1~100之间偶数之和。i=1sum=0foriinrange(1,101):ifi%2==1:continuesum+=iprint(sum)4.break语句在循环体中使用break语句可以跳出循环体。【例2-19】将【例2-16】修改为使用break语句跳出循环体。i=1sum=0whileTrue:ifi==11:breaksum+=ii+=1print(sum)2.3.4try-except异常处理语句程序在运行过程中可能会出现异常情况,使用异常处理语句可以捕获到异常情况,并进行处理,从而避免程序异常退出。Python的异常处理语句为try-excepttry-except异常处理语句
12num=eval(input("请输入一个整数:"))print(num**2)
观察下面这段小程序:当用户输入的不是数字呢?
>>>
请输入一个整数:10010000>>>
请输入一个整数:NOTraceback(mostrecentcalllast):File"D:/PythonPL/echoInt.py",line1,in<module>
num=eval(input("请输入一个整数:"))File"<string>",line1,in<module>NameError:name'No'isnotdefinedtry-except异常处理语句Python解释器返回了异常信息,同时程序退出try-except异常处理语句Python重要的内建异常类型:
AttributeError:属性错误,对象引用和赋值失败时会引发属性错误。NameError:试图访问的变量名不存在。SyntaxError:语法错误,代码形式错误。Exception:所有异常的基类,因为所有Python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误。KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误。IndexError:索引错误,使用的索引不存在,常索引超出序列范围。TypeError:类型错误,内建操作或是函数应用了错误类型的对象时会引发类型错误。ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误。ValueError:值错误,传给对象的参数类型不正确,例如给int()函数传入了字符串数据类型的参数。try-except异常处理语句Python异常信息中最重要的部分是异常类型,它表明了发生异常的原因,也是程序处理异常的依据。Python使用try-except语句实现异常处理,基本的语法格式如下:try: <语句块1>except<异常类型>: <语句块2>try-except异常处理语句
12try:num=eval(input("请输入一个整数:"))print(num**2)exceptNameError:print("输入错误,请输入一个整数!")
该程序执行效果如下:>>>
请输入一个整数:NO输入错误,请输入一个整数!辨析:异常和错误编程语言的异常和错误是两个相似但不同的概念。异常和错误都可能引起程序执行错误而退出,它们属于程序没有考虑到的例外情况。然而,绝大多数不可控因素是可以预见的。例如,程序期望获得数字输入却得到了其他字符输入。这种可以预见的例外情况称为“异常”,异常发生后经过妥善处理可以继续执行。另外一些因为程序编码逻辑产生的不可预见的例外情况称为“错误”,错误发生后程序无法恢复执行,而且程序本不该处理这类可能的例外。异常的高级用法try-except语句可以支持多个except语句,语法格式如下:try: <语句块1>except<异常类型1>: <语句块2>…except<异常类型N>: <语句块N+1>except: <语句块N+2>异常的高级用法最后一个except语句没有指定任何类型,表示它对应的语句块可以处理所有其他异常。这个过程与if-elif-else语句类似,是分支结构的一种表达方式。
12345678try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
idx=eval(input("请输入一个整数:"))print(alp[idx])exceptNameError:print("输入错误,请输入一个整数!")except:print("其他错误")
异常的高级用法该程序将用户输入的数字作为索引从字符串alp中返回一个字符,当用户输入非整数字符时,exceptNameError异常被捕获到,提示用户输入类型错误。当用户输入数字不在0到25之间时,异常被except捕获,程序打印其他错误信息,执行过程和结果如下:>>>
请输入一个整数:NO输入错误,请输入一个整数!>>>
请输入一个整数:100其他错误异常的高级用法除了try和except保留字外,异常语句还可以与else和finally保留字配合使用,语法格式如下:try: <语句块1>except<异常类型1>: <语句块2>else: <语句块3>finally: <语句块4>
异常的高级用法此处的else语句与for循环和while循环中的else一样,当try中的语句块1正常执行结束且没有发生异常时,else中的语句块3执行,可以看作是对try语句块正常执行后的一种追加处理。finally语句块则不同,无论try中的语句块1是否发生异常,语句块4都会执行,可以将程序执行语句块1的一些收尾工作放在这里。异常的高级用法异常的高级用法采用else和finally修改代码如下:
12345678910try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
idx=eval(input("请输入一个整数:"))print(alp[idx])exceptNameError:print("输入错误,请输入一个整数!")else:print("没有发生异常")finally:print("程序执行完毕,不知道是否发生了异常")
执行过程和结果如下:>>>
请输入一个整数:5F没有发生异常程序执行完毕,不知道是否发生了异常>>>
请输入一个整数:NO输入错误,请输入一个整数!程序执行完毕,不知道是否发生了异常异常的高级用法Python能识别多种异常类型,但不建议编写程序时过度依赖try-except这种异常处理机制。try-except异常一般只用来检测极少发生的情况。异常的高级用法对于面向商业应用的软件产品,稳定性和可靠性是最重要的衡量指标之一。即使这类软件产品不会滥用try-except类型语句。因为采用try-except语句会影响代码的可读性,增加代码维护难度,因此,一般只在关键地方采用try-except类型语句处理可能发生的异常。2.4序列数据结构序列是Python用于存储一组项目的数据结构,包括列表、元组、字典和集合。2.4序列数据结构2.4.1列表的应用与实例2.4.2元组的应用与实例2.4.3字典的应用与实例2.4.4集合的应用与实例2.4.1列表的应用与实例列表(List)是一组有序存储的数据。例如,饭店点餐的菜单就是一种列表。列表具有如下特性:和变量一样,每个列表都有一个唯一标识它的名称。列表中不同元素的类型可以相同,也可以不同。它支持数字,字符串甚至可以包含列表(所谓嵌套)。每个列表元素都有索引和值两个属性,索引是一个从0开始的整数,用于标识元素在列表中的位置;值就是元素对应的值。1.定义列表列表常量用[]表示。以下是一个列表的定义:menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']2.打印列表可以直接使用print(列表名)打印列表。【例2-22】打印列表的内容。menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']print(menulist)运行结果如下:['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']3.获取列表长度列表长度指列表中元素的数量。可以通过len(列表名)获取列表的长度。【例2-23】获取列表长度menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']print(len(menulist))运行结果如下:44.访问列表元素列表名[index]index是元素索引,第一个元素的索引是0,最后一个元素的索引是列表长度-1。Python的两种序号体系:【例2-24】访问列表元素的例子menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']print(menulist[0])print(menulist[3])程序打印列表中索引为0和3的元素,运行结果如下:红烧肉油焖大虾【例】访问列表元素的例子menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']print(menulist[-1])print(menulist[-3])程序打印列表中索引为-1和-3的元素,运行结果如下:油焖大虾熘肝尖5.添加列表元素可以通过append(新值)在列表尾部添加元素。【例2-25】通过append()函数添加列表元素的例子。menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']menulist.append('北京烤鸭')print(menulist)程序调用append()函数在列表menulist的尾部添加元素'北京烤鸭',运行结果如下:['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾','北京烤鸭']5.添加列表元素可以通过insert(插入位置,新值)在列表的指定位置(索引位置)插入一个元素。【例2-26】通过insert()函数添加列表元素的例子。menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']menulist.insert(1,'北京烤鸭')print(menulist)运行结果如下:['红烧肉','北京烤鸭','熘肝尖','西红柿炒鸡蛋','油焖大虾']5.添加列表元素可以通过列表名1.extend(列表名2)将列表2中的每个元素分别添加到列表1中。【例2-27】通过extend()函数添加列表元素的例子。menulist1=['红烧肉','熘肝尖']menulist2=['西红柿炒鸡蛋','油焖大虾']menulist1.extend(menulist2)print(menulist1)运行结果如下:['红烧肉','熘肝尖','西红柿炒鸡蛋','油焖大虾']6.合并2个列表可以使用+将2个列表合并,得到一个新的列表,具体方法如下:列表3=列表1+列表2【例2-28】合并2个列表的例子。menulist1=['红烧肉','熘肝尖','西红柿炒鸡蛋']menulist2=['北京烤鸭','西红柿炒鸡蛋','油焖大虾']menulist3=menulist1+menulist2print(menulist3)运行结果如下:['红烧肉','熘肝尖','西红柿炒鸡蛋','北京烤鸭','西红柿炒鸡蛋','油焖大虾']7.删除列表元素可以通过del列表名[索引]删除指定的列表元素。
【例2-29】使用del语句删除列表元素的例子。menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋']delmenulist[0]print(menulist)运行结果如下:['熘肝尖','西红柿炒鸡蛋']8.定位列表元素可以使用index()函数获取列表中某个元素的索引。其基本语法:列表.index(元素值)函数返回元素值在列表中某个元素的索引,如果不存在,则会提示异常。【例2-30】使用index()函数的例子。menulist=['红烧肉','熘肝尖','西红柿炒鸡蛋']print(menulist.index('红烧肉'))print(menulist.index('西红柿炒鸡蛋'))运行结果如下:029.遍历列表元素遍历列表就是一个一个地访问列表元素,可以使用for语句和range()函数遍历列表索引,然后通过索引依次访问每个列表元素,方法如下:foriinrange(len(list)):
访问list[i]【例2-31】list=['王二','张三','李四','王五']foriinrange(len(list)):print(list[i])程序的运行结果如下:王二张三李四王五9.遍历列表元素也可以使用for语句和enumerate()函数同时遍历列表的元素索引和元素值,方法如下:for索引,元素值inenumerate(list):
访问索引和元素值【例2-32】list=['王二','张三','李四','王五']forindex,valueinenumerate(list):print("第%d个元素值是【%s】"%(index,value))程序的运行结果如下:第0个元素值是【王二】第1个元素值是【张三】第2个元素值是【李四】第3个元素值是【王五】10.列表排序列表排序操作是按列表元素值的升序、降序或反序重新排列列表元素的位置。可以使用sort()函数对列表进行升序排列,其语法:列表名.sort()【例2-33】list=['apple','banana','pear','grape']list.sort()print(list)程序的运行结果如下:['apple','banana','grape','pear']10.列表排序可以使用reverse()函数对列表进行反序排列,其语法:列表名.reverse()调用reverse()函数后,列表元素被反序排列。【例2-34】使用reverse()函数对列表进行反序排列。list=['apple','banana','pear','grape']list.reverse()print(list)程序的运行结果如下:['grape','pear','banana','apple']10.列表排序如果希望对列表元素进行降序排列,则可先使用sort()函数进行升序排列,然后调用reverse()函数对列表进行反序排列。【例2-35】list=['apple','banana','pear','grape']list.sort()list.reverse()print(list)程序的运行结果如下:['pear','grape','banana','apple']11.产生一个数值递增列表使用range()函数可以产生一个数值递增列表,它的基本语法结构:range(start,end)参数说明如下:start:一个整数,指定产生的列表的起始元素值。start为可选参数,默认值为0。end:一个整数,指定产生的列表的结束元素值。range()函数返回一个列表,该列表由从start开始至end结束(不包含end)的整数组成。【例2-36】list1=range(10)list2=range(11,20)#打印list1forindex,valueinenumerate(list1):print("list1的第%d个元素值是【%s】"%(index,value))#打印list2forindex,valueinenumerate(list2):print("list2的第%d个元素值是【%s】"%(index,value))【例2-36】运行结果:list1的第0个元素值是【0】list1的第1个元素值是【1】list1的第2个元素值是【2】list1的第3个元素值是【3】list1的第4个元素值是【4】list1的第5个元素值是【5】list1的第6个元素值是【6】list1的第7个元素值是【7】list1的第8个元素值是【8】list1的第9个元素值是【9】list2的第0个元素值是【11】list2的第1个元素值是【12】list2的第2个元素值是【13】list2的第3个元素值是【14】list2的第4个元素值是【15】list2的第5个元素值是【16】list2的第6个元素值是【17】list2的第7个元素值是【18】list2的第8个元素值是【19】12.定义多维列表可以将多维列表视为列表的嵌套。即多维列表的元素值也是一个列表,只是维度比其父列表小1。二维列表的元素值是一维列表,三维列表的元素值是二维列表,以此类推。【例2-37】一个定义二维列表的例子。list2=[["CPU","内存"],["硬盘","声卡"]]【例2-38】打印二维列表list2=[["CPU","内存"],["硬盘","声卡"]]foriinrange(len(list2)):print(list2[i])运行结果如下:['CPU','内存']['硬盘','声卡']【例2-39】list2=[["CPU","内存"],["硬盘","声卡"]]foriinrange(len(list2)):list1=list2[i]forjinrange(len(list1)):print(list1[j])运行结果如下:CPU内存硬盘声卡获取二维列表元素的值可以使用下面的方法获取二维列表元素的值:列表名[索引1][索引2]【例2-40】list2=[["CPU","内存"],["硬盘","声卡"]]foriinrange(len(list2)):forjinrange(len(list2[i])):print(list2[i][j])运行结果如下:CPU内存硬盘声卡拓展:列表和数组每种编程语言都提供一个或多个表示一组元素的方法,例如,C语言采用数组,Python采用列表。在大多数语言中,数组十分常见,仅有少量语言采用列表而不是数组。列表和数组类似,但并不完全一样,列表和数组有两个显著不同。拓展:列表和数组第一,数组需要预先分配大小,列表则不需要。当创建一个数组时,必须指定数组的大小,即它能容纳元素的个数。如果不知道有多少元素,必须假设一个最大可能的数值,再按照这个最大值分配一个数组,并记录数组中实际存储元素的个数,以保证实际使用的元素数量不超过数组的限制。列表则没有预分配大小的要求和限制,创建列表变量时不需要知道元素个数,可以在使用中动态插入任何数量的元素。拓展:列表和数组第二,数组要求元素类型一致,列表则不需要。数组要求每个元素具有相同的数据类型,如果某个元素是整数,则数组中全部元素都是整数。列表没有上述限制,列表中不同元素的类型可以相同,也可以不同,甚至,列表中的元素也可以是列表类型。列表的这个特点十分灵活,为程序编写提供了很大的设计空间。2.4.2元组的应用与实例元组与列表非常相似,它具有如下特性:一经定义,元组的内容不能改变。元组元素可以存储不同类型的数据,可以是字符串、数字,甚至是元组。元组元素由圆括号括起来,例如:t=(1,2,3,4)1.访问元组元素与列表一样,可以使用索引访问元组元素,方法:元组[索引]【例2-41】访问元组元素的例子。t=(1,2,3,4)print(t[0])print(t[3])程序打印元组中索引为0和3的元素,运行结果如下:142.获取元组长度元组长度指元组中元素的数量。可以通过len(元组名)获取元组的长度。【例2-42】打印元组的长度。t=(1,2,3,4)print(len(t))运行结果为:43.遍历元组元素与列表一样,可以使用for语句和range()函数遍历列表索引,然后通过索引依次访问每个元组元素,方法:foriinrange(len(tuple)):
访问tuple[i]【例2-43】t=('王二','张三','李四','王五')foriinrange(len(t)):print(t[i])程序的运行结果如下:王二张三李四王五3.遍历元组元素也可以使用for语句和enumerate()函数同时遍历元组的元素索引和元素值,方法:for索引,元素值inenumerate(tuple):
访问索引和元素值【例2-44】tuple=('王二','张三','李四','王五’)forindex,valueinenumerate(tuple):print("第%d个元素值是【%s】"%(index,value))程序的运行结果如下:第0个元素值是【王二】第1个元素值是【张三】第2个元素值是【李四】第3个元素值是【王五】4.排序因为元组的内容不能改变,所以元组没有sort()函数。可以将元组转换为列表,然后再对列表排序,最后将排序后的列表赋值给元组。可以使用列表对象=list(元组对象)将元组转换为列表。将列表转换为元组的方法:元组对象=tuple(列表对象)【例2-45】对元组进行排列t=('apple','banana','pear','grape')l=list(t)l.sort()t=tuple(l)print(t)程序的运行结果如下:('apple','banana','grape','pear')4.排序可以使用reverse()函数对元组进行反序排列(先转换为列表)。【例2-46】使用reverse()函数对元组进行反序排列。t=('apple','banana','pear','grape')l=list(t)l.reverse()t=tuple(l)print(t)程序的运行结果如下:('grape','pear','banana','apple')2.4.3字典的应用与实例字典也是在内存中保存一组数据的数据结构,与列表不同的是:每个字典元素都有键(key)和值(value)两个属性,键用于定于和标识字典元素,键可以是一个字符串,也可以是一个整数;值就是字典元素对应的值。因此,字典元素就是一个“键/值对”。1.定义字典字典元素使用{}括起来。例如,下面的语句可以定义一个空字典。d1={}也可以在定义字典时指定里面的元素,每个元素由键和值组成,键和值之间由冒号(:)分割,元素间由逗号(,)分割。例如:d2={'name':'小明','sex':'男','age':'18','score':'80'}2.打印字典可以直接使用print(字典名)打印字典。【例2-47】打印字典的内容。d={'name':'小明','sex':'男','age':'18','score':'80'}print(d)运行结果如下:{'name':'小明','sex':'男','age':'18','score':'80'}3.获取字典长度字典长度是指字典中元素的数量。可以通过len(字典名)获取字典的长度。【例2-48】打印字典的长度。d={'name':'小明','sex':'男','age':'18','score':'80'}print(len(d))运行结果为:44.访问字典元素字典由字典元素组成。可以通过字典名[key]获取字典元素的值,key是元素的键。【例2-49】d={'name':'小明','sex':'男','age':'18','score':'80'}print(d['name'])print(d['sex'])print(d['age'])print(d['score'])运行结果如下:小明男18805.添加字典元素可以通过赋值在字典中添加元素,具体方法:字典[键]=值如果字典中不存在指定键,则添加;否则修改键值。【例2-50】d={'name':'小明','sex':'男','age':'18'}d['score']='80'print(d)运行结果如下:{'name':'小明','sex':'男','age':'18','score':'80'}【例】d={'name':'小明','sex':'男','age':'18','score':'70'}d['score']='80'print(d)运行结果如下:{'name':'小明','sex':'男','age':'18','score':'80'}6.合并2个字典可以使用update()函数将2个字典合并,具体方法:字典1.update(字典2)【例2-51】合并2个字典的例子。d1={'name':'小明','sex':'男'}d2={'age':'18','score':'80'}d1.update(d2)print(d1)运行结果如下:{'name':'小明','sex':'男','age':'18','score':'80'}7.删除字典元素使用pop()函数可以删除指定的字典元素。具体方法:字典名.pop(键)【例2-52】使用pop()方法删除字典元素的例子。d={'age':'18','name':'小明','score':'80','sex':'男'}d.pop('score')print(d)运行结果如下:{'age':'18','name':'小明','sex':'男'}8.判断字典是否存在元素可以使用in关键字判断字典中是否存在指定键的元素。其基本语法:键in字典如果字典中存在指定键的元素,则表达式返回True;否则返回False。【例2-53】使用in关键字的例子。d={'age':'18','name':'小明','score':'80','sex':'男'}if'name1'ind:print(d['name1'])else:print('不包含键为name1的元素')运行结果如下:不包含键为name1的元素9.遍历字典元素可以使用for..in语句遍历字典的键和值,方法如下:forkeyin字典.keys():#遍历字典的键访问字典[key]forkeyin字典.values():#遍历字典的值访问字典[key]【例2-54】d={'age':'18','name':'小明','score':'80','sex':'男'}forkeyind.keys():#遍历字典的键
print('键'+key+'的值:'+d[key])程序的运行结果如下:键age的值:18键name的值:小明键score的值:80键sex的值:男【例2-55】d={'age':'18','name':'小明','score':'80','sex':'男'}forvalueind.values():#遍历字典的值
print(value)程序的运行结果如下:18小明80男10.清空字典可以使用字典名.clear()清空指定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船舶拆除行业监管考核试卷
- 外贸英语函电Unit1课件
- (四检)厦门市2025届高三毕业班第四次质量检测地理试卷(含答案)
- 塑造五年级行为典范
- 外贸英文函电课件unit14
- 山西省朔州市朔城区四中学2025年初三下学期期末联考生物试题理试题含解析
- 闽北职业技术学院《高压电技术》2023-2024学年第二学期期末试卷
- 内蒙古电子信息职业技术学院《机械工程专业英语》2023-2024学年第一学期期末试卷
- 天津和平区天津市双菱中学2025届3月初三年级综合模拟测试语文试题含解析
- 唐山职业技术学院《大学体育与健康(3)》2023-2024学年第二学期期末试卷
- JT-T-848-2013公路用复合隔离栅立柱
- 食品生物化学 知到智慧树网课答案
- 2024年江苏国信新丰海上风力发电有限公司招聘笔试冲刺题(带答案解析)
- 学术交流英语(学术写作)智慧树知到期末考试答案2024年
- 国家卫生部《综合医院分级管理标准》
- 中医经络养生拍打
- Unit7Summerholidayplans(单元解读)六年级英语下册(译林版三起)
- 医学高级职称-皮肤与性病学(医学高级)笔试(2018-2023年)真题摘选含答案
- 乳腺疾病的健康宣教
- 新生儿重点专科模板课件
- 《四、尊生》课件(安徽省市级优课)
评论
0/150
提交评论