【课件】数据结构-浙教版(2019)高中信息技术必修一课件_第1页
【课件】数据结构-浙教版(2019)高中信息技术必修一课件_第2页
【课件】数据结构-浙教版(2019)高中信息技术必修一课件_第3页
【课件】数据结构-浙教版(2019)高中信息技术必修一课件_第4页
【课件】数据结构-浙教版(2019)高中信息技术必修一课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第三章算法的程序实现3.2Python语言程序设计

必修1《数据与计算》3.2.8数据结构

学习目标

集合

表达式顺序结构选择结构循环结构

表达式

数据结构

1、由运算符、操作数(常量及变量)构成。2、按运算符优先级来进行运算。3、赋值运算符不参与计算。

·定义·表达式的值1,每个表达式都有一个值2,表达式中有小数参与计算或有除号计算,则一定是float型(小数)表达式表达式的值-4+842*(3+4/2)10.01>=2False8and9True0or-1True

表达式

数据结构

·表达式的真值表数据类型值(False)值(True)布尔False(与0等价)True(与1等价)数值0、0.0非零的数值字符串''、""(空字符串)非空字符串容器[]、()、{}、set()至少有一个元素的容器对象NoneNone非None对象

顺序结构

数据结构

·定义

顺序结构就是让程序按照从头到尾的顺序依次执行每一条Python代码,不重复执行任何代码,也不跳过任何代码。例如:

a=3a+=2print(a)输出结果:5

选择结构

数据结构

·定义

选择结构也称分支结构,就是让程序“拐弯”,有选择性的执行代码;换句话说,可以跳过没用的代码,只执行有用的代码。在Python语言中,ifelse语句可以实现这种选择功能。ifelse语句if语句--单分支结构ifelse语句--双分支结构ifelifelse语句--多分支结构

选择结构

数据结构

·if语句语法格式:

if表达式:代码块执行流程:开始代码块表达式结束TrueFalse“:”必须添加,代表后面的语句都是if语句内代码块的标志缩进:若代码块内都是相同的缩进格式,则说明此代码块都是if条件成立时需执行的语句块。表达式:表示if语句的条件,若表达式的值为True,则执行下面的代码块;若值为False则不执行代码块

选择结构

数据结构

·ifelse语句语法格式:

if表达式:代码块1

else:代码块2执行流程:开始代码块1表达式结束TrueFalse代码块2else后面也必须添加“:”代码块1和代码块2的缩进格式必须一样,否则就报错。

选择结构

数据结构

·ifelifelse语句语法格式:

if表达式1

:代码块1

elif表达式2:代码块2

else:代码块3执行流程:开始代码块1表达式1结束TrueFalse代码块2else语句和代码块3可以省略。表达式1代码块3TrueFalse

选择结构

数据结构

注意:

1、选择结构中,不管有多少分支,都只会执行一个分支或一个也不执行,不会同时执行多个分支。2、在Python中没有switch–case语句。例如:a=int(input(“请输入数”))ifa>0:b=a+1print(b)a=int(input(“请输入数”))ifa>0:b=a+1else:b=a+2print(b)a=int(input(“请输入数”))ifa>0:b=a+1elifa>5:b=a+3else:b=a+2print(b)

选择结构

数据结构

·if语句的嵌套

三种选择结构都可以相互嵌套例如:if表达式1:if表示式2:代码块1else:代码块2if表示式1:if表达式2:代码块1else:代码块2else:if表达式3:代码块3if表示式1:if表达式2:代码块1else:代码块2elif:if表达式3:代码块3elif表达式4:代码块4else:代码块5else:if表达式5:代码块6

选择结构

数据结构

·pass语句

空语句。pass不做任何事情,一般用做占位语句,为了保持程序结构的完整性。例如:age=int(input("请输入你的年龄:"))ifage<12:print("婴幼儿")elifage>=12andage<18:print("青少年")elifage>=18andage<30:print("成年人")elifage>=30andage<50:

passelse:print("老年人")使用pass语句比使用注释更加优雅。

选择结构

数据结构

·assert语句

又称断言语句,可以看做是功能缩小版的if语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python解释器会报AssertionError错误。格式:assert表达式或者assert表达式[,参数]if表达式==True:程序继续执行else:程序报AssertionError错误

(或者参数)参数:一般为字符串信息

选择结构

数据结构

·assert语句

例如:mathmark=int(input(“请输入数值:”))#断言数学考试分数是否位于正常范围内assert0<=mathmark<=100,“超出范围”#只有当mathmark位于[0,100]范围内,程序才会继续执行print("数学考试分数为:",mathmark)输出结果:请输入数值:159Traceback(mostrecentcalllast):File"C:\Users\mengma\Desktop\file.py",line3,in<module>assert0<=mathmark<=100,“超出范围”AssertionError:超出范围

选择结构

数据结构

·assert语句

虽然断言是一种快速而简便的触发异常的方式。但是有些情况却并不能使用。1、断言可能会给出错误的异常类型2、当使用-o标识时,执行了断言会导致代码被彻底中断。(-o或-oo优化标识,能够通过变异却不会被执行。)断言的使用场合:1、运行时对程序逻辑的检测2、合约性检查(比如前置条件,后置条件)3、程序中的常量4、检查文档5、防御性的编程

循环结构

数据结构

·range函数Python的内置函数,返回的是一个迭代器。

格式:

range([start,]stop[,step])

1、start:计数从start开始。默认从0开始,可以缺省。

2、stop:计数到stop结束,但不包括stop。不能缺省。

3、step:步长,默认为1。可以缺省。注意:当step不缺省的时,start一定不缺省例如:list(range(5))list(range(0,5))list(range(-5,-1,-1))[0,1,2,3,4][0,1,2,3,4][]

循环结构

数据结构

·range函数

range三个参数的操作和序列的切片操作很类似。

例如:list(range(1,5,2))list(range(-5,-1,2))list(range(-1))list(range(0))list(range(-1,-5))list(range(1,5,-2))list(range(5,1,-2))[1,3][-5,-3][][][][][5,3]

循环结构

数据结构

·while循环语法格式:

while条件表达式:

循环体执行流程:开始循环体表达式结束TrueFalsewhile条件表达式必须添加“:”具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行循环体中的语句,当执行完毕后,再回过头来重新判断条件表达式的值是否为真,若仍为真,则继续重新执行循环体...如此循环,直到条件表达式的值为假(False),才终止循环。

循环结构

数据结构

·while循环num=1a=0whilenum<100:

a+=1num+=1print("a=",a)print("num=",num)例如:输出结果:a=99num=100由左边的例子可知:1、循环体运行了99次2、循环条件的判断执行了100次

循环结构

数据结构

·while循环

Python中,while循环支持else分支。

格式:while<CONDITION>:CODEelse:CODE_ELSE执行流程:开始循环体表达式结束TrueFalse代码块注意:

while的else分支表示当正常退出while循环的时候所执行的代码分支。所谓正常退出,是指不是通过break跳出的情况,也就是正常把所有循环条件轮完的情况,否则程序不执行else分支中的代码块。

循环结构

数据结构

·while循环y=int(input(“请输入值”))x=y//2whilex>1:ify%x==0:print(y,"hasafactor:",x)breakx-=1else:print("yisaprime")print(f'y={y}')例如:(判断一个数(如下面的y)是否是质数)输出结果:请输入值:17yisaprimey=17请输入值:16yhasafactor:8y=16

循环结构

数据结构

·for循环语法格式:

for迭代变量in<Sequence>:

代码块执行流程:开始循环体序列中是否有项结束有没有1、迭代变量用于存放从序列类型变量中读取出来的元素,所以一般不会在循环中对迭代变量手动赋值;2、代码块指的是具有相同缩进格式的多行代码(和while一样),由于和循环结构联用,因此代码块又称为循环体。3、Sequence:字符串、列表、元组、字典、集合取下一项

循环结构

数据结构

·for循环print("计算1+2+...+100的结果为:")#保存累加结果的变量result=0foriinrange(101):result+=iprint(result)例如:输出结果:计算1+2+...+100的结果为:5050由左边的例子可知:1、迭代变量取值为:0~1002、range为迭代:0~100

循环结构

数据结构

·for循环语法格式:

for迭代变量in<Sequence>:CODEelse:CODE_ELSE执行流程:开始循环体序列中是否有项结束有没有

每次迭代时,for从序列中取一个元素赋值给控制变量i,下一轮迭代取下一个元素再赋值给i。和其它语言不太一样,for中的控制变量不会在for循环完后消失,它会保持最后一个被迭代的元素值。

原因:python中for不算是代码块,也就是说没有自己的名称空间。取下一项代码块for循环中的else分支和while循环中的功能是一样的

循环结构

数据结构

·for循环foriin'Python':print(i)例如:遍历一个字符串例如:遍历一个列表L=["aa","bb","cc"]foriinL:print(i)例如:遍历一个元组L=("aa","bb","cc")foriinL:print(i)例如:遍历一个集合L={1,3,8}foriinL:print(i)Pythonaabbccaabbcc813a=>1b=>2c=>3

循环结构

数据结构

·for循环D={'a':1,'b':2,'c':3}forkeyinD:print(key,"=>",D[key])例如:遍历一个字典,迭代的是key例如:通过keys()迭代字典D={'a':1,'b':2,'c':3}forkeyinD.keys():print(key,"=>",D[key])例如:直接迭代字典的value例如:同时迭代key和valueD={'a':1,'b':2,'c':3}forvinD.values():print(v)D={'a':1,'b':2,'c':3}fork,vinD.items():print(k,v)a=>1b=>2c=>3123a1b2c3

循环结构

数据结构

·for循环L=[1111,2222]foriinL:i+=1print(L)例1:例2:L=[[1],[1,2],[1,2,3]]foriinL:i.append(0)print(L)输出结果:输出结果:[1111,2222][[1,0],[1,2,0],[1,2,3,0]]为什么会出现这样的情况?

循环结构

数据结构

·for循环L=[1111,2222]print(id(L[0]))print(id(L[1]))print("-"*15)foriinL:print(id(i))例如:输出结果:4699009646990128---------------4699009646990128可见,变量i和列表中元素的内存地址是一致的for迭代时,实际上是从可迭代对象中取元素并进行赋值的过程。而且,python中变量赋值是按引用赋值的,所以每次迭代过程中赋值给控制变量的是那个元素的引用,而不是拷贝这个元素并赋值给控制变量。正因为是按引用赋值,所以迭代过程中修改赋值给控制变量i的不可变对象时会创建新对象,从而不会影响原始数据,但如果赋值给i的是可变对象,则修改i会影响原始数据。

循环结构

数据结构

·for循环+range迭代foriinrange(3):print(i)foriin[0,1,2]:print(i)上面两段代码的结果是一样的,但是过程很不一样。

range()返回的是可迭代对象,说明序列数值是需要迭代一个临时生成一个的,也就是说range()从始至终在内存中都只占用一个数值的内存空间。而[0,1,2]则是在内存中占用一个包含3数值元素的列表,然后for从这个列表对象中按照索引进行迭代。通俗地解释下,foriinrange(3)开始迭代的时候,生成一个数值0,第二次迭代再生成数值1,第三次迭代再生成数值2,在第一次迭代的时候,1和2都是不存在的。而[0,1,2]则是早就存在于内存中,for通过list类型编写好的迭代器进行迭代,每次迭代从已存在的数值中取一个元素。

在效率上,使用range()要比直接解析列表要慢一点,但是在内存应用上,range()的方式要比直接解析已存在的列表要好,特别是列表较大的时候。

循环结构

数据结构

·for循环+zip()函数

zip()函数可以将多个序列(列表、元组、字典、集合、字符串以及range()区间构成的列表)中的值一一对应地取出来,然后放进一个元组中。它返回一个可迭代对象,可以直接通过list/set等函数将它们的内容一次性展现出来。格式:zip(iterable,...)例如:L=[1,2]S={'a','b','c','d'}list(zip(S,L))[('d',1),('a',2)]注意:集合是无序的,所以从S中取的元素是随机的。当是其他序列时,它会从多个序列中分别取各序列中第1个元素、第2个元素、...第n个元素,各自组成新的元组。当多个序列中元素个数不一致时,会以最短的序列为准进行压缩

循环结构

数据结构

·for循环+zip()函数例如:L1=[1,2,3,4,5]L2=[11,22,33,44,55,66]L3=[111,222,333]for(x,y,z)inzip(L1,L2,L3):print("%d+%d+%d=%d"%(x,y,z,x+y+z))输出结果:1+11+111=1232+22+222=2463+33+333=369

循环结构

数据结构

·for循环+enumerate()函数

enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。格式:enumerate(sequence,[start])

1、sequence:一个序列、迭代器或其他支持迭代对象。

2、start:下标起始位置。默认从0开始。可缺省。例如:seq=['one','two','three']fori,elementinenumerate(seq):print(i,element)输出结果:0one1two2three

循环结构

数据结构

·for循环的陷阱·陷阱一迭代操作是递归到数据对象中去的,而不是根据变量名进行迭代的。也就是说迭代的对象是内存中的数据对象。例1:L=['a','b','c','d','e']foriinL:ifiin"de":L+=["1","2"]print(i,end="")输出结果:abcde1212例2:L=['a','b','c','d','e']foriinL:ifiin"de":L=L+["1","2"]print(i,end="")print()foriinL2:print(i,end="")输出结果:abcdeabcde1212

循环结构

数据结构

·for循环的陷阱·陷阱二迭代一个列表,迭代过程中删除列表元素,达不到预定效果。例如:L=['a','b','c','d','e']foriinL:ifiin"bc":L.remove(i)print(i)print(L)输出结果:b['a','c','d','e']

这个for循环的本意是想删除b、c元素,但结果却只删除了b。通过结果可以发现,c根本就没有被for迭代。

原因是列表的自动内存管理功能造成的,而for循环的迭代没有自动检测,继续运行,从而导致达不到预想效果。有切片法,末尾删除法都可以达到预想结果。

循环结构

数据结构

·for循环的陷阱·陷阱二迭代并修改集合或字典时,一般情况,系统会报错。例1:D={'a':1,'b':2,'c':3,'d':4,'e':5}foriinD:ifiin"bc":delD[i]print(i)print(D)输出结果:bRuntimeError例2:S={'a','b','c','d','e'}foriinS:ifiin"bc":S.remove(i)print(i)print(S)输出结果:bRuntimeError

虽然它们是可变序列,但是它们是以hashkey作为迭代依据的,只要增、删元素,就会导致整个对象的顺序hashkey发生改变,这是编写这两种类型的迭代器时所需要避免的问题。

循环结构

数据结构

·for循环的陷阱·陷阱二迭代并修改集合或字典时,一般情况,系统会报错。例1:D={'a':1,'b':2,'c':3,'d':4,'e':5}foriinD.copy():ifiin"bc":delD[i]print(i)print(D)输出结果:

温馨提示

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

评论

0/150

提交评论