当前位置: 首页 > news >正文

(四)Python控制结构(条件结构)

程序中的语句默认会按照自上而下的顺序逐条执行,但通过一些特定的语句可以更改语句的执行顺序,使之产生跳跃、回溯等现象,进而灵活地控制程序的执行流程。

控制结构是编程中用于控制程序执行流程的语句,程序的三种基本控制结构为:顺序结构、分支结构和循环结构。 

  • 顺序结构:程序按代码书写顺序执行

  • 条件结构:根据条件判断选择执行路径

  • 循环结构:重复执行特定代码块

当做一个任务的时候,总是可以通过三种控制结构完成。比如“做饭”这件事情,我可能按部就班的备菜,这就是顺序结构,我一勺又一勺的舀米直到觉得足够了,这就是循环结构。如果饭熟了我就要盛出来,否则就要等待,这是选择结构。

顺序结构不再过多赘述,就是一行代码执行完就执行下一行啦。程序不会跳几行执行,也不会返回去重复执行。

1.条件结构

条件结构翻译过来,事实上就是语文里面的如果.....那么....否则....那么...这种句式。凡是这种句式都可以写成条件结构的代码。

1.1单分支if语句

if语句是最简单的条件语句,如果.....那么....

该语句由关键字if、判断条件和冒号组成,其语法格式如下:

if 条件表达式:     代码段

这个条件表达式就是由各种各样的运算符(常用的是比较、逻辑、成员运算符),与变量或数据构成的一个条件表达式(比如3>1),这个表达式只有两种结果,要么成立,要么不成立

  • 如果成立,这个表达式会返回布尔值True(真),反之返回False(假)。
  • 当if后面的条件成立或者说返回True的时候,我们就执行if下面的这个代码块
  • 这段代码块看起来和if有一些缩进,是的,有4个空格的缩进,要非常严肃的对待这个缩进,少一个空格我们的代码都会报错。这个缩进让里面的代码看起来像是被if这一语句锁住(包裹)了一样,因为只有满足了条件我们才能打开这个开关。

# 基本if语句
age = 18
if age >= 18:print("您已成年,可以进入")print("欢迎光临!")

注意不要漏掉条件后面的英文冒号。只要不是字符串里面的内容,Python代码中其他符号全都是英文的

那条件不成立怎么办?程序不会永远停在这儿吧,当然不。生活中总会遇到不如意的事,但我们还要向前看,过好我们的人生。所以代码会跳过不合适的这段顺序执行后面的代码啦。

# 基本if语句
age = 17
if age >= 18:    #条件不成立print("您已成年,可以进入")      #不执行print("欢迎光临!")             #不执行
print('--------------')   #这段与if是对齐的,不属于if包裹的代码段,所以顺序执行
print('程序结束')          #顺序执行

现在试着写一个代码吧:使用if语句实现一个考试成绩评估功能的程序:如果考试成绩不低于60分,那么将此成绩评估为考试及格,假设小明的考试成绩为88分,输出小明的成绩评估结果。

别光看啦,动手练练。

score = 88
if score >= 60:                           print("考试及格!")

你看写代码是不是有点像做小学的数学应用题,先把已知条件列出来,再去进行判断、计算等等。

1.2双分支if...else...

if...else...:如果....那么....否则....那么...

这个特别像走到一个二岔路口,让你选择一个路去走(注意是二选一)。

说实话,平时生活中遇到双分支的情况还真不少。比如期末考试成绩大于等于60的话就及格了。否则就要补考了。上代码!!

# if-else语句
score = 85
if score >= 60:print("恭喜,考试及格!")
else:print("很遗憾,需要补考")

我们这里关注一下if后面是跟了条件的(最后提醒一次,别忘了冒号),else后面没跟条件,只跟了冒号。这是为啥呢?因为当这种句式出现的时候else就表示除了if条件里面的情况,其他所有的情况。所以else后面不需要再单独把条件列出来了。

上述代码翻译过来就是,如果分数>=60,考试及格(else下的语句不再执行),其他所有的情况(其实也就是分数<60)都需要补考。

1.3多分支if...elif...else...

又回到考试这个话题了,我们经常在教务网看到自己成绩的一个等级,比如考90-100的为优秀,80-89的为良好,70-79的为中等.......,那我们怎么根据成绩把这个等级打印出来呢?

很明显上述问题以及不是一个简单的二岔路了,可能是四岔路、五岔路甚至更多。这时候就可以用到我们的多分支语句了。

if...elif...else...如果....那么....否则如果....那么....否则....那么...

猜一猜哪个后面要跟条件,哪个不用跟。(看见如果if这俩字了,后面一定需要跟条件)

语法格式:

if 条件表达式1: 代码段1
elif 条件表达式2:代码段2
……
elif 条件表达式n:代码段n
else: 代码段n+1

【实战】根据成绩打印等级

score = 74
if 90 <= score <= 100:print("优秀")
elif 80 <= score <= 89:print("良好")
elif 70 <= score <= 79:print("中等")
elif 60 <= score <= 69:print("及格")
else:print("不及格")

总结一下:

对于三分支及以上的分支:

  • if、elif后面都要带条件,条件与条件都是互斥的
  • elif可以写多个但是后面必须把条件写清楚
  • 可以不写else语句(比如可以把代码最后else:换成elif score>=0:也是可以的),写了就代表除了上述所有情况以外的情况。

1.4嵌套条件

如果说图a是单分支if语句,b图是if else语句,c图是多分支结构,那么嵌套条件就是下面这种情况

也就是说需要先满足1的条件,确定走左侧主路后,再继续判断条件2,进一步确定走哪条支路

【实战】计算当月天数

一年有12个月份,每个月份的总天数具有一定的规律,1、3、5、7、8、10、12月份有31天;4、6、9、11月份有30天;2月份的情况稍微复杂一些,闰年的2月份有29天,平年的2月份有28天。

year = 2020   
month = 2       
#成员运算符in,可以判断某个变量的值或数据在不在列表的元素里
if month in  [1, 3, 5, 7, 8, 10, 12]: print(f"{year}年{month}月有 31 天")
elif month in [4, 6, 9, 11]:   print(f"{year}年{month}月有 30 天")
elif month == 2:        if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:  print(f"{year}年{month}月有 29 天")else:print(f"{year}年{month}月有 28 天")

http://www.dtcms.com/a/363911.html

相关文章:

  • MMORPG 游戏战斗系统架构
  • 2025互联网大厂Java后端面试:3-5年经验必问核心考点解析
  • 机器学习辅助的Backtrader资产配置优化策略
  • 【vue2】vue2.7x的项目中集成tailwind.css真的不要太香
  • Python 类的方法类型详解
  • 企业如何实现零工用工零风险?盖雅全自动化合规管控
  • 望获实时Linux:亚微秒级系统响应的实现方法
  • Qt中字节对齐问题和数据的序列化和反序列化的问题
  • springboot2.x集成swagger api(springdoc-openapi-ui)
  • 开源企业级快速开发平台(JeecgBoot)
  • python - ( js )object对象、json对象、字符串对象的相关方法、数组对象的相关方法、BOM对象、BOM模型中 Navigator 对象
  • 人工智能与强化学习:使用OpenAI Gym进行项目开发
  • Scikit-learn从入门到实践:Scikit-learn入门与实践
  • Scikit-learn从入门到实践:Scikit-learn入门-安装与基础操作
  • SQLynx VS DBeaver:数据库管理工具的两种思路
  • 京东科技大模型RAG岗三轮面试全复盘:从八股到开放题的通关指南
  • 通信中的双工器模型是什么?
  • 《水浒智慧》(第一部:梁山头领那些事儿)读书笔记
  • ARM编译器生成的AXF文件解析
  • 在Linux 2.4.x内核中,如何从一个page找到所有映射该页面的VMA?反向映射可以带来哪些便利?
  • Vue基础知识-localStorage 与 sessionStorage
  • Linux 文本处理三大利器:命令小工具和sed
  • leetcode-每日一题-3025. 人员站位的方案数 I-C语言
  • Web 开发 17
  • Mysql数据库基础(上)
  • MySQL-Undo Log(回滚日志)
  • 【Python3教程】Python3高级篇之多线程
  • 通用的二叉数迭代方法
  • 国内真实的交换机、路由器和分组情况
  • 容器日志加密传输在海外云服务器环境的配置标准与实施指南