Python 3 基础教程(第3版)(慕课版) 课件 第5章 程序控制结构_第1页
Python 3 基础教程(第3版)(慕课版) 课件 第5章 程序控制结构_第2页
Python 3 基础教程(第3版)(慕课版) 课件 第5章 程序控制结构_第3页
Python 3 基础教程(第3版)(慕课版) 课件 第5章 程序控制结构_第4页
Python 3 基础教程(第3版)(慕课版) 课件 第5章 程序控制结构_第5页
已阅读5页,还剩62页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python3基础教程第3版慕课版单元5程序控制结构任务5-1:计算个人综合所得税【任务目标】【任务实施】演示过程……5.1.1

程序的基本控制结构程序的三种基本结构为:顺序结构、分支结构和循环结构。顺序结构的程序按语句的先后顺序依次执行各条语句。通常,程序默认为顺序结构Python总是从程序的第一条语句开始,按顺序依次执行语句。典型的顺序结构。#输入两个整数,用不同的转换方法a=eval(input('请输入第1个整数:'))b=int(input('请输入第2个整数:'))#将a转换为浮点数输出print('float(%s)='%a,float(a))print('格式化为浮点数:%e,%f'%(a,b))#创建复数输出print('complex(%s,%s)='%(a,b),complex(a,b))分支结构指程序根据条件执行不同的代码块。分支结构又可分为单分支结构、双分支结构和多分支结构,示例代码如下。ifx>0:print('%s是正数'%x) #条件x>0成立时执行该语句else:print('%s小于等于0'%x) #条件x>0不成立时执行该语句循环结构指程序根据条件重复执行同一个代码块示例代码如下。forxinrange(5): #x依次取0、1、2、3、4print(x) #重复执行该语句5次5.1.2分支结构--if语句if语句可实现程序的分支结构包括单分支结构、双分支结构和多分支结构分别可通过单分支if语句、双分支if语句、多分支if语句实现。1.

单分支if语句单分支if语句的基本结构如下。if条件表达式:

语句块当条件表达式计算结果为True时,执行语句块中的代码否则,不执行语句块中的代码。单分支if语句的执行流程如图所示示例代码如下。>>>x=5>>>ifx>0:...print(x,'是正数')...5是正数2.双分支if语句双分支if语句的基本结构如下。if条件表达式:

语句块1else:

语句块2当条件表达式计算结果为True时,执行语句块1中的代码;否则,执行语句块2中的代码。双分支if语句的执行流程如图所示示例代码如下。>>>x=-5>>>ifx>0:...print(x,'是正数')...else:...print(x,'不是正数')...-5不是正数3.多分支if语句多分支if语句的基本结构如下。if条件表达式1:

语句块1elif条件表达式2:

语句块2……elif条件表达式n:

语句块nelse:

语句块n+1else部分可以省略。多分支if语句的执行流程如图所示示例代码如下。>>>x=85>>>ifx<60:...print('不及格')...elifx<70:...print('及格')...elifx<90:...print('中等')...else:...print('优秀')...中等4.if…else三元表达式if…else三元表达式是简化版的if…else语句,其基本格式如下。表达式1if条件表达式else表达式2当条件表达式计算结果为True时,将表达式1的值作为三元表达式的结果;否则,将表达式2的值作为三元表达式的结果。示例代码如下。>>>a=2>>>b=3>>>x=aifa<belseb #a<b结果为True,将a的值2赋值给x>>>x2>>>x=aifa>belseb #a>b结果为False,将b的值3赋值给x>>>x35.列表三元表达式基本格式如下。[表达式1,表达式2][条件表达式]当条件表达式计算结果为False时,将表达式1的值作为三元表达式的值;否则,将表达式2的值作为三元表达式的值示例代码如下。>>>x=5>>>y=10>>>[x,y][x<y] #x<y结果为True,返回y的值10>>>[x,y][x>y] #x>y结果为False,返回x的值55.1.3分支结构语句——match语句match语句与C语言、Java语言中的switch语句类似,用于实现多分支结构,其基本结构如下。match表达式:case模式1:分支1case模式2:分支2……case_:分支nmatch语句将表达式的值依次与case语句中的模式进行匹配,如果匹配成功,则执行对应的分支。如果没有匹配成功,则不执行任何分支。“_”为通配符,可匹配任意值,即必定会匹配成功。1.匹配字面值match语句最简单的形式是将一个目标值与一个或多个字面值进行匹配,示例代码如下。#test5_10.py:判断三原色x=input('请输入一个表示颜色的字符:')matchx:case'r':print(x,'表示红色')case'g':print(x,'表示绿色')case'b':print(x,'表示蓝色')case_:print(x,'是无效字符')可以使用“|”符号在模式中组合多个字面值,示例代码如下。#test5_11.py:根据成绩输出分级评语x=int(input('请输入一个成绩(在[0,100]中的整数):'))matchx//10:#取x除以10的整数case9|10:print(x,'优秀')case7|8:print(x,'中等')case6:print(x,'及格')case_:print(x,'差或无效')2.在模式中使用变量match语句允许使用类似解包的模式,并可绑定变量,示例代码如下。#test5_12.py:判断二元组表示点的位置p=eval('('+input('请输入点坐标(逗号分隔):')+')')#将输入的点坐标转换为元组matchp:case(0,0):print(p,'为坐标原点')case(0,y):#匹配第1个值为0的任意二元组print(p,'为Y轴上的点')case(x,0):#匹配第2个值为0的任意二元组print(p,'为X轴上的点')case(x,y):#匹配任意二元组print(p,'不是坐标轴上的点')case_:#匹配非二元组print(p,'不是二元组')3.使用嵌套模式match语句允许使用嵌套模式,如包含二元组的列表,示例代码如下。#test5_13.py:使用嵌套模式匹配点列表p=[(2,0),(-2,0)]#预设二元组点列表matchp:case[]:print('点列表为空')case[(0,0)]:print('点列表只包含坐标原点')case[(x,y)]:print('点列表包含一个不是坐标原点的:(%s,%s)'%(x,y))case[(x1,0),(x2,0)]:print('点列表包含X轴上的两个点:(%s,0),(%s,0)'%(x1,x2))case_:print('其他列表:',p)4.为模式添加匹配条件可以使用if子句为模式添加匹配条件,示例代码如下。#test5_14.py:为模式添加匹配条件p=(2,0)#预设二元组matchp:case(x,y)ifx==y:print(p,'是直线y=x上的点')case(x,y):print(p,'不是直线y=x上的点')任务5-2:从文件中检索指定唐诗【任务目标】文件中按下面的格式保存了若干首唐诗。《春晓》作者:孟浩然春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。……编写一个程序,输入唐诗名称,从文件中检索唐诗并输出,程序运行结果如下。输入唐诗名称:登鹳雀楼《登鹳雀楼》作者:王之涣白日依山尽,黄河入海流。欲穷千里目,更上一层楼。【任务实施】演示过程……5.2循环结构本节主要内容:for循环while循环循环控制:continue、break5.2.1遍历循环:forfor语句实现遍历循环,其基本格式如下。forvarinobject:

循环体else:

语句块2else部分可以省略。object是一个可迭代对象。for语句执行时,依次将object中的数据赋值给变量var——该操作称为迭代。var每赋值一次,则执行一次循环体。循环执行结束时,如果有else部分,则执行对应的语句块。else部分只在正常结束循环时执行。如果用break跳出循环,则不会执行else部分。在for语句中,用n表示object中数据的位置索引,for语句循环的执行流程如图所示示例代码如下。#用x迭代元组中的对象,其中包含了一个嵌套的子元组>>>forxin(1,2,3,(4,5)): ...print(x)...123(4,5)>>>forxin'book’:#用x迭代字符串中的每个字符...print(x)...book>>>forxin(1,2,3): ...print(x*2)...else: #else部分在循环正常结束时执行...print('loopover')...246loopover2.使用range()函数可以使用range()函数来生成包含连续多个整数的range对象,其基本格式为:range(end)range(start,end[,step])只指定一个参数(end)时,生成整数范围为0~end-1。指定两个参数(start和end)时,生成整数范围为start~end-1。整数之间的差值为step,step默认为1。示例代码如下。>>>forxinrange(3):...print(x)...012>>>forxinrange(-2,2):...print(x)...-2-101>>>forxinrange(-2,2,2):...print(x)...-20可在for循环中用多个变量来迭代序列对象,示例代码如下。>>>for(a,b)in((1,2),(3,4),(5,6)):...print(a,b)...123456#等价于fora,bin((1,2),(3,4),(5,6)):与赋值语句类似,可以用“*”表示给变量赋值一个列表,示例代码如下。>>>for(a,*b)in((1,2,'abc'),(3,4,5)):...print(a,b)...1[2,'abc']3[4,5]4.嵌套的for循环Python允许嵌套使用for循环,即在for循环内部使用for循环。例如,下面的代码输出100以内的素数——除了1和它本身之外不能被其他数整除的数是素数。print(1,2,3,end="") #1、2、3是素数,直接输出,end=""使后续输出不换行forxinrange(4,100):forninrange(2,x):ifx%n==0: #若余数为0,说明x不是素数,结束当前for循环breakelse:print(x,end='') #正常结束for循环,说明x是素数,输出else:print('over')5.2.2无限循环:while1.while语句循环的基本结构while语句基本结构如下。while条件表达式:

循环体else:

语句块2,else部分语句可以省略。while语句循环的执行流程如图所示。如果条件表达式始终为True,则构造无限循环——也称“死循环”。计算1+2+……+100。s=0n=1whilen<=100:s=s+nn=n+1print('1+2+...+100=',s)用while循环来输出100以内的素数。x=1whilex<100:n=2whilen<x-1:ifx%n==0:break #若余数为0,说明x不是素数,结束当前循环

n+=1else:print(x,end='') #正常结束循环,说明x没有被任何数整除,是素数,输出

x+=1else:print('over')2.嵌套使用while循环Python允许在while循环的内部使用while循环。例如,下面的代码输出九九乘法表。a=1whilea<10:b=1whileb<=a:print('%d*%d=%2d'%(a,b,a*b),end='')b+=1print()a+=15.2.3循环控制:break和continue在for循环和while循环中可以使用break和continue语句。break语句用于跳出当前循环,即提前结束循环(包括跳过else)。continue则用于跳过循环体剩余语句,回到循环开头开始下一次循环。用for循环找出100~999范围内的前10个回文数字——3位数中个位和百位相同的数字为回文数字。a=[]n=0forxinrange(100,999):s=str(x)ifs[0]!=s[-1]:continue #如果x不是回文数字,回到循环开头,x取下一个值开始循环

a.append(x) #x是回文数字,将其加入列表

n+=1 #累计获得的回文数字个数

ifn==10:break #找出10个回文数字时,跳出for循环print(a) #break跳出时,跳转到该处执行将上面的代码中的for循环改为while循环,可以实现相同的功能,代码如下。a=[];n=0;x=100whilex<999:s=str(x)ifs[0]!=s[-1]:x=x+1continue #x如果不是回文数字,回到循环开头,x取下一个值开始循环a.append(x) #x是回文数字,将其加入列表n+=1 #累计获得的回文数字个数x=x+1ifn==10:break #找出10个回文数字时,跳出while循环print(a) #break跳出时,跳转到该处执行任务5-3:捕捉处理程序中的异常【任务目标】修改下面的程序,为程序添加异常处理代码,在程序出错时输出异常信息。#test5_26.py:捕捉处理程序中的异常whileTrue:n=eval(input('请输入一个正整数:'))ifn==-1:break#输入-1时结束程序ifn<0:continue#计算n的阶乘s=1forxinrange(2,n+1):#当n不是整数时,会发生TypeError异常s*=xprint('%s!='%n,s)【任务实施】演示过程……5.3异常处理异常指程序在运行过程中发生的错误,异常会导致程序意外终止。异常处理可捕捉程序中发生的异常,执行相应的处理代码,避免程序意外终止。程序中的语法错误不属于异常。异常处理基本结构异常处理的基本结构如下。try:

可能引发异常的代码except异常类型名称:

异常处理代码else:

没有发生异常时执行的代码finally:

不管是否发生异常,都会执行的代码在处理异常时,将可能引发异常的代码放在try语句块中。在except语句中指明捕捉处理的异常类型名称,except语句块中为异常处理代码。程序运行时,如果try语句块中的代码发生了指定异常,则执行except语句块。else语句块中为没有发生异常时执行的代码,else语句块可以省略。finally部分的代码不管是否发生异常都会执行,可以省略finally语句块。示例代码whileTrue:n=eval(input('请输入一个正整数:'))ifn==-1:break #输入为-1时结束程序

ifn<0:continue#计算n的阶乘

s=1forxinrange(2,n+1): #当n不是整数时,会发生TypeError异常

s*=xprint('%s!='%n,s)捕捉异常whileTrue:try:n=eval(input('请输入一个正整数:'))ifn==-1:break #输入为-1时结束程序

ifn<0:continue#计算n的阶乘

s=1forxinrange(2,n+1): #当n不是整数时,会发生TypeError异常

s*=xprint('%s!='%n,s)

exceptTypeError: #异常处理

print('输入数据错误,必须是正整数!')Python内置的常见异常类型AttributeError:访问对象属性出错时引发的异常,例如访问不存在的属性或属性不支持赋值等。EOFError:使用input()函数读文件,遇到文件结束标志EOF时发生的异常。文件对象的read()和readline()方法遇到EOF时返回空字符串,不会引发异常。ImportError:导入模块出错引发的异常。IndexError:使用序列对象的下标超出范围时引发的异常。StopIteration:迭代器没有可执行迭代的迭代元素引发的异常。IndentationError:使用了不正确的缩进引发的异常。TabError:同时使用Tab键和空格导致缩进不一致引发的异常。TypeError:在运算或函数调用时,使用了不兼容的类型引发的异常。ZeroDivisionError:除数为0时引发的异常。5.3.1捕捉异常

1.捕捉多种异常使用多个except语句捕捉可能出现的多种异常如下。>>>x=[1,2]>>>try:...x[0]/0...exceptZeroDivisionError:...print('除0错误')...exceptIndexError:...print('索引下标超出范围')...else:...print('没有错误')...除0错误2.捕捉指定异常可以在except语句中同时指定要捕捉的多种异常,以便使用相同的异常处理代码进行统一处理。在except语句中可以使用as为异常类创建一个实例对象>>>x=[1,2]>>>try:...x[0]/0 #此处引发除0异常...except(ZeroDivisionError,IndexError)asexp: #处理多种异常...print('出错了:')...print('异常类型:',exp.__class__.__name__) #输出异常类名称...print('异常信息:',exp) #输出异常信息...出错了:异常类型:ZeroDivisionError异常信息:divisionbyzero3.捕捉所有异常except语句省略了异常类型,则不管发生何种类型的异常,均会执行except语句块中的异常处理代码>>>try:...2/0 #引发除0异常...except:...print('出错了') ...出错了sys.exc_info()方法sys.exc_info()方法返回一个三元组:(type,value,traceobj)type为异常类的类型,可用__name__属性获得异常类的名称。value为异常类的实例对象,直接将其输出可获得异常描述信息。traceobj是一个堆栈跟踪对象(traceback类的实例对象),使用traceback模块的print_tb()方法可获得堆栈跟踪信息示例代码>>>x=[1,2,3]>>>try:...print(x[3])...except:...importsys...x=sys.exc_info()...print('异常类型:%s'%x[0].__name__)...print('异常描述:%s'%x[1])...print('堆栈跟踪信息:')...importtraceback...traceback.print_tb(x[2])4.异常处理结构的嵌套Python允许在异常处理结构的内部嵌套另一个异常处理结构。在发生异常时,没有被内部捕捉处理的异常可以被外层捕捉。>>>x=[1,2]>>>try:...try:...5/0...exceptZeroDivisionError:...print('内部除0异常')...x[2]/2 #内部没有捕捉的异常...exceptIndexError:...print('外层下标越界异常')5.使用finally语句在异常处理结构中,可以使用finally语句定义终止行为。不管try语句块中是否发生异常,finally语句块中的代码都会执。try:print(5/0) #发生除0异常except:print('出错了!’) #发生异常后执行该语句finally:print('finally部分已执行!’) #不管是否发生异常,都会执行该语句print('over') #异常处理结构的后续代码5.3.2raise语句raise语句基本格式如下。raise异常类名 #创建异常类的实例对象,并引发异常raise异常类实例对象 #引发异常类实例对象对应的异常raise #重新引发刚发生的异常Python执行raise语句时,会引发异常并传递异常类的实例对象。1.用类名引发异常在raise语句中指定异常类名时,会创建该类的实例对象,然后引发异常,示例代码如下。>>>raiseIndexError #引发异常 Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>IndexError2.用异常类实例对象引发异常可以直接使用异常类实例对象来引发异常,示例代码如下。>>>x=IndexError() #创建异常类的实例对象>>>raisex #引发异常Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>3.传递异常不带参数的raise语句可再次引发刚发生过的异常,其作用就是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论