Python流程控制语句

news2025/2/23 5:59:39

目录

一、分支结构

(一)单分支语句

(二)双分支语句

(三)多分支语句

(四)嵌套的分支语句

二、循环结构

循环结构概述

(一)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+=1
        num=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+=1
        num=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))
            break
        else:
            pass
    if i==n-1: 
        print("{}是素数".format(n))

方法二:

#一种通过修改循环控制条件而避免使用break的写法
n=int(input("请输入一个整数(>1):"))
if n==2:
    print("{}是素数".format(n))
else:
    i=2
    while i<n and n%i!=0:
        i+=1
    if 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("程序结束!")
        break
    elif m.isalpha():
        print("你输入的不是大于1的整数,请正确输入!")
        continue
    n=int(m)
    k=int(math.sqrt(n))
    for i in range(2,k+1):    #可验证次循环对2也适用
        if n % i ==0:
            print("{}不是素数".format(n))
            break
    else:
        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.coloradmin.cn/o/1373848.html

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

相关文章

模板 BIEE(三)如何直接查看表示层列获取的sql语句

举例 想查看如下数据 SELECT 0 s_0, “Financials - AR Overview”.“Facts - AR Turnover”.“Days Sales Outstanding” s_1 FROM “Financials - AR Overview” web查看结果 日志内容如何查看请见《模板 BIEE&#xff08;二&#xff09;》 如下是不勾选高速缓存的结果&am…

如何保护linux服务器远程使用的安全

服务器安全是一个非常敏感的问题&#xff0c;因服务器远程入侵导致数据丢失的安全问题频频出现&#xff0c;一旦服务器入侵就会对个人和企业造成巨大的损失。因此&#xff0c;在日常使用服务器的时候&#xff0c;我们需要采取一些安全措施来保障服务器的安全性。 目前服务器系…

尝试添加服务器中正在运行的docker容器时报错:当前用户没有运行“docker”的权限

尝试添加服务器中正在运行的docker容器时报错&#xff1a;当前用户没有运行“docker”的权限 环境 1&#xff0c;通过vscode ssh到服务器的 2&#xff0c;服务器端有一个contianer&#xff0c;但是无法通过vscode的Dev contianer组件将服务器中正在运行的contianer添加过来 3…

适合游泳的骨传导耳机,推荐四款高质量游泳耳机!

游泳是一项全身性的运动&#xff0c;对于锻炼身体和塑形都很有帮助&#xff0c;但是游泳的时候往往会因为水的阻力而感到动作笨拙&#xff0c;同时也会感到枯燥无味。而一款好的游泳耳机则能够让你在游泳的过程中享受音乐或者其他的音频内容&#xff0c;增加游泳的趣味性&#…

Jenkins基础篇--添加用户和用户权限设置

添加用户 点击系统管理&#xff0c;点击管理用户&#xff0c;然后点击创建用户&#xff08;Create User&#xff09; 用户权限管理 点击系统管理&#xff0c;点击全局安全配置&#xff0c;找到授权策略&#xff0c;选择安全矩阵&#xff0c;配置好用户权限后&#xff0c;点击…

CROS跨域漏洞复现分析

复现环境&#xff1a;bp官方靶场Lab: CORS vulnerability with basic origin reflection | Web Security Academy 复现过程&#xff1a; 首先以普通用户的身份登录系统&#xff1a; 1、靶场环境点击access the lab 和给定账号wiener:peter 2、使用wiener:peter登录系统&…

Taro+vue3 实现选座位 功能 以及座位显示

1.类似选座位那种功能 我的功能座位 不是html元素 而是 座位图片 都是图片 const onConfirm () > {// const area_arr selectedSeat.value.map((item) > {// return item.areaId;// });// const abc isRepeat(area_arr);// if (!abc) {// Taro.showToast({//…

SpringBoot+Vue药品ADR不良反应智能监测系统源码

药品不良反应&#xff08;Adverse Drug Reaction&#xff0c;ADR&#xff09;是指合格药品在正常用法用量下出现的与用药目的无关的有害反应&#xff0c;不包括超说明书用药、药品质量问题等导致的不良后果。 ADR智能监测系统开发环境 ❀技术架构&#xff1a;B/S ❀开发语言&…

Docker部署Homepage个人引导页

个人名片&#xff1a; 对人间的热爱与歌颂&#xff0c;可抵岁月冗长&#x1f31e; 个人主页&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff1a;念舒_C.ying 个人博客&#x1f30f; &#xff1a;念舒_C.ying Homepage | 主页 1. 安装环境2. Docker部署 原作者&#xff1a;無…

spring boot + mybatis + websocket + js实战

项目技术&#xff1a;spring boot mybatis websocket js 需求背景&#xff1a;当添加一个女孩时&#xff0c;页面的socket收到消息&#xff0c;打印最新的所有女生list&#xff0c;这样可以进一步在react/vue前端框架下&#xff0c;实现当A用户新增了某业务数据后&#xff…

Kafka 除了用作消息队列还能干吗?

Kafka 除了用作消息队列还能干吗&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 Kafka 最初是为大规模处理日志而构建的。它可以保留消息直到过期&#xff0c;并让各个消费者按照自己的节奏提取消息。 与其之前的竞品不…

安谋科技“周易”NPU与飞桨完成II级兼容性测试,助力实现多样化AI部署

近日&#xff0c;安谋科技&#xff08;中国&#xff09;有限公司&#xff08;以下简称“安谋科技”&#xff09;“周易”NPU系列IP与飞桨已完成II级兼容性测试&#xff0c;测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是安谋科技加入“硬件生态共创…

【一周年创作总结】人生是远方的无尽旷野呀

那一眼瞥见的伟大的灵魂&#xff0c;却似模糊的你和我 文章目录 &#x1f4d2;各个阶段的experience&#x1f50e;大一寒假&#x1f50e;大一下学期&#x1f50e;大一暑假&#x1f50e;大二上学期&#xff08;现在&#xff09; &#x1f354;相遇CSDN&#x1f6f8;自媒体&#…

仓储10、20代电子标签接口文档-V2.0

标签注册 仓储10代注册 右下角左下角组合按键触发注册 注册成功&#xff1a;右上角绿灯变红灯&#xff0c;并显示信号强度的数值 仓储20代注册 右下角左下角组合按键触发注册 注册成功&#xff1a;右上角绿灯变红灯&#xff0c;并显示信号强度的数值 查询电子标签信息接口…

element ui el-table展示列表,结合分页+过滤功能

vueelement-ui实现的列表展示&#xff0c;列表分页&#xff0c;列表筛选功能 1&#xff0c;分页器 el-table模块下面是分页器代码 <el-pagination></el-pagination> <el-table></el-table> <!-- 分页器 --><div class"block" st…

MySQL 从零开始:03 基本入门语句

文章目录 1、连接数据库1.1 命令提示符登陆1.2 MySQL 8.0 Command Line Client 登陆1.3 MySQL Workbench 登陆 2、基本语句2.1 查看所有库2.2 创建库2.3 删除库2.4 选择数据库2.5 查看表2.6 创建表2.7 删除表2.8 改表名2.9 清空表 在上一小节中介绍了 MySQL 数据库的安装&#…

Axure rp 是什么软件?大厂设计师为你解答

Axure rp 是一个快速的原型设计工具&#xff0c;可以制作高度互动的 HTML 原型。设计者不仅可以使用 Axure 绘制线框图和原型&#xff0c;还可以在 Axure rp 中完成一系列的用户体验设计。本文将根据用户体验设计者的真实经验&#xff0c;从用户体验设计者的实际工作中触发 Axu…

【期末不挂科-考前速过系列P11】单片机[接口与总线]——经典例题盘点(带图解析)(第十一章:15题速过串行口的工作原理和应用)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏…

计算机毕业设计 基于Java的流浪动物救助平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

解析 ODPS SQL 任务优化方法原理

一文解析 ODPS SQL 任务优化方法原理 本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。 一、背景 使用ODPS SQL进行离线数据…