![03 程序流程控制_第1页](http://file4.renrendoc.com/view7/M00/2C/34/wKhkGWcThAeAJa6JAADswPfOg60196.jpg)
![03 程序流程控制_第2页](http://file4.renrendoc.com/view7/M00/2C/34/wKhkGWcThAeAJa6JAADswPfOg601962.jpg)
![03 程序流程控制_第3页](http://file4.renrendoc.com/view7/M00/2C/34/wKhkGWcThAeAJa6JAADswPfOg601963.jpg)
![03 程序流程控制_第4页](http://file4.renrendoc.com/view7/M00/2C/34/wKhkGWcThAeAJa6JAADswPfOg601964.jpg)
![03 程序流程控制_第5页](http://file4.renrendoc.com/view7/M00/2C/34/wKhkGWcThAeAJa6JAADswPfOg601965.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序流程控制03在Python语言中,常用的程序结构包括顺序、选择和循环。程序中的语句默认自上而下顺序执行,但通过选择和循环结构可以改变语句的执行顺序,实现特定的业务逻辑。一个完整的选择结构或循环结构可以看作是一条大的“语句”,宏观上来说,程序中的多条“语句”还是顺序执行的。从形式上来看,程序结构被分成3种,但在实际编程过程中,3种结构可能搭配在一起使用:一个程序中既有顺序、又有选择和循环;有的甚至还会出现“嵌套”的形式,如选择里面套有选择、选择里面套有循环、循环里面套有选择、循环里面套有循环等。这完全由实际问题的需要而定。编程人员应该在掌握Python编程知识的基础上,灵活应对实际问题,巧妙利用3种程序结构,以便设计出高质量的应用程序。内容简介本章内容顺序结构选择结构循环结构turtle库的使用应用实例计算机程序是一组描述某个问题的求解算法并能被计算机识别和执行的指令序列。程序控制结构是指计算机程序中以某种逻辑次序执行的一系列操作的语句组织结构。计算机的程序流程通常由:顺序、选择、循环三种基本结构组成。程序的顺序结构是指按语句出现的先后顺序执行的程序结构。程序设计语言并不提供专门的控制流语句来表达顺序控制结构,而用程序语句的自然排列(即从上到下、从左至右)顺序来表达。3.1顺序结构【例3-1】设计一程序从键盘读入圆的半径,完成圆面积的计算并输出输出圆的面积。3.1顺序结构1234importmathr=eval(input('请输入圆的半径:'))s=math.pi*r*rprint(f'半径为{r}的圆的面积为{s:.2f}。')>>>请输入圆的半径:12半径为12的圆的面积为452.39。选择结构,也称分支结构,包含条件判断语句(控制选择的条件表达式语句)和可选择执行的语句块。条件表达式可以是各种类型的表达式,如算术表达式、关系表达式、成员运算表达式。当条件表达式的值为False、0、空串、空列表、空字典、空集合时,条件表达式的逻辑值为假,否则条件表达式的逻辑值便为真。常见的选择结构有单分支、双分支、多分支、结构化模式匹配及嵌套的分支结构。3.2选择结构3.2选择结构单分支选择结构语句双分支选择结构语句多分支选择结构语句结构化模式匹配语句分支语句的嵌套单分支选择结构语法形式如下:当条件表达式的值为True或其他与True等价的值时,语句块被执行,否则该语句块不被执行。最后跳出分支结构,继续执行后面的代码(如果有)。if语句后面的冒号“:”必不可少,表示一个语句块的开始,并且语句块必须做相应的缩进,一般是以4个空格为缩进单位。语句块:可以是单条语句,也可以是多条语句。多条语句的缩进必须对齐一致。3.2.1单分支选择结构语句if条件表达式:
语句块【例3-2】输入3个整数,按从大到小的顺序输出。3个数的排序,一共有6种可能,如右图所示。3.2.1单分支选择结构语句123456789101112131415x=int(input("请输入一个整数x:"))y=int(input("请输入一个整数y:"))z=int(input("请输入一个整数z:"))ifx>y>z:print("三个数降序排序结果为:",x,y,z)ifx>z>y:print("三个数降序排序结果为:",x,z,y)ify>x>z:print("三个数降序排序结果为:",y,x,z)ify>z>x:print("三个数降序排序结果为:",y,z,x)ifz>x>y:print("三个数降序排序结果为:",z,x,y)ifz>y>x:print("三个数降序排序结果为:",z,y,x)>>>
请输入一个整数x:10请输入一个整数y:15请输入一个整数z:5三个数降序排序结果为:15105【例3-3】汽车限号提醒(1)。为了减轻车辆快速增长而造成的交通负担,降低机动车尾气排放量,将空气污染指数控制在一个合理的范围内,全国各地出台了相应的尾号限行政策。以北京为例,周一至周五限行机动车车牌尾号分别为:4和9、5和0、1和6、2和7、3和8。3.2.1单分支选择结构语句12345678910111213x=int(input("请输入今天是星期几?(填写数字1~7)"))ifx==1:print("今日限行,限行车牌尾号为:4和9!")ifx==2:print("今日限行,限行车牌尾号为:5和0!")ifx==3:print("今日限行,限行车牌尾号为:6和1!")ifx==4:print("今日限行,限行车牌尾号为:7和2!")ifx==5:print("今日限行,限行车牌尾号为:8和3!")if(x==6)or(x==7):print("今日不限行!")>>>请输入今天是星期几?(填写数字1~7)3今日限行,限行车牌尾号为:6和1!双分支结构语法形式如下:当条件表达式的值为True或其他与True等价的值时,执行语句块1,否则执行语句块2。最后跳出分支结构,继续执行后面的代码(如果有)。else语句一定不可以单独使用,必须和if一起使用。if、else语句后面都必须有冒号“:”。3.2.2双分支选择结构语句if条件表达式:语句块1else:
语句块2【例3-4】汽车限号提醒(2)。如果用户只关心今日是否限行两种情况,可以通过双分支语句完成。3.2.2双分支选择结构语句12345x=int(input("请输入今天是星期几?(填写数字1~7)"))if(x!=6)and(x!=7):print("今日限行!")else:print("今日不限行!")>>>请输入今天是星期几?(填写数字1~7)3今日限行!双分支结构还有一种更简洁的表达方式,适合通过判断条件表达式返回特定值。语法格式如下:当条件表达式的值为True或与True等价的值时,返回表达式1的值,否则返回表达式2的值。其中,表达式1、2一般是数字类型或字符串类型的一个值。例如,如果x>=0,则y=x,否则y=0,可以表达为:【例3-4】汽车限号提醒(2)程序还可修改为如下代码3.2.2双分支选择结构语句<表达式1>if<条件表达式>else<表达式2>>>>x=eval(input('请输入x的值:'))请输入x的值:5>>>y=xifx>=0else0>>>y512x=int(input("请输入今天是星期几?(填写数字1~7)"))print("今日{}!".format("限行"if(x!=6)and(x!=7)else"不限行"))【例3-5】编程判断某一年是否为闰年。判断闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除,其判断流程如图所示。3.2.2双分支选择结构语句12345Year=int(input("请输入任意年份:"))if(Year%4==0andYear%100!=0)orYear%400==0:print("是闰年")else:print("不是闰年")>>>请输入任意年份:2022不是闰年>>>
请输入任意年份:2020是闰年多分支结构语法形式如下:依次评估寻找第一个结果为True或其他与True等价的条件,执行该条件下的语句块,如果没有任何条件成立,else下面的语句块将被执行,else子句是可选的。最后跳出分支结构,继续执行后面的代码。elif可以理解为是elseif的缩写,必须和if一起使用,不能单独使用。if、elif、else每个语句后面都必须有冒号“:”。3.2.3多分支选择结构语句if条件表达式1:语句块1elif条件表达式2:
语句块2elif条件表达式3:
语句块3…[else:
语句块n]在【例3-3】汽车限号提醒(1)程序中通过多条独立的if语句对同一个变量x进行判断,这种情况更适合多分支结构,优化后的代码如下:3.2.3多分支选择结构语句12345678910111213x=int(input("请输入今天是星期几?(填写数字1~7)"))ifx==1:print("今日限行,限行车牌尾号为:4和9!")elifx==2:print("今日限行,限行车牌尾号为:5和0!")elifx==3:print("今日限行,限行车牌尾号为:6和1!")elifx==4:print("今日限行,限行车牌尾号为:7和2!")elifx==5:print("今日限行,限行车牌尾号为:8和3!")else:print("今日不限行!")【例3-6】猜数字游戏(1)。猜数字是一个古老的益智类密码破译小游戏,通常由两个人参与。游戏开始后一个人设置一个数字,一个人猜数字,每当猜数字的人说出一个数字时由设置数字的人告知是否猜中:若猜测的数字大于设置的数字,提示“很遗憾,你猜大了!”;若猜测的数字小于设置的数字,提示“很遗憾,你猜小了!”;若猜中,则提示“恭喜,猜数成功!”。3.2.3多分支选择结构语句12345678num=9#设置谜底guess=int(input("请猜0~9之间的数字:"))ifguess>num:print("很遗憾,你猜大了!")elifguess<num:print("很遗憾,你猜小了!")else:print("恭喜,猜数成功!")【例3-6】猜数字游戏(1)。猜数字是一个古老的益智类密码破译小游戏,通常由两个人参与。游戏开始后一个人设置一个数字,一个人猜数字,每当猜数字的人说出一个数字时由设置数字的人告知是否猜中:若猜测的数字大于设置的数字,提示“很遗憾,你猜大了!”;若猜测的数字小于设置的数字,提示“很遗憾,你猜小了!”;若猜中,则提示“恭喜,猜数成功!”。3.2.3多分支选择结构语句12345678num=9#设置谜底guess=int(input("请猜0~9之间的数字:"))ifguess>num:print("很遗憾,你猜大了!")elifguess<num:print("很遗憾,你猜小了!")else:print("恭喜,猜数成功!")>>>请猜0~9之间的数字:5很遗憾,你猜小了!>>>
请猜0~9之间的数字:9恭喜,猜数成功!>>>
请猜0~9之间的数字:10很遗憾,你猜大了!>>>
请猜0~9之间的数字:-4很遗憾,你猜小了!Python3.10版本开始新增加了一个结构化模式匹配语句match-case,类似于其他语言如C中的switch-case,它可以方便的匹配想要的内容,可以作为一部分if-elif-else多分支语句的替代,减少代码量。match-case语句语法形式如下:功能:将变量的值依次匹配case后面的模式,寻找到第一个匹配的模式则结束匹配,执行对应case块内的语句;如果没有匹配的模式,则执行case_块内的语句。注意,最后一个case语句与_之间有空格。3.2.4结构化模式匹配语句match变量名:casepattern_1:
语句块1casepattern_2:
语句块2
…case_:
语句块n示例代码3.2.4结构化模式匹配语句1234567891011s=int(input('请输入数值:'))matchs:case1:print('星期一')#少量语句可以写在同一行case2:print('星期二')case3:print('星期三')case4:print('星期四')case5:print('星期五')case6:print('星期六')case7:print('星期天')#也可另起一行缩进case_:print('输入错误')>>>
请输入数值:1星期一>>>
请输入数值:10输入错误match-case还可以使用逻辑或符号“|”实现多条件匹配,casepattern_1|pattern_2|pattern_3|…如同if条件1or条件2or条件3…3.2.4结构化模式匹配语句12345678s=int(input('请输入数值:'))matchs:case1|2|3|4|5:#逻辑或|符号print('工作日')case6|7:print('周末')case_:print('输入错误')>>>
请输入数值:1工作日>>>
请输入数值:5工作日>>>
请输入数值:7周末>>>
请输入数值:10输入错误match-case语句不仅可以匹配数字、字符串、列表、字典、元组等不同的数据类型,而且还支持通配符匹配。分支结构中,如果语句本身也是一段if语句,则构成分支语句的嵌套结构。3.2.5分支结构的嵌套if表达式1:语句块1if表达式2:
语句块2else:
语句块3if表达式1:语句块1if表达式2:
语句块2else:
语句块3else:if表达式4:
语句块4else:
语句块5【例3-7】判断某一年是否为闰年,判断闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。3.2.4分支结构的嵌套1234567891011Year=int(input("请输入一个四位数的年份:"))ifYear%400==0:print("是闰年")else:ifYear%4==0:ifYear%100==0:print("不是闰年")else:print("是闰年")else:print("不是闰年")【例3-8】阶梯电价。为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为3个“阶梯”。第一档:年用电量0~2160度,电价为0.6元/度;第二档:年用电量2160~4200度,超出部分电价为0.65元/度;第三档:年用电量超过4200度,超出部分电价为0.9元/度。
请编写程序计算电费。分析:根据外部输入的年用电量x,电费cost的判断逻辑为:if0<=x<=2160,cost=0.6*xif2160<x<=4200,cost=2160*0.6+(x-2160)*0.65ifx>4200,cost=2160*0.6+(4200-2160)*0.65+(x-4200)*0.9最后,输出电费。3.2.4分支结构的嵌套【例3-8】阶梯电价。为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为3个“阶梯”。3.2.4分支结构的嵌套1234567891011x=float(input("请输入年用电量:"))ifx>=0:ifx<=2160:cost=0.6*xelif4200>=x>2160:cost=2160*0.6+(x-2160)*0.65else:cost=2160*0.6+(4200-2160)*0.65+(x-4200)*0.9print("应付电费:",cost)else:print("数据错误!")>>>请输入年用电量:1000应付电费:600.0【例3-9】判断回文。输入一个字符串S,判断S是否是回文数;如果是回文数,判断该字符串是否以“69”开头;如果是,则输出该字符串中的一半字符。分析:回文数是指一个数正向排列与反向排列一样,例如121是回文,可以通过字符串的索引访问,也可以通过字符串的切片得到S的倒置串S[::-1]。判断是否以“69”开头,可以使用S.startswith()方法。字符串的一半则通过len(S)//2得到索引值的范围。3.2.4分支结构的嵌套12345678S=input('请输入数字字符串:')ifS==S[::-1]:#判断原串跟倒置串是否相等print("是回文数")ifS.startswith("69"):#判断是否以“69”开头x=len(S)//2print("字符串中一半的字符是:",S[0:x])#获得一半的切片else:print("不是回文数")>>>请输入数字字符串:699878996是回文数字符串中一半的字符是:6998循环结构用来重复执行一条或多条语句,被重复执行的那些语句块称为循环体。使用循环结构,可以减少源程序重复书写的工作量。Python中主要有while循环语句、for循环语句及嵌套的循环结构,并且还经常和选择结构嵌套使用来实现更为复杂的业务逻辑。while循环一般用于循环次数难以确定的情况,也可用于循环次数确定的情况for循环一般用于循环次数已知的情况有时为了提前结束循环需用到break或continue语句。3.3循环结构3.3循环结构while循环结构语句for循环结构语句循环的嵌套循环中的break和continue语句循环中的else子句while语句通过判断条件来控制是否要继续执行循环体中的语句块,通常用于循环次数不确定的场合。语法形式如下:当条件表达式的值为True或其他与True等价的值时,循环体中的语句块被重复执行,直到条件为False时才退出循环。继续执行后面与while同级别缩进的代码while语句后面的冒号“:”必不可少。循环体可以是单条语句,也可以是多条语句。多条语句的缩进必须对齐一致。
使用while语句时,要注意条件的设置,否则可能会导致无限循环。若发现程序陷入了无限循环,可以按Ctrl+C强制中断程序的执行。3.3.1while循环结构语句while条件表达式:
循环体【例3-10】对用户输入的N个数据求和。3.3.1while循环结构语句12345678N=int(input("请输入求和的数据个数:"))i=1sum=0whilei<=N:y=int(input(f"请输入第{i}个数据:"))sum=sum+yi=i+1print(f"{N}个数的和是:{sum}")>>>请输入求和的数据个数:4请输入第1个数据:1请输入第2个数据:3请输入第3个数据:4请输入第4个数据:104个数的和是:18【例3-11】用户登录模块。用户输入账号和密码进行登录,如果错误,则继续输入直到账号和密码正确为止,显示登录成功!假设账号为“user”,密码为“123456”。3.3.1while循环结构语句1234567Id=input("请输入账号:")Pwd=input("请输入密码:")while(Id!="user")or(Pwd!="123456"):print("账号或密码有误,请重新输入!")Id=input("请重新输入账号:")Pwd=input("请重新输入密码:")print("登录成功")>>>请输入账号:hello请输入密码:111111账号或密码有误,请重新输入!请重新输入账号:user请重新输入密码:111111账号或密码有误,请重新输入!请重新输入账号:hello请重新输入密码:123456账号或密码有误,请重新输入!请重新输入账号:user请重新输入密码:123456登录成功【例3-12】猜数字游戏(2)。对例3-7进行如下改进,若玩家猜错则继续猜,直到猜中为止,统计玩家猜中所用次数。程序中设置的数字为0-9之间的随机数。分析:预设的数字num由随机函数给出,可以通过random库实现;玩家循环猜数字guess直到猜中为止,重复的次数是不确定的,因此采用while循环语句实现,循环条件为“guess!=num”,即“未猜中”。当(guess!=num)为True(未猜中),提示“大了”或“小了”,猜测次数count+1,继续猜数,然后循环判断,直到(guess!=num)为False(猜中),结束循环,输出猜中所用次数count。根据分析可知,该算法是循环结构中嵌套了分支结构。3.3.1while循环结构语句【例3-12】猜数字游戏(2)。对例3-7进行如下改进,若玩家猜错则继续猜,直到猜中为止,统计玩家猜中所用次数。程序中设置的数字为0-9之间的随机数。3.3.1while循环结构语句123456789101112importrandomnum=random.randint(0,9)guess=int(input("请猜一个0~9之间的数字:"))count=1whileguess!=num:ifguess>num:print("很遗憾,你猜大了!")else:print("很遗憾,你猜小了!")guess=int(input("请猜一个0-9之间的数字:"))count+=1print("预测{}次,猜中了!".format(count))>>>
请猜一个0~9之间的数字:5很遗憾,你猜大了!请猜一个0~9之间的数字:2很遗憾,你猜大了!请猜一个0~9之间的数字:1很遗憾,你猜大了!请猜一个0~9之间的数字:0预测4次,猜中了!>>>
请猜一个0~9之间的数字:5很遗憾,你猜小了!请猜一个0~9之间的数字:7预测2次,猜中了!for循环语法形式如下:for语句一般用于实现遍历循环。遍历循环是从序列中逐一提取元素,赋值给循环变量,对于提取的每个元素执行一次循环体,一直到遍历完序列中的每个元素后结束循环。for语句后面的冒号“:”必不可少。遍历结构可以是字符串、文件、列表、元组、字典、集合等,也可以是range()函数。range()函数是Python内置的函数,用于生成一系列连续的整数。其语法格式如下:start表示起始值,可以省略,如果省略则从0开始;stop表示终值,不可省略;step表示步长,即两个数之间的间隔,可以省略,如果省略则表示步长为1。3.3.2for循环结构语句for循环变量in遍历结构:
循环体range(start,stop,step)range()函数的使用range(n)只有一个参数时,n表示终值,起始值默认为0,步长默认为1,生成一个含有0、1、...、n-1的整数序列,取值范围为[0,n)。例如,range(0)是一个空序列,range(4)生成一个整数序列0、1、2、3。range(m,n)有两个参数时,m表示起点,n表示终值,步长默认为1,生成一个含有m、m+1、...、n-1的整数序列,取值范围为[m,n)。例如,range(m,m)是一个空序列,range(4,7)生成一个整数序列4、5、6。range(m,n,s)有三个参数时,m表示起点,n表示终值,s表示步长,生成一个序列含有m、m+s、m+2*s、......,终点n不取。如果m>n且s为负数,则从大往小取值。例如,range(1,7,2)生成一个整数序列1、3、5,range(7,1,-2)生成一个整数序列7、5、3。for循环语句中经常使用range()函数来控制循环次数。3.3.2for循环语句for语句的使用【例3-13】遍历字符串中的字符并输出。【例3-13】还可以使用range()函数实现。3.3.2for循环语句>>>foriinrange(-10,-100,-30):print(i,end="")-10-40-70123str="Hello"foriinrange(len(str)):#range()生成0~4,分别赋值给iprint(str[i])#i作为索引值123str="Hello"foriinstr:print(i)>>>Hello【例3-14】求1-100中所有奇数的和以及偶数的和。3.3.2for循环语句12345678910sum_odd=0#奇数和sum_even=0#偶数和i=1#循环变量初始化whilei<=100:#循环条件
while语句实现ifi%2!=0:sum_odd+=ielse:sum_even+=ii+=1#循环变量修改print("奇数和为:{},偶数和为:{}".format(sum_odd,sum_even))12345678sum_odd=0#奇数和sum_even=0#偶数和foriinrange(1,101):#循环变量初值,循环条件,循环变量修改ifi%2!=0:for语句实现sum_odd+=ielse:sum_even+=iprint("奇数和为:{},偶数和为:{}".format(sum_odd,sum_even))【例3-15】编写一个单行动态刷新进度条。进度百分比从0~100%,用*表示已经完成的部分,用.表示未完成的部分。由于程序执行速度超过人眼的视觉停留时间,为了让用户体验更好,需要调用Python标准时间库time,使用time.sleep(t)函数让程序暂停t秒。要达到单行显示的效果,必须在原位置覆盖输出,使用'\r'转义字符让光标回到行首。3.3.2for循环语句12345678910importtimelength=50#文本进度条的宽度print('='*24+'开始下载'+'='*24)foriinrange(length+1):completed="*"*i#“*”表示已完成
incomplete="."*(length-i)#“.”表示未完成
per=i/50#完成百分比
print("\r{:>4.0%}[{}{}]".format(per,completed,incomplete),end="")time.sleep(0.5)print("\n"+'='*24+'下载完成'+'='*24)该程序必须在控制台中运行方能看到如图所示的运行结果在一个循环结构的循环体内又包含另一个循环结构,这就是循环的嵌套,也称为多重循环。这种嵌套式的结构说明各循环结构之间是“包含”关系,即一个循环结构完全在另一个循环结构里面,不能交叉。通常把位于里面的循环称为“内循环”,外面的循环称为“外循环”。for循环和while循环可以互相嵌套3.3.3循环的嵌套while条件表达式1:#外循环while条件表达式2:#内循环
循环体2
循环体1while条件表达式:#外循环for循环变量in遍历结构:#内循环
循环体2
循环体1for循环变量1in遍历结构1:#外循环for循环变量2in遍历结构2:#内循环
循环体2
循环体1for循环变量in遍历结构:#外循环while条件表达式:#内循环
循环体2
循环体1【例3-16】有如下循环嵌套程序,计算内循环总共循环了多少次。3.3.3循环的嵌套12345foriinrange(1,4):#外循环print("外循环执行第{}次".format(i))forjinrange(1,3):#内循环print("-->内循环执行第{}次".format(j),end="")print()#换行>>>外循环执行第1次-->内循环执行第1次-->内循环执行第2次外循环执行第2次-->内循环执行第1次-->内循环执行第2次外循环执行第3次-->内循环执行第1次-->内循环执行第2次由此可见,循环嵌套的执行过程:外循环的循环体语句执行了3次,内循环的循环体语句执行了2*3=6次。【例3-17】使用循环的嵌套,打印图形。分析:外循环的循环变量i控制行数,范围是1~4内循环的循环变量j控制列数。当i=1,打印1列;当i=2,打印2列当i=3,打印3列......因此行号与列数之间的关系式:j=i,内循环次数为1~i。3.3.3循环的嵌套1234foriinrange(1,5):#输出4行forjinrange(1,i+1):#控制列数print("*",end="")#内循环输出*print()#换行【例3-17】也可用while循环嵌套或单循环实现,请读者自行思考。一般打印图形的程序中采用for循环嵌套更简单、方便,代码模板如下:3.3.3循环的嵌套1234foriinrange(1,__A__):#A处填入(行数+1)forjinrange(1,__B__):#B处填入(列数+1)print("__C__",end="")#C处填入每次输出的内容print()【例3-18】输出由1,2,3,4组成的互不相同且无重复的三位数。分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。采用三重循环实现。3.3.3循环的嵌套12345foriinrange(1,5):#百位forjinrange(1,5):#十位forxinrange(1,5):#个位if(i!=j)and(j!=x)and(x!=i):#去除重复print(str(i)+str(j)+str(x))>>>123124(此处中间结果略)431432【例3-18】输出由1,2,3,4组成的互不相同且无重复的三位数。满足条件的数一共有24个,当输出结果较多时,可以对输出数据进行格式化,比如按每行5个数据输出。优化后的代码如下:3.3.3循环的嵌套1234567891011count=0#增加一个计数器foriinrange(1,5):#百位forjinrange(1,5):#十位forxinrange(1,5):#个位if(i!=j)and(j!=x)and(x!=i):print(str(i)+str(j)+str(x)+"\t",end="")count+=1#找到满足条件的数,计数器+1ifcount%5==0:print()#换行print()print(f"满足条件的数一共有{count}个")>>>123124132134142143213214231234241243312314321324341342412413421423431432满足条件的数一共有24个前面介绍的for和while循环都只有在循环条件不成立时才结束循环。但有时在某种情况下需要提早结束正在执行的循环操作。例如,在ATM机取款时循环输入密码的最大次数为3次,如果3次密码都输入错误则冻结账户;如果密码输入正确就提前结束,进入下一个界面。可以使用break和continue语句实现提前结束循环。break语句:结束本层循环continue语句:结束本次循环break和continue语句在for和while循环中都可以使用,一般会与if语句搭配使用,以达到在特定条件满足时,改变循环执行流程的目的。3.3.4循环中的break和continue语句break语句break语句可以提前结束循环,执行循环语句的后继语句。如果使用循环嵌套,break语句只能跳出它所在层的循环。continue语句continue语句可以提前结束本次循环,跳过当前循环的剩余语句,接着执行下次循环,该语句并不会终止整个循环。3.3.4循环中的break和continue语句while条件表达式1:
语句1if条件表达式2:break
语句2while条件表达式1:
语句1if条件表达式2:continue
语句2break语句与continue语句的应用3.3.4循环中的break和continue语句1234forcharin"Python":ifchar=="h":breakprint(char,end="")1234forcharin"Python":ifchar=="h":continueprint(char,end="")>>>
Pyt>>>
Pyton【例3-19】模拟ATM取款机程序。提示用户输入密码,如果密码正确,显示“恭喜,可以取款了!”;如果密码错误,继续输入,直至连续3次均输错,显示“卡已冻结!”分析:可采用while或for实现。若3次机会用完,循环正常结束;如果密码输入正确,则提前结束循环,用break语句实现。假设初始密码为“123456”.3.3.4循环中的break和continue语句12345678910111213print("欢迎使用ATM!")Pwd=input("请输入密码:")i=1whilei<=2:ifPwd=="123456":breakelse:Pwd=input("密码错误,重新输入:")i+=1ifPwd=="123456":print("恭喜,可以取款了!")else:print("卡已冻结!")>>>欢迎使用ATM!请输入密码:123456恭喜,可以取款了!【例3-20】统计输入字符串的长度,按Q或q结束。分析:循环次数不确定,采用while循环输入字符串并统计该字符串的长度,直到用户输入Q或q则强制结束循环。3.3.4循环中的break和continue语句123456whileTrue:s=input("请输入字符串(按Q或q结束):")ifs.upper()=="Q":breakprint("字符串的长度为:",len(s))print("输入结束")>>>请输入字符串(按Q或q结束):HelloChina!字符串的长度为:12请输入字符串(按Q或q结束):你好,中国!字符串的长度为:6请输入字符串(按Q或q结束):q输入结束【例3-21】输出50以内能被7整除但不能被5整除的所有整数。分析:需要对1~50的每一个整数进行判断,如果满足条件,则输出该数;如果不满足条件,则不输出。3.3.4循环中的break和continue语句1234foriinrange(1,51):if(i%7!=0)or(i%5==0):continueprint(i)>>>71421284249for循环和while循环中都存在一个else扩展用法。else中的语句块只有在循环正常终止时才会被执行,即循环正常遍历完所有元素或由于条件不成立而结束循环,不是因为break语句提前结束循环。continue语句对else没有影响。3.3.5循环中的else子句对比用法3.3.5循环结构中的else语句123456forcharin"Python":ifchar=="h":breakprint(char,end="")else:print("正常结束循环")123456forcharin"Python":ifchar=="h":continueprint(char,end="")else:print("正常结束循环")>>>
Pyt>>>
Pyton正常结束循环turtle库是Python语言中一个非常流行的入门级的图形绘制函数库。turtle即海龟,想象一只小海龟在画布上移动,其爬行的轨迹绘制成了各种图形,如同用户使用笔在纸上绘图。turtle图形绘制的概念诞生于1969年,成功应用于Logo编程语言,由于turtle图形绘制概念十分直观且深受中小学编程初学者的喜爱,逐渐成为Python内置的一个标准库。turtle库使用之前需要在程序开始处使用import进行引用。3.4turtle库的使用3.4turtle库的使用创建画布设置画笔绘制图形图形窗口也称画布。控制台无法绘制图形,因此需要先使用setup()函数创建画布,该函数的语法格式如下:setup(width,height,startx=None,starty=None)功能:设置画布的大小和位置。参数:width:画布的宽度。如果值为整数,表示像素值;如果值为小数,表示画布宽度占电脑屏幕的比例。height:画布的高度。如果值为整数,表示像素值;如果值为小数,表示画布高度占电脑屏幕的比例。startx:画布左侧与电脑屏幕左侧的像素距离。如果值为None,表示画布位于电脑屏幕水平中央。starty:画布顶部与电脑屏幕顶部的像素距离。如果值为None,表示画布位于电脑屏幕垂直中央。(startx,starty):这一坐标表示画布左上角顶点的起始位置,电脑屏幕左上方起始为(0,0)点,默认画布中心即电脑屏幕的中心。3.4.1创建画布图形窗口也称画布。控制台无法绘制图形,因此需要先使用setup()函数创建画布,该函数的语法格式如下:setup(width,height,startx=None,starty=None)setup()函数不是必须的,只有当需要设置画布的大小和位置时才使用。注意:使用turtle库绘制图形后应调用turtle.done()函数声明绘制结束。3.4.1创建画布画笔的设置包括画笔属性和画笔状态画笔属性函数pensize(width)|width()功能:设置画笔的粗细。参数:width指定画笔的宽度,默认时返回当前画笔宽度。pencolor()、fillcolor()功能:设置画笔的颜色或填充颜色。参数:默认时返回当前画笔颜色或当前填充颜色。上面两个函数的参数值有以下几种表示方式。字符串:表示颜色的字符串。如“red”,“yellow”,“green”等。(r,g,b):颜色对应的RGB数值,有整数值和小数值2种。十六进制颜色:如“#FFFFFF”。3.4.2设置画笔画笔的设置包括画笔属性和画笔状态画笔属性函数pencolor()、fillcolor()上面两个函数的参数值有以下几种表示方式。字符串:表示颜色的字符串。如“red”,“yellow”,“green”等。(r,g,b):颜色对应的RGB数值,有整数值和小数值2种。十六进制颜色:如“#FFFFFF”。3.4.2设置画笔颜色字符串RGB整数值RGB小数值十六进制白色white(255,255,255)(1,1,1)#FFFFFF黄色yellow(255,255,0)(1,1,0)#FFFF00蓝色blue(0,0,255)(0,0,1)#0000FF黑色black(0,0,0)(0,0,0)#000000棕色brown(165,42,42)(0.65,0.16,0.16)#A22A2A紫色purple(160,32,240)(0.63,0.13,0.94)#A020F0青色cyan(0,255,255)(0,1,1)#00FFFF画笔的设置包括画笔属性和画笔状态画笔属性函数color(color1,color2)功能:同时设置画笔的颜色和填充颜色。参数:pencolor的值为color1,fillcolor的值为color2。speed(speed)功能:设置画笔的移动速度。参数:speed取值范围为[0,10]的数,值越大,速度越快。值小于0.5或大于10,则速度设置为0(瞬间完成)。3.4.2设置画笔画笔的设置包括画笔属性和画笔状态画笔状态函数penup()|pu()|up()功能:抬起画笔,之后移动画笔不绘制形状。参数:无。pendown()|pd()|down()功能:落下画笔,之后移动画笔将绘制形状。参数:无。shape(name=None)功能:将turtle画笔的形状设置给给定名称的形状,参数为空时表示返回当前turtle的形状。参数:name可取值为classic、turtle、arrow、square、circle和triangle等。3.4.2设置画笔画笔的设置包括画笔属性和画笔状态画笔状态函数当落下画笔时,通过画笔的移动可以在画布上绘制图形。画笔即小海龟,这时它可以向前、向后、向左、向右移动,海龟爬行时在画布上留下的痕迹就是绘制的图形。为了控制图形的输出位置,首先需要了解turtle的坐标体系。turtle坐标体系以画布中心为原点,以原点右侧为x轴正方向,原点上方为y轴正方向。初始时,小海龟位于画布正中央,此处坐标为(0,0),默认方向水平右方。3.4.3绘制图形turtle库中画笔控制函数主要分为移动控制、角度控制、图形绘制和图形填充。移动控制forward(distance)|fd()功能:画笔向前移动。参数:distance表示画笔移动的距离,单位为像素,可正、可负,正数表示前进;负数表示后退。backward(distance)|bk()|back()功能:画笔向后移动。参数:distance可正、可负,正数表示后退;负数表示前进。goto(x,y)|setpos(x,y)功能:画笔移动到画布上指定的位置。参数:x,y分别表示目标位置的横坐标和纵坐标。3.4.3绘制图形turtle库中画笔控制函数主要分为移动控制、角度控制、图形绘制和图形填充。角度控制right(angle)|rt()功能:画笔向右转动,不移动。参数:angle角度值,表示转动的角度,与当前方向有关。可正、可负,正数表示向右转动;负数表示向左转动。left(angle)|lt()功能:画笔向左转动,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国制冷设备行业市场竞争格局、行业政策及需求规模预测报告
- 2025年01月国家粮油信息中心应届毕业生公开招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年01月北京易华录法务审计部公开招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年01月云南昆明市富民县图书馆公开招聘1人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025来煤接卸管理标准
- 第三课 把握世界的规律 课件-高考政治一轮复习统编版必修四哲学与文化
- Excel基础知识培训课件
- 《词根词缀》课件
- 小班语言教案及课件
- 《高中理想的班会》课件
- 护理责任组长续聘竞聘
- 2024-2025学年第二学期教学教研工作安排表
- 2025年山东商务职业学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 2025年个人合法二手车买卖合同(4篇)
- 2025年贵州云上产业服务有限公司招聘笔试参考题库含答案解析
- 2025-2030年中国天然气行业发展分析及发展趋势预测报告
- 2025届贵州省兴义市三年级数学第一学期期末达标检测试题含解析
- 人教版地理七年级下册7.1.2 亚洲的自然环境(课件39张)
- 2025年内蒙古自治区包头市中考试卷数学模拟卷(二)
- 2025年华润燃气招聘笔试参考题库含答案解析
- 推进烟草网格化管理工作
评论
0/150
提交评论