Python流程控制语句

目录

一、分支结构

(一)单分支语句

(二)双分支语句

(三)多分支语句

(四)嵌套的分支语句

二、循环结构

循环结构概述

(一)for循环

(二)while循环

(三)break、continue语句与else子句

三、异常处理

(一)try-except-else-finally结构

(二)异常处理示例


一、分支结构

(一)单分支语句

只有 if 子句,但注意分支条件后的冒号(:)
如果分支只有一条语句,则可以写在一行上;
如果分支有多条语句,需要写成缩进的语句块。

score=90
if score>=90: print("优秀!")if score>=90:print("优秀!")print("不要骄傲!")

(二)双分支语句

使用 if-else 子句,两个子句的语句或语句块都要采用缩进写法。

score=70
if score>=60:print("通过测试")
else:print("未通过测试")

双分支下的赋值语句存在简化写法:

level="通过测试" if score>=60 else "未通过测试"
print(level)

(三)多分支语句

if-elif-else 子句:每个子句中的语句或语句块都要采用缩进写法。
必须有一个if子句,可以根据需要有多个elif子句;
最多可以有一个else子句,也可以没有else子句;
满足哪个分支的条件就执行哪个,哪个都不满足则所有分支都不执行。

score=85
if score>=90:print("优秀")
elif score>=80:print("良好")
elif score>=70:print("中等")
elif score>=60:print("及格")
else:print("不及格")

没有else分支语句:

score=85
if score>=90:print("优秀")
elif score>=80:print("良好")
elif score>=70:print("中等")
elif score>=60:print("及格")
elif score<60:print("不及格")

(四)嵌套的分支语句

可以是if-else结构之间的嵌套,也可以是if-else结构中嵌套if-elif-else结构,要注意:缩进效果应该与嵌套关系保持对应。
为了程序可读性,多分支更建议使用if-elif-else结构,少嵌套!

score=75
if score>=60:if score>=70:if score>=80:if score>=90:print("优秀")else:print("良好")else:print("中等")else:print("及格")
else:print("不及格")

score=75
if score>=60:if score>=90:print("优秀")elif score>=80:print("良好")elif score>=70:print("中等")else:print("及格")
else:print("不及格")

二、循环结构

循环结构概述

当循环的最大次数已知时——for循环更简单
(1)所有情况下都可以使用while循环, for循环是while循环的特例,Python中没有直接可用的直到型循环(可以用while循环间接实现类似于C语言的do-while结构一类的直到型循环)
(2)循环体要写成语句块的缩进形式
(3)允许循环嵌套
(4)可以使用break和continue语句改变循环的执行流程
(5)else子句用于在正常退出循环后做进一步的处理

(一)for循环

一般形式:

for 当前元素 in 可迭代对象:
        循环体语句或语句组

表示对可迭代对象重复以下过程:按序取出一个元素,在循环体中处理该元素…直到全部元素都被取出并处理结束为止。
可迭代对象包括:字符串、列表、元组、字典、集合等容器类对象,下面分别是字符串和列表的例子:

for ch in 'hello':print("当前字符是{}".format(ch))

sum=0
for i in [1,3,5,7,9]:sum+=i
print(sum)

常用于for循环的range函数:

目前可近似认为range函数用于产生一个整数序列,其一般形式:为range(start,stop,step),三个参数分别代表初值、终值和步长,并且产生的序列中不包含终值,例如:

ls1=range(1,5,1)
type(ls1)
ls2=list(ls1)
ls2

说明:①range函数产生的不是一个列表对象,而是一个惰性可迭代对象,需要使用list()转换成列表对象才能查看其元素。
②近似看成是一个左闭右开的区间,其中不包含终值。
③当初值省略时,表示初值为0;当步长省略时,表示步长是1。
④当初值小于终值时,步长必须为正;当初值大于终值时,步长必须为负,这样序列中的元素个
数=abs(abs(终值-初值)//步长),否则序列为空!

list(range(5))

list(range(5,1,-1))

list(range(5,1,1))

(二)while循环

当循环控制条件为真时执行循环体;
常用于无法事先确定循环次数的场合,例如交互式输入中。

1、没有哨兵的while循环

#没有使用哨兵循环
from random import randint
num=randint(1,100)    #要猜的随机数
count=0    #统计猜中次数
contin='y'    #是否继续猜测的标志变量
while contin=='y':guess=int(input("请输入你猜的数字:"))if guess==num:print("恭喜猜中了")count+=1num=randint(1,100)elif guess>num:print("猜大了")else:print("猜小了")contin=input("要继续吗(y/n)? ")
print("游戏结束,你猜中了{}次".format(count))

说明:①本例使用while循环模拟了C语言中的do-while循环,因为循环体至少执行了一次。
②存在的问题:用户既要输入y/n,又要输入数字,考虑使用哨兵循环进行简化。

2、带有哨兵的while循环

哨兵是在循环算法中用来标志终止条件的值(本例中产生的随机数不可能是0,因此把0作为了哨兵值!)

#使用哨兵循环
from random import randint
num=randint(1,100)    #要猜的随机数
guess=int(input("请输入你猜的数字(输入0退出):"))
count=0    #统计猜中次数
while guess:if guess==num:print("恭喜猜中了")count+=1num=randint(1,100)elif guess>num:print("猜大了")else:print("猜小了")guess=int(input("请输入你猜的数字(输入0退出):"))
print("游戏结束,你猜中了{}次".format(count))

说明:①要把正常时不可能取到的值作为哨兵值。
②一定要在循环开始前对哨兵变量进行初始化,初始值需要根据情况而定,例如在处理字符串的问题中可以是空字符串。
③循环体中一定有改变哨兵变量的语句,否则就会死循环。
④本例属于标准while循环,因为循环体可能一次都不执行。

(三)break、continue语句与else子句

退出循环结构有两种方法:一种是从循环入口处因不满足循环控制条件而正常退出;另一种就是使用break语句在循环体中提前退出。

break语句会提前结束本层循环。注意:如果有循环嵌套时,并不提前结束外层循环。

continue语句是提前结束本次循环(即跳过continue语句后的其他语句)而马上开始本层的下一次循环(例如数7游戏:7的倍数以及含有7的数字都不能读出/输出)。

else子句只在有break语句出现在循环体的情况下才有意义,用于当循环正常退出时的处理,而当经由break提前退出时则不会执行else子句。

使用else子句可以简化退出循环后的条件判断和处理,它在for循环和while循环中都可以应用。

判断素数的两种写法:

方法一:

n=int(input("请输入一个整数(>1):"))
if n==2:print("{}是素数".format(n))
else:for i in range(2,n):if n%i==0:print("{}不是素数".format(n))breakelse:passif i==n-1: print("{}是素数".format(n))

方法二:

#一种通过修改循环控制条件而避免使用break的写法
n=int(input("请输入一个整数(>1):"))
if n==2:print("{}是素数".format(n))
else:i=2while i<n and n%i!=0:i+=1if i<n:print("{}不是素数".format(n))else:print("{}是素数".format(n))

说明:①n等于2需要单独处理,否则因为range(2,2)为空,会出错。
②循环体内的else子句可以不写,这里是为展示pass空语句的作用(起到占位效果,让代码结构完整,没有任何实际作用,可以在分支、循环等多种结构中使用)。
③for循环结束后的if条件用于判断循环是正常结束还是提前结束,可以考虑用else子句来替代。
④通过把break语句执行的条件适当修改后放入循环控制条件中,可以取消break语句的使用。

判断素数改进算法:

为提高效率,利用了平方根判别法并允许多次判别
注意break、continue语句以及for循环的else子句在本例的使用
注意永真的while循环的使用

import math
while True:m=input("请输入一个大于1的整数(按'q'退出):")if m=='q':print("程序结束!")breakelif m.isalpha():print("你输入的不是大于1的整数,请正确输入!")continuen=int(m)k=int(math.sqrt(n))for i in range(2,k+1):    #可验证次循环对2也适用if n % i ==0:print("{}不是素数".format(n))breakelse:print("{}是素数".format(n))

三、异常处理

运行期检测到的错误被称为异常

(一)try-except-else-finally结构

以操作文件为例:

try:
        打开文件
except:
        提示打开文件出错
else:
        正常操作文件
finally:
        关闭文件

(二)异常处理示例

没有异常处理时的情形,程序报错无法继续运行。
有异常处理时的情形,程序可以继续运行,异常处理提高了程序健壮性。

#异常处理示例
m=input("请输入被除数(按'q'退出):")
n=input("请输入除数(按'q'退出):")
while m!='q'and n!='q':m=int(m)n=int(n)try:print("{}/{}={:.2f}".format(m,n,m/n))except ZeroDivisionError:print("除数n不能为0,请重新输入除数")else:m=input("请输入被除数(按'q'退出):")finally:n=input("请输入除数(按'q'退出):")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品经理须知 | 电商API接口接入知识小结

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

【网络】网络层ICMP协议

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

数据结构02附录02:哈希表[C++]

图源&#xff1a;文心一言 上机题目练习整理~&#x1f95d;&#x1f95d; 本篇作为线性表的代码补充&#xff0c;每道题提供了优解和暴力解算法&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;在力扣新手村刷题的记录&#xff0c;优解是Bard老师提…

目标检测-One Stage-EfficientDet

文章目录 前言一、EfficientNetEfficientNet-B0 baselineMBConv 参数优化EfficientNet B0-B7 参数 二、EfficientDetBiFPN复合缩放方法 总结 前言 EfficientDet是google在2019年11月发表的一个目标检测算法系列&#xff0c;其提出的背景是&#xff1a;之前很多研究致力于开发更…

自动化创建ETX用户帐号

在芯片设计行业&#xff0c;ETX是常见的远程访问环境。用户在通过ETX访问远程环境前必须首先加入ETX系统&#xff0c;然后通过profile分配相关的环境的访问权限。 通常这些操作在ETX WEB页面手工操作&#xff0c;如果我们期望实现用户帐号注册全自动化&#xff0c;就需要将以上…

一文搞懂Git版本工具常用的操作命令

简述 Git是一个分布式的版本控制工具,其在使用上要比SVN等版本控制工具稍显复杂。为了便于理解,本文通过图文方式详细介绍Git的使用,以便于快速掌握Git。Git涉及的主要概念和命令如图所示。理解上述概念后,基本可以使用Git完成日常开发工作。关于Git的介绍以及常用命令在之前的…

【YOLO系列】 YOLO V4之正则化DropBlock

资料下载 论文下载&#xff1a;DropBlock: A regularization method for convolutional networks 一、简介 DropBlock是一种正则化技术&#xff0c;用于防止深度神经网络的过拟合。它通过在训练过程中随机丢弃网络中的一部分特征图&#xff0c;来增加模型的泛化能力。 文章中分…

在微信公众号上怎么实现拼团功能

拼团魅力&#xff1a;微信公众号上的拼团功能如何助力营销 一、引言 在这个数字化时代&#xff0c;微信公众号成为了企业与消费者互动的重要平台。而拼团功能作为微信营销的一大利器&#xff0c;为企业带来了巨大的商业价值。那么&#xff0c;如何在微信公众号上实现拼团功能&…

gseaplot3修改一下clusterProfiler默认绘图函数

直接使用clusterProfiler::gseaplot2绘图会出现下边的结果&#xff0c;导致四周显示不全&#xff0c;线的粗细也没办法调整&#xff0c;因为返回的是一个aplot包中的gglist对象&#xff0c;没太多研究。 p1 <- clusterProfiler::gseaplot2(gsea_result, gsea_result$ID, pv…

JavaScript初见

书写位置 和css差不多 行内script标签内script所引的js文件 输入输出语句 输入 prompt();输出 console();// 控制台显示 alert();//弹出框 alert(字符串 变量 ’\n‘);变量 声明 var neme 原神; var tele 1;不用管类型&#xff0c;真不错啊 **js中变量的声明不需…

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

记录一次应用服务响应慢问题排查过程

3个自建系统使用了一个统一的外部系统接入服务&#xff0c;该服务主要是统一处理外部系统对接&#xff0c;处理掉数据鉴权等问题&#xff0c;提供内部鉴权接口给自己的服务使用。类似一个对接网关。 问题背景 研发反应&#xff0c;后端接口请求时快时慢&#xff0c;影响演示效…

【MATLAB】快速绘制曲线图的形状,粗细,颜色

目录 MATLAB 快速绘制曲线图的形状&#xff0c;粗细&#xff0c;颜色 1.通过改变R-G-B 的值改变线条的颜色&#xff1a;2.通过改变c∈[1,∞)的值改变线条的粗细&#xff1a;3.线条形状&#xff0c;粗细&#xff0c;颜色选择&#xff1a;4.Matlab中画图实现案例&#xff1a; MA…

js封装根据年月日获取星座效果demo(整理)

//根据年月日获取星座 function getZodiacSign(dateString) {// 用法:const dateStr 2024-01-11;// const zodiacSign getZodiacSign(dateStr);const date new Date(dateString);const month date.getMonth() 1;const day date.getDate();if ((month 1 && day &…

Python教程39:使用turtle画美国队长盾牌

---------------turtle源码集合--------------- Python教程36&#xff1a;海龟画图turtle写春联 Python源码35&#xff1a;海龟画图turtle画中国结 Python源码31&#xff1a;海龟画图turtle画七道彩虹 Python源码30&#xff1a;海龟画图turtle画紫色的小熊 Python源码29&a…

【uview2.0】Keyboard 键盘 与 CodeInput 验证码输入 结合使用 uview

https://www.uviewui.com/components/codeInput.html &#xff08;CodeInput 验证码输入&#xff09; https://www.uviewui.com/components/keyboard.html &#xff08;Keyboard 键盘&#xff09; <u-keyboard mode"number" :dotDisabled"true" :show&q…

一体式气象站的优点是什么?带大家了解一下

一体式气象站是一款高度集成、低功耗、可快速安装、便于野外监测使用的高精度自动气象观测设备。 一体式气象站的优点主要体现在以下几个方面&#xff1a; 集成度高&#xff1a;一体式气象站集成了多种气象传感器、数据处理单元、显示单元和通讯模块等&#xff0c;可以同时监…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…

2024年【熔化焊接与热切割】考试内容及熔化焊接与热切割免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试内容是安全生产模拟考试一点通总题库中生成的一套熔化焊接与热切割免费试题&#xff0c;安全生产模拟考试一点通上熔化焊接与热切割作业手机同步练习。2024年【熔化焊接与热切割】考试内容及熔化…

ceph、gluster、longhorn选型对比

Ceph Ceph是一个分布式的存储系统&#xff0c;可以在统一的系统中提供唯一的对象、块和文件存储。 名词解释&#xff1a; RADOS&#xff1a; 由自我修复、自我管理、智能存储节点组成的可靠、自主、分布式对象存储LIBRADOS&#xff1a; 一个允许应用程序直接访问 RADO 的库&…