第3单元 流程控制_第1页
第3单元 流程控制_第2页
第3单元 流程控制_第3页
第3单元 流程控制_第4页
第3单元 流程控制_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第3单元控制语句任务3.1选择绘图任务3.2方形炫彩螺任务3.3嵌套螺旋线学习目标知识目标技能目标素质目标掌握if语句的多种语法结构和嵌套使用方法。掌握for和while循环语句的语法结构。掌握循环语句的嵌套使用方法。掌握break、continue语句的用法和区别。能写出符合语法要求的if、if-else、if-elif-else语句。能结合具体应用情景,写出符合语法要求的if嵌套语句。能结合具体应用情景,写出符合语法要求的for、while循环语句。能结合具体应用情景,写出符合语法要求的循环嵌套语句。能运用break、continue语句控制循环程序。引导学习者提高规范编程的思想意识。培养学习者考虑周全、精益求精的工匠精神。培养学习者创新意识和创造能力。培养学习者团队意识和沟通能力。教学内容任务3.1选择绘图一、任务描述

使用海龟作图库turtle绘制图形。在对话框中输入1则绘制红色的正方形,输入2则绘制绿色的圆形,输入3则绘制蓝色的三角形,输入4则绘制一只橙色的海龟,如果输入其他数据则提示“选择错误!”。

二、相关知识datetime库包含date、time、datetime、timedelta、timezone、tzinfo等类,内置许多与日期和时间相关的函数。1.datetime库序号类名称描述类型1MAXYEAR9999,指能支持的最大年份int2MINYEAR1,指能支持的最小年份int3date表示日期的类,常用的属性有year、month、daytype4datetime表示日期时间的类,常用的属性有hour、minute、second、microsecondtype5time表示时间的类type6timedelta表示时间间隔的类,即两个时间点的间隔。可以做天、小时、分钟、秒、毫秒、微秒的时间间隔计算type7timezone表示时区的类type8tzinfo表示时区的相关信息的类type二、相关知识(1)创建基于date、time、datetime三个类的对象:importdatetimedate_sample=datetime.date(2021,7,20)#年,月,日time_sample=datetime.time(12,20,33)#时,分,秒datetime_sample=datetime.datetime(2021,7,20,12,20,33)#年,月,日,时,分,秒(2)获取当前时间fromdatetimeimportdatetimenow=datetime.now() #获取当前日期和时间print(now.year) #输出年print(now.month) #输出月print(now.day) #输出日print(now.hour) #输出时print(now.minute) #输出分print(now.second) #输出秒二、相关知识(3)计算时间间隔delta1=datetime(2022,6,30,20)-datetime(2022,2,2,1)print(delta1)print(type(delta1))(4)转换字符串stamp=datetime(2022,6,22,10,56,50)print(str(stamp))#输出强制转换后的字符串#格式化转换字符串print(stamp.strftime("%Y/%m/%d%H:%M:%S"))print(stamp.strftime("%Y-%m-%d%H:%M:%S"))print(stamp.strftime("%Y/%m/%d"))print(stamp.strftime("%Y-%m-%d"))2.条件语句程序中的语句默认自上而下顺序执行。流程控制意指在程序执行时,通过一些特定的指令更改程序中语句的执行顺序,使程序产生跳跃、回溯等现象。二、相关知识

程序开发中经常会用到条件判断,比如,用户登录时需判断用户名和密码是否全部正确,进而决定用户是否能够成功登录。类似这种需求的功能,都可以使用if语句实现。二、相关知识if单分支双分支多分支if-elseif-elif-elseif语句可使程序产生分支,根据分支数量的不同,if语句分为单分支、双分支和多分支语句。二、相关知识if条件表达式:

代码块if语句由if关键字、条件表达式和代码块三部分组成,它根据表达式的判断结果选择是否执行相应的代码块。二、相关知识if关键字可以理解为“如果”,当条件表达式的值为True时,则执行代码块。二、相关知识importdatetime#导入datetime库IDNumber= #身份证号码year=datetime.date.today().year #获取当前日期的年份age=year-int(IDNumber[6:10]) #当前年份减去出生年份为年龄ifage>=18: #如果年龄大于或等于18,则输出成年人print("成年人")if条件表达式:

代码块1else:

代码块2if-else语句产生两个分支,可根据条件表达式的判断结果选择执行哪一个分支。二、相关知识如果if条件表达式结果为True,则执行代码块1;如果条件表达式结果为False,则执行代码块2。二、相关知识importdatetime#导入datetime库IDNumber= #身份证号码year=datetime.date.today().year #获取当前日期的年份age=year-int(IDNumber[6:10]) #当前年份减去出生年份为年龄ifage>=18: #如果年龄大于或等于18,print("成年人")#则输出成年人,否则输出未成年人else:print("未成年人")if条件表达式1:

代码块1elif条件表达式2:

代码块2elif条件表达式3:

代码块3elif条件表达式n-1:

代码块n-1else:

代码块n如果程序需要处理多种情况,那么可以使用if-elif-else语句。二、相关知识若条件表达式1的结果为True,则执行代码块1;若条件表达式2的结果为True,则执行代码块2,以此类推,若else前面的条件表达式结果都为False,则执行代码块n。二、相关知识importdatetime#导入datetime库IDNumber= #身份证号码year=datetime.date.today().year #获取当前日期的年份age=year-int(IDNumber[6:10]) #当前年份减去出生年份为年龄ifage>18: #如果年龄大于18,则输出成年人print("成年人")elifage==18: #如果年龄等于18,则需进一步处理print("是否成年还需要对比出生月份和日期")else: #如果年龄小于18,则为未成年人print("未成年人")3.条件结构的嵌套if语句可以嵌套if语句,根据对齐格式来确定if语句之间的逻辑关系。二、相关知识if条件表达式1:

if条件表示式2:#if嵌套

代码块1else:

代码块2else:

代码块3二、相关知识importdatetime #导入datetime库IDNumber=#身份证号码year=datetime.date.today().year#获取当前日期的年份age=year-int(IDNumber[6:10])#当前年份减去出生年份为年龄ifage>18:#如果年龄大于18,则输出成年人print("成年人")elifage==18: #如果年龄等于18,则需进一步处理month1=datetime.date.today().month#获取当前日期的月份month2=int(IDNumber[10:12])#获取身份证中的月份month=month1-month2;ifmonth>0: #如果当前月份比身份证上的月份大,则输出成年人print("成年人")elifmonth==0:#当前月份与身份证上的月份相同,则进一步处理day1=datetime.date.today().day#获取当前日期的日期day2=int(IDNumber[12:14]) #获取身份证中的日期day=day1-day2;ifday>=0:#如果当前日期比身份证上的日期大或相等,则输出成年人print("成年人")else:#当前日期比身份证上的日期小,则输出未成年人print("未成年人")else:#当前月份比身份证上的月份小,则输出未成年人print("未成年人")else:#如果年龄小于18,则输出未成年人print("未成年人")4.相关turtle库函数说明turtle.shape(shape):设置海龟的形状,参数值有“arrow”“turtle”“circle”“square”“triangle”“classic”等,默认值为“classic”。turtle.shapesize(stretch_wid=None,stretch_len=None,outline=None):设置形状拉伸大小和轮廓线。turtle.stamp():在海龟当前位置印制一个海龟形状。turtle.clearstamps(n=None):删除全部或前/后n个海龟印章。如果n为None,则删除全部印章,如果n>0,则删除前n个印章,否则删除后n个印章。二、相关知识三、任务分析turtle库中的shape()函数可以设置海龟的形状,可以通过改变海龟形状得到正方形、圆形、三角形及海龟的图形。可以使用shapesize()函数设置形状的大小,使用stamp()函数在画笔当前位置印制一个与海龟形状相同的图形,使用numinput()函数设置输入选项。四、任务实现(1)在PyCharm中,选择“File”→“NewProject…”,在弹出的对话框中将项目命名为“chapter03”,单击“Create”按钮,创建新项目。(2)在PyCharm中,右击左侧列表中的项目名称“chapter03”,选择“New”→“PythonFile”,在弹出的对话框中将文件命名为“3-1选择绘图.py”,按“Enter”键,进入代码编辑界面。(3)在新文件中指定文件编码为UTF-8,添加文件功能注释。(4)导入turtle库并取别名为t,提示输入选项并设置海龟形状的大小为10。#-*-coding:utf-8-*-"""使用海龟作图库turtle绘制图形,在对话框中输入1则绘制红色的正方形,输入2则绘制绿色的圆形,输入3则绘制蓝色的三角形,输入4则绘制一只橙色的海龟,如果输入其他数据则提示

"选择错误!"。"""importturtleast#导入库#提示输入选项,并记录输入选项的值shape=t.numinput('绘图','请选择:1--正方形2--圆形3--三角形4--海龟')t.shapesize(10)#设置海龟形状大小四、任务实现(5)使用条件语句,根据输入的选项值绘制不同的形状:先设置画笔的形状,然后设置颜色,最后使用盖印章命令绘制图形。ifshape==1:#如果选项为1,则设置形状为正方形、颜色为红色,盖印章t.shape('square')t.color('red')t.stamp()elifshape==2:#如果选项为2,则设置形状为圆形、颜色为绿色,盖印章t.shape('circle')t.color('green')t.stamp()elifshape==3:#如果选项为3,则设置形状为三角形、颜色为蓝色,盖印章t.shape('triangle')t.color('blue')t.stamp()elifshape==4:#如果选项为4,则设置形状为海龟形状、颜色为橙色,盖印章t.shape('turtle')t.color('orange')t.stamp()else:#如果选项为其他数据,则隐藏形状,输出文字t.hideturtle()t.write('选择有误',font=('Arial',20,'normal'))t.mainloop()任务3.2方形炫彩螺一、任务描述海龟作图库turtle可以用于绘制漂亮的图形,可结合循环语句绘制绚丽的螺旋线,如图所示。其中(a)中的线条为红色,线条转折的角度为90°;(b)中的颜色为蓝色,线条转折的角度发生了变化;(c)中的颜色是渐变的,可尝试使用for和while两种循环语句编写。while条件表达式:

代码块while循环是一个条件循环语句,当条件满足时重复执行代码块,直到条件不满足为止。二、相关知识1.while循环语句首先判断条件表达式的结果是否为True,若结果为True执行while循环中的代码块,然后再次判断条件表达式的结果是否为True,若结果仍为True,则再次执行代码块...直至条件表达式的结果为False时结束循环。二、相关知识s=0 #s存放累加和n=1 #n存放累加项whilen<=100: #循环条件s+=n #循环体,实现累加求和n+=1 #循环体,实现循环条件n加1print("1+2+3+…+100=",s)例如:用while循环语句计算1+2+3+…+100的和for循环语句通常用在已知重复执行次数的循环中,for循环可以遍历任何序列,如一个列表或者一个字符串,针对序列中的每个元素运行一次循环体。for目标变量in序列对象:

代码块

二、相关知识2.for循环语句序列对象除了已经学过的字符串外,还包括列表、元组、字典、集合等。str="Whatwesharetodaymaygiveparentsnewinspiration."count=0 #记录a的数目的变量forcinstr: #依次从字符串中获取字符ifc=='a': #如果获取的字符为a,则数目加1count+=1print("字符串str中含有",count,"个a!")二、相关知识(1)for循环遍历序列例如,计算一个字符串中含有几个字符afor循环range()函数可生成一个左闭右开的整数范围。foriinrange(3):print("Hello")foriinrange(起始值,结束值,步长):

执行语句(2)for循环与range()函数搭配foriinrange(1,3):print("Hello")foriinrange(1,9,2):print("Hello")for循环

例如:输入10个数,求出其中的最大数和最小数。x=int(input("请输入数字:")) #输入第一个数max=min=x #将第一个数赋给记录最大值和最小值的变量foriinrange(1,10): #循环9次

x=int(input("请输入数字:")) #输入一个数字

ifx>max: #比最大值大,将新输入的数赋给最大值

max=x

elifx<min: #比最小值小,将新输入的数赋给最小值

min=xprint("max={0},min={1}".format(max,min))for循环

例如:输出100以内的3的倍数,每行显示10个数,并计算它们的和s=0 #存储和的变量count=0 #记录3的倍数的数目forninrange(0,100,3): #从0开始至99结束,步长为3

print(n,end='\t') #输出3的倍数,不换行

count+=1 #数目加1

if(count%10==0): #输出10个数后换行

print()

s+=n #3的倍数的累加和print("\n100以内3的倍数数字之和为:",s)turtle.pencolor(color):没有参数传入,返回当前画笔颜色;传入参数表示设置画笔颜色,其值可以是字符串如“green”“red”等,也可以是RGB三元组。turtle.colormode(mode):用于返回颜色模式或将其设置为1.0或255。参数mode默认为1,即RGB取值范围为0~1,如果设置为255,则RGB取值范围为0~255。turtle.pensize(n):设置画笔宽度,默认为1。turtle.tracer(n,delay):用于打开或关闭绘图动画,并设置更新图纸的延迟时间。二、相关知识3.相关turtle函数说明三、任务分析分析图(a),从中心点开始绘制一条线段,向左旋转90°,再绘制一条略长的线段,再旋转90°,以此类推。图(b)在图(a)的基础上修改了旋转角度,从外围的线条可以看出基本上属于四边形,旋转角度略大于90°。图(c)的颜色是渐变的,在编码过程中不能设置固定的线条颜色。三、任务分析

在第1单元中我们安装了第三方库coloradd,该库中的coloradd()函数可以对三原色的颜色进行改变,格式为coloradd(三原色,增量),可以通过循环语句逐渐改变三原色实现颜色渐变效果。方形炫彩螺的线条没有缝隙,这可以通过增加画笔宽度,减少每次线条增加的长度来实现。四、任务实现(1)在PyCharm中,右击左侧列表中的项目名称“chapter03”,选择“New”→“PythonFile”,在弹出的对话框中将文件命名为“3-2彩色螺旋线.py”,按“Enter”键,进入代码编辑界面。(2)新建Python文件,导入turtle库,设置窗体大小和画笔颜色。(3)绘制图(a)。按照任务分析中的思路,先绘制一条2个单位长度的线段,向左旋转90°,再绘制一条增加2个单位长度的线段,再向左旋转90°,依次类推,循环绘制80条线段,完成图(a)的绘制。importturtleastt.setup(600,400,200,100)#设置窗体大小为600×400,窗体左上角在屏幕的(200,100)位置t.pencolor('red')forninrange(80): #循环80次,从0开始

t.forward(2+2*n) #线段长度从2开始,依次增加2

t.left(90) #旋转90°t.mainloop()四、任务实现(4)将步骤(2)中的颜色设置为蓝色,步骤(3)中的旋转角度设置为91°,代码作如下修改,再次运行,绘制出图(b)。t.pencolor('red')

t.pencolor('blue’)t.left(90)

t.left(91)(5)新建Python文件,取名为“3-2方形炫彩螺.py”,导入turtle、coloradd库,标题为“方形炫彩螺”,颜色模式为255,定义颜色color变量并设置初始值为青色(0,255,255),将画笔宽度设置为8。importturtleimportcoloraddturtle.title('方形炫彩螺') #设定标题turtle.colormode(255) #设定颜色模式color=(0,255,255) #青色元组turtle.pensize(8) #画笔宽度四、任务实现(6)使用for循环配合range()绘制炫彩螺,循环的次数越多,色彩越丰富,在此设置为循环800次。循环次数多,绘制速度会很慢,可以使用turtle.tracer()关闭动画并且设置刷新屏幕的时间以实现更好的视觉效果。循环体内,每次移动i/2,旋转角度也适当减小,不需要每次循环都改变颜色,可以循环5次改变一次颜色,根据实际情况自行调整。turtle.tracer(10) #每10ms更新一次turtle.hideturtle() #隐藏海龟形状foriinrange(800): #重复800次

turtle.fd(i/2) #移动i/2

turtle.rt(90.2) #右转90.2°

ifi%5==0:

color=coloradd.coloradd(color,0.01)#当是5的整数时让颜色改变一次

turtle.pencolor(color)#画笔颜色turtle.mainloop() #主循环,刷新组件四、任务实现(7)将步骤(6)中的for循环语句改成while循环语句,实现相同的效果。使用while循环需要有循环变量的初始值、退出条件,循环体内需要有循环变量改变的过程,避免出现死循环。turtle.tracer(10) #每10ms更新一次turtle.hideturtle() #隐藏海龟形状i=0 #循环变量初始值,用于记录循环次数whilei<800: #重复800次

turtle.fd(i/2) #移动i/2

turtle.rt(90.2) #右转90.2°

ifi%5==0:

color=coloradd.coloradd(color,0.01)#当是5的整数时让颜色改变一次

turtle.pencolor(color) #画笔颜色

i+=1 #循环变量递增,缺少该句会出现死循环turtle.mainloop() #主循环,刷新组件任务3.3嵌套螺旋线一、任务描述使用turtle库绘制多彩的嵌套螺旋线,在图(a)所示窗口中输入嵌套螺旋线的边数,如果输入的是2则绘制图(b)所示的具有2个分支的螺旋线,如果输入的是3则绘制图(c)所示的具有3个分支的螺旋线,依次类推。(a)(b)(c)(d)(e)二、相关知识For循环嵌套:for循环嵌套是指for循环语句中嵌套while或for循环语句。例如,输出九九乘法表。1.循环嵌套for临时变量1in可迭代对象:

代码块1for临时变量2in可迭代对象:

代码块2foriinrange(1,10):#外循环,用来控制行数forjinrange(1,i+1):#内循环用来控制输出几个算式,与外循环的行数i有关print('{}*{}={}'.format(i,j,i*j),end='\t’)#输出算式print()#内循环结束后换行二、相关知识(2)while循环嵌套:while循环嵌套是指while循环语句中嵌套while或for循环语句。例如,输出九九乘法表。while循环条件1:

代码块1while循环条件2:

代码块2......i=1 #设置外循环的循环变量初始值whilei<10: #外循环,用来控制行数j=1 #设置内循环的循环变量初始值whilej<i+1: #内循环用来控制输出几个算式,与外循环的行数i有关print('{}*{}={}'.format(i,j,i*j),end='\t’)#输出算式j+=1 #内循环变量递增i+=1 #外循环变量递增print() #内循环结束后换行跳出整个循环break语句跳出本次循环continue语句循环语句一般会在执行完所有的情况后自然结束,但是有些情况下需要停止当前正在执行的循环,也就是跳出循环。二、相关知识2.循环控制语句for临时变量in可迭代对象:

执行语句if条件表达式:

代码块break(1)break语句:用于跳出离它最近一级的循环,通常与if语句结合使用,放在if语句代码块中。二、相关知识while条件表达式:

代码块if条件表达式:

代码块breakbreak语句也可以用于while循环,其格式如下所示:二、相关知识二、相关知识例如,判断一串字符串中是否包含数字字符,在使用for循环遍历字符串时,若遍历到数字,使用break语句结束循环。str='我们班有45位同学。'flag=False #设置标记,用于记录是否含有数字,默认不含有forcinstr:print(c,end='') #输出遍历到的字符ifc>='0'andc<='9':print("\nstr字符串中含有数字")flag=True #找到数字后,设置标记变量breakifnotflag: #如果标记变量仍为False,表示没有数字print("str字符串中不包含数字")s=0 #存放累加和foriinrange(1,101):#循环100次ifi%2!=0:#如果是奇数,跳过后面的语句,进入下一轮循环continues+=i;#累加和print("100以内的偶数和为:",s)当执行到continue语句时,程序会忽略当前循环中剩余的代码,重新开始执行下一次循环。(2)continue语句用于跳出当前循环,继续执行下一次循环。二、相关知识3.相关turtle库函数说明turtle.position():返回海龟当前的坐标。turtle.heading():返回海龟当前的朝向。turtle.setposition(x,y):将海龟移动到一个坐标(x,y)。turtle.setheading(angle):设置当前画笔运动方向为angle角度。turtle.dot(r):绘制一个指定直径为r的圆点。二、相关知识三、任务分析通过分析效果图,可以得出如下结论。嵌套螺旋线有几条分支,分支上的螺旋线就有几条边。需要使用循环嵌套,外循环用来控制绘制多少条螺旋线并依次放置在不同的分支上,内循环用来控制每条螺旋线的边数。随着外循环的次数增多,内循环绘制的螺旋逐渐增大,即循环的次数增多。螺旋线为彩色,可将颜色组合成以逗号分隔的字符串,并通过字符串分割函数split()进行处理。可以先编写外循环代码,用圆点代替螺旋线,待圆点轮廓符合要求后再编写内循环代码,用螺旋线代替圆点。四、任务实现(1)在PyCharm中,右击左侧列表中的项目名称“chapter03”,选择“New”→“PythonFile”,在弹出的对话框中将文件命名为“3-3嵌套螺旋线.py”,按“Enter”键,进入代码编辑界面。(2)导入turtle库,提示输入嵌套螺旋线边数并记录,设置颜色字符串并使用逗号进行分隔,每10ms刷新一次屏幕,以提高绘图效率。importturtleast#记录输入边数sides=int(t.numinput("边数","嵌套螺旋线有几条边?

(2~5)",4,2,5))#设置颜色字符串并进行分隔colors="red,orange,blue,green,purple".split(',')t.tracer(10)#每10ms刷新一次屏幕四、任务实现(3)编写外循环代码,先将画笔颜色设置为“red”,用红点代替分支上的螺旋线。外循环为100次,即绘制100个红点。循环体内实现的功能与绘制螺旋线思路基本一致,区别在于不绘制线条,在每次前进后画圆点。循环体内编码思路:抬笔→前进一段距离→落笔→画圆点→旋转(旋转角度与边数有关)。t.pencolor('red')forminrange(100): #绘制100个红点t.penup() #抬笔t.forward(m*4) #前进一段距离t.pendown() #落笔t.dot() #画圆点t.right(360/sides+2) #旋转角度与边数有关,加2用于实现旋转效果,否则为直线四、任务实现(4)编写内循环代码,用螺旋线替代红点。内循环绘制的整体思路为:记录画笔位置→绘制螺旋线→画笔回到原位置。绘制螺旋线前首先记录画笔的位置,螺旋线绘制完成后画笔需要回到原来的位置,以便外循环按规则确定新的螺旋线位置。内循环的循环次数与外循环当前的循环次数有关,可以取当前外循环次数的1/2,在内循环体中设置画笔颜色、前进一段距离(距离与内循环次数有关)、旋转角度(与边数有关,减2出现螺旋效果)等。position=t.position() #记录外循环嵌套螺旋线的位置heading=t.heading() #记录外循环海龟的方向t.pendown()forninrange(int(m/2)):t.pencolor(colors[n%sides])t.forward(2*n)t.right(360/sides-2)t.penup()t.setx(position[0]) #内循环结束回到外循环原来的位置,即x轴位置t.sety(position[1]) #内循环结束回到外循环原来的位置,即y轴位置t.setheading(heading) #回到外循环原来的方向四、任务实现(5)至此,嵌套螺旋线的代码全部编写完成,运行并输入边数,出现图3-7中的图形。importturtleast#记录输入边数sides=int(t.numinput("边数","嵌套螺旋线有几条边?

(2~5)",4,2,5))colors="red,orange,blue,green,purple".split(',’)#设置颜色字符串并进行分隔t.tracer(10) #每10ms刷新一次屏幕forminrange(100): #外循环为100次,绘制100条螺旋线t.forward(m*4) #前进一段距离position=t.position() #记录外循环螺旋线的位置

温馨提示

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

评论

0/150

提交评论