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;之前很多研究致力于开发更…

探索 Flutter 的 Provider:介绍与用法

引言 在 Flutter 应用开发中&#xff0c;状态管理始终是一个核心话题。随着 Flutter 的不断发展&#xff0c;各种状态管理方案应运而生。Provider&#xff0c;作为一个轻量级且高效的状态管理库&#xff0c;在社区中获得了广泛的认可和使用。本文将深入探讨 Provider 的最新特…

自动化创建ETX用户帐号

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

SpringBoot整合Mybatis框架实现多数据源的静态数据源和动态数据源配置落地

Mybatis是什么 Mybatis是一个基于JDBC实现的,支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架,去掉了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。 Mybatis主要思想是将程序中大量的 SQL 语句剥离出来,配置在配置文件中,以实现 SQL 的灵活配置。…

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

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

代码随想录算法训练营第16天 |(二叉树3 104.二叉树的最大深度 559. N叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

二叉树part03 104.二叉树的最大深度 &#xff08;优先掌握递归&#xff09;&#xff08;昨天用层序迭代做过解题思路 559. N叉树的最大深度111.二叉树的最小深度 &#xff08;优先掌握递归&#xff09;&#xff08;昨天用层序迭代做过解题思路 222.完全二叉树的节点个数&#x…

人工智能在银行支付领域的应用场景与发展建议

人工智能在银行支付领域的应用场景与发展建议 随着科技的不断进步和金融行业的发展&#xff0c;人工智能&#xff08;AI&#xff09;在银行支付领域的应用正日益广泛。AI技术可以通过数据分析和智能算法&#xff0c;提升支付系统的效率、安全性和用户体验。以下是人工智能在银…

易经占卜中的人工智能思想:先随机有一个答案不管正确与否 等后期积累经验再完善,答案就会越来越准确好用

《易经》&#xff1a;研究变化&#xff0c;平衡&#xff0c;对不确定性、复杂性处理、动态适应以及系统性决策 《易经》&#xff08;又称《周易》&#xff09;是中国古代的一部哲学经典&#xff0c;主要讨论的是宇宙和生活中的变化规律。它不仅仅是一部占卜书籍&#xff0c;更…

【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;影响演示效…

21.正则表达式

正则表达式 文章目录 正则表达式1. 正则表达式分类2. 基本正则表达式3. 扩展正则表达式 1. 正则表达式分类 正则表达式&#xff1a;REGEXP&#xff0c;REGular EXPression。 正则表达式分为两类&#xff1a; Basic REGEXP&#xff08;基本正则表达式&#xff09;Extended REG…

【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 &…