文章目录
- 1.流程控制的概念
- 2.Python中代码块的相关注意事项
- 3.if流程控制语句的语法格式
- 4.if流程控制的简单使用
- 4.1.单分支的if流程控制语句
- 4.2.加else语句的if流程控制
- 4.3.多分支的if流程控制
- 4.4.多分支if代码优化
- 5.对象的布尔值
- 6.if-else条件表达式
- 6.1.if-else条件表达式语法
- 6.2.单if-else条件表达式案例
- 6.3.嵌套if-else条件表达式案例
- 7.if not语句
1.流程控制的概念
在1996年,计算机科学家们证明了一个事实:任何简单或者复杂的算法都是由顺序结构、选择结构、循环结构这三种基本结构组合而成的。流程控制就对应其中的选择结构。
- 顺序结构:程序从上到下顺序执行代码,中间没有任何判断和跳转,直到程序的结束,任何语言的代码都是从上到下按照顺序执行的。
- 选择结构:程序根据条件判断结果返回的布尔值,从而选择性的执行部分代码,实现流程控制。
- 循环结构:程序根据循环条件反复执行某段代码,直到不满足循环条件为止。
顺序结构无可厚非,默认情况都是从上往下按照代码的顺序执行。
选择结构就是流程控制、条件判断相关的概念,一个程序肯定会有偶流程控制,例如根据业务的状态、用户的操作,选择性的执行部分代码,从而达到某种效果。
如下图一个简单的流程控制:首先选择要操作的服务器,然后输入服务器的账号密码,紧接着就会有一个流程控制,判断输入的账号密码是否正确,如果条件判断的结果为True,那么就登陆到服务器的控制台,否则结果为False,那么就提示拒绝登陆,还有第二个流程控制,判断是否要关闭控制台,如果条件判断的布尔值为False则进行其他的操作,如果为True就断开连接。
2.Python中代码块的相关注意事项
在编程语言中,代码块相当于一组语句的集合,代码块的开始和结束都是通过某个特殊字符指定,例如以{开始,以}结束。
在Python中,代码块的开始用冒号表示,在代码块中的所有行,都要缩进相同数量的空格,通常是缩进4个空格,如果不索引就会抛出异常,提示语法错误,和Yaml文件格式一样,该缩进的时候必须索引,没必要索引的时候不要添加。
3.if流程控制语句的语法格式
1)单分支的if流程控制语法结构
单分支的if流程控制是最简单的流程控制,单分支指的是只有一个条件判断。语法结构如下:
if 条件判断:
条件执行体
单分支的if语句执行流程:如果条件判断的结果为True,那么就执行条件执行体中的代码块,执行完成后继续执行if语句后面的代码,如果条件判断的结果为False,那么跳过条件执行体中的代码,直接执行if语句后面的代码。
2)单分支if语句+else的语法结构
else语句相当于if的从句,因为else语句不是一个独立的整体,是if语句中的一部分,else语句表示,当流程控制中没有一个分支满足条件,那么就执行else语句对应的代码块,else语句会放在if语句中的最后部分。语法格式如下:
if 条件判断:
条件执行体1
else:
条件执行体2
单分支if语句+else的执行流程:如果条件判断的结果为True,那么就执行条件执行体1中的代码,执行完成后继续执行if语句后面的代码,此时就会跳过else语句对应的代码块,如果条件判断的结果为Flase,那么就执行else语句中的代码块,执行完成后继续执行if语句后面的代码。
3)多分支的if流程控制语法结构
如果if语句存在两个以上的条件判断分支,那么就称为多分支的if流程控制结构,多分支可以在if语句中添加多个elif语句,elif语句是else if的简写。语法格式如下:
if 条件判断1:
条件执行体1
elif 条件判断2:
条件执行体2
elif 条件判断3:
条件执行体3
......
elif 条件判断n:
条件执行体n
else:
条件执行体n
多分支的if流程控制执行流程:
- 首先从条件判断1处开始判断,如果条件判断1的结果为True,那么就执行条件执行体1中的代码,执行完成后继续执行if语句后面的代码,此时if语句中后面的流程判断分支elif的流程控制将不会被执行,相当于已经满足条件了,已经执行了相关代码,无需再进行判断了。
- 如果条件判断1的结果为False,那么就看elif 条件判断2的结果是否为True,如果为True,那么就执行条件执行体2中的代码。
- 一层一层判断,只要找到满足条件的分支,然后执行其对于的代码块。
- 如果没有满足条件的if、elif分支,那么就执行else语句对应的代码块。
执行完代码块中的代码后,相当于判断结束了,执行if语句之后的其他代码。
只要返回值是布尔类型:True或者False,都可以进行流程控制。
4.if流程控制的简单使用
下面对if流程控制语句先进行简单的使用,后续我会写一些需求案例,我们再深入学习if流程控制。
4.1.单分支的if流程控制语句
首先完成一个简单的if流程控制语句。
需求:判断一篇文章的质量分数,如果质量分高达95,则允许这篇文章上热榜。
article_quality = 97
#如果article_quality的值大于95,则输出文章质量的分数,然后提示其允许上热榜
if article_quality > 95:
#返回的内容通过格式化字符串输出
aq_format = '这篇文章的质量分是:{}, 允许上热榜'
print(aq_format.format(article_quality))
#输出结果:这篇文章的质量分是:97, 允许上热榜
当文章的质量分大于95时,则会返回该文章的质量分,然后提示允许上热榜。
4.2.加else语句的if流程控制
在流程控制语句中增加else从句,当条件不满足流程控制中的任何一个条件时,就执行else代码块中的代码。
需求:判断一篇文章的质量分数,如果质量分高达95,打印该文章的质量分,并提示允许这篇文章上热榜,如果不满足条件也输出这篇文章的质量分,并提示该文章的质量分与标准质量相差多少。
article_quality = 92
#如果质量分大于95,则输出文章的质量分,并提示允许上热榜
if article_quality > 95:
#打印的内容由格式化规则存储,传递实际的分数到格式化字符串,最终打印
aq_format = '这篇文章的质量分是:{}, 允许上热榜'
print(aq_format.format(article_quality))
#如果质量分不满足条件,则输出文章的质量分,并计算该文章的质量分与标准质量分的差值,最终一并提示给用户
else:
aq_format = '这篇文章的质量分是:{0}, 与标准分相差{1}, 再接再厉哟'
#标准质量分为95,用95减去文章的质量分,得到差值
diff = 95 - article_quality
#打印的内容都在格式化规则内,利用format方法传递实际值,最终返回给用户
print(aq_format.format(article_quality, diff))
指定这篇文章的质量分为92,然后由if流程控制进行判断,当大于95时,返回该文章的质量分,并提示允许上热榜,否则也返回出该文章的质量分,并计算出与标准分的差值,一并返回给用户。
4.3.多分支的if流程控制
多分支的if流程控制指的是if语句中存在多个判断条件,从上往下依次进行判断,当满足其中一项时,不再执行后面的判断。
需求:
质量分由用户手动输入,不写死。
当文章质量分为50以下,提示文章质量不佳,可能会影响推荐。
当文章质量分为60~80之间,提示文章质量还有待提升,继续加油。
当文章质量分为80~90之间,提示文章质量以及跨进一大步了,持续努力。
当文章质量分为90以上,提示文章质量很好。
否则就提示参数不合法
思路分析:
- 质量分要求由用户手动输入,不能写死,那么可以通过input()函数,接受一个标准输入的数据。
- 需要考虑input()函数接收的数据是否满足我们的场景,我们是要判断质量分数的大小的,input函数接收的数据是字符串类型,因此还需要判断input()函数接收的字符串中是否全是数字,可以通过isdigit()方法进行判断。
- 当input函数传入字符串全部都是数字,那么就将这个字符串通过int()函数转换成数字类型,然后再赋值给变量,否则是不能参与比较运算的,如果传入的字符串的不是数字,那么就提示用户参数不合法,请输入数字。
- 初步判断完成后,后续就非常简单了,根据质量分的大小进行比较,执行相应的代码。
此案例的完整代码如下:
#质量分通过input函数由用户手动输入
article_quality = input('请输入文章的质量分:')
#input函数输入的数据类型是字符串,要判断字符串中是否全部为数字组成
if article_quality.isdigit():
#已经证明传入的字符串全部由数字组成,将字符串类型转换成数字类型,否则后续判断就会异常
article_quality = int(article_quality)
#如果传入的字符串不是全部由数字组成,那么就提示参数不合法,从而退出程序
else:
print('参数不合法,请输入数字')
exit() #退出程序
#判断质量分是否小于60
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
#判断质量分是否大于等于60并且小于80
elif article_quality >= 60 and article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
#判断质量分是否大于等于80并且小于90
elif article_quality >= 80 and article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
#判断质量分是否大于等于90
elif article_quality >= 90 and article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
#其余分数则执行如下代码
else:
print('分数太高了,不合理')
代码运行,在冒号后面输入要传入的数据,当数据是不是数字时,则返回参数不合法,请输入数字。
当传入的数据是一个合理的数值时,则运行满足条件的部分代码。
当传入的数值超出最大范围时,最大范围仅100,此时就会允许不满足条件的部分代码。
写代码时,我将判断input()函数传入的字符串是否全部由数字组成的、质量分区间的流程控制,单独分离了出来,为了增强代码的可读性,其实也可以将这两个流程控制合并,由嵌套if实现,建议使用这种方式,但是也不要嵌套的太多,代码如下:
#质量分通过input函数由用户手动传入
article_quality = input('请输入文章的质量分:')
#input函数输入的数据类型是字符串,要判断字符串中是否全部为数字组成
if article_quality.isdigit():
#已经证明传入的字符串全部由数字组成,将字符串类型转换成数字类型,否则后续判断就会异常
article_quality = int(article_quality)
#下面开始对质量分的大小进行判断
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
elif article_quality >= 60 and article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
elif article_quality >= 80 and article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
elif article_quality >= 90 and article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
else:
print('分数太高了,不合理')
#如果传入的字符串不是全部由数字组成,那么就提示参数不合法,从而退出程序
else:
print('参数不合法,请输入数字')
exit() #退出程序
对于elif还可以再用嵌套来实现,但是代码可读性会非常差,相当于不用elif了,在else下用if,可供学习使用,在实际开发中不建议这么写代码,可读性非常差,代码如下:
article_quality = input('请输入文章的质量分:')
if article_quality.isdigit():
article_quality = int(article_quality)
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
else:
if article_quality >= 60 and article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
else:
if article_quality >= 80 and article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
else:
if article_quality >= 90 and article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
else:
print('分数太高了,不合理')
else:
print('参数不合法,请输入数字')
exit()
还是建议使用elif的方法,代码可读性好
4.4.多分支if代码优化
对于多条件的比较运算符,还可以这样简写:
80 <= article_quality < 90
代码含义:article_quality值小于等于80且小于90,换句话说就是article_quality值在80~90
要注意这种代码的写法,值1 <= 现有值 < 值2
主要是对比较运算的代码进行了优化,代码如下:
#input函数输入的数据类型是字符串,要判断字符串中是否全部为数字组成
if article_quality.isdigit():
#已经证明传入的字符串全部由数字组成,将字符串类型转换成数字类型,否则后续判断就会异常
article_quality = int(article_quality)
#下面开始对质量分的大小进行判断
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
elif 60 <= article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
elif 80 <= article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
elif 90 <= article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
else:
print('分数太高了,不合理')
#如果传入的字符串不是全部由数字组成,那么就提示参数不合法,从而退出程序
else:
print('参数不合法,请输入数字')
exit() #退出程序
5.对象的布尔值
在Python中,任何对象都有其对应的布尔值,True或者False,我们可以调用内置函数bool()得到对象的布尔值。
当对象为:False、数值0、None、空字符串、空列表、空元组、空字典、空集合时,对应的布尔值都为False,剩余的所有对象的布尔值都为True。
布尔值为False的对象:
>>> bool(False)
False
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool("")
False
>>> bool([])
False
>>> bool(list())
False
>>> bool(())
False
>>> bool(tuple())
False
>>> bool({})
False
>>> bool(dict())
False
>>> bool(set())
False
>>> bool(frozenset())
False
布尔值为True的对象:
>>> bool(22)
True
>>> bool('jiangxl')
True
>>> bool(' ')
True
>>> bool([1,2,3])
True
>>> bool((1,2,3))
True
>>> bool({'1': 12, '2':13})
True
>>> bool({1,2,3,4})
True
在Python中,所有对象都可以直接用布尔值进行逻辑判断,解释器会自动调用内置函数bool()进行转换,无需手动用bool函数转换。
if 99:
print(99, True)
6.if-else条件表达式
6.1.if-else条件表达式语法
if-else条件表达式通俗一点来说,就是if-else语句的简写模式,类似于C语言中的三目条件运算符。
条件表达式的语法格式:
#单if-else条件表达式的语法格式
x if 判断条件 else y
#嵌套if-else条件表达式的语法格式
x if 判断条件1 else (z if 判断条件2 else y)
单if-else条件表达式的执行顺序:当判断条件的结果为True值,条件表达式的返回值为x,否则返回y。
嵌套if-else条件表达式的执行顺序:当判断条件1的结果为True时,条件表达式的返回值为x,否则继续看判断条件2的结果是否为True,如果为True则返回z,否则返回y。
6.2.单if-else条件表达式案例
需求:如果文章质量分大于等于80,返回优秀,否则返回不佳。
article_quality = 88
#当article_quality >=80判断结果为True时,返回优秀,否则返回不佳
result = '优秀' if article_quality >=80 else '不佳'
print(result)
#输出结果:优秀
这个条件表达式,相当于如下代码,等价:
article_quality = 88
if article_quality >= 80:
result = '优秀'
else:
result = '不佳'
print(result)
简而言之,条件表达式就是if-else语句的简写,看个人喜好。
6.3.嵌套if-else条件表达式案例
需求:
- 如果文章质量分为60以下,返回文章质量不佳。
- 如果文章质量分为60~80之间,提示文章质量良好。
- 如果文章质量分为80~100之间,提示文章质量优秀。
article_quality = 88
'''
如果article_quality < 60结果为True,质量分小于60,则打印文章质量不佳,如果不满足此条件,则执行else后面的语句。
如果60 <= article_quality <= 80的结果为True,质量分在60~80之间,则打印文章质量良好,如果不满足此条件,则执行嵌套if中的else语句,最终返回文章质量优秀。
'''
result = '文章质量不佳' if article_quality < 60 else ('文章质量良好' if 60 <= article_quality <= 80 else '文章质量优秀')
print(result)
#输出结果:优秀
嵌套的条件表达式,等同于如下代码:
article_quality = 88
if article_quality < 60:
result = '文章质量不佳'
else:
if 60 <= article_quality <= 80:
result = '文章质量良好'
else:
result = '文章质量优秀'
print(result)
7.if not语句
if not语句可以判断一个条件的布尔值是否为False,如果为False则执行相应的代码。
在默认情况下,if语句判断条件的布尔值是否为True,通过if not就可以判断条件的布尔值是否为False。
article_quality = input('请输入文章的质量分:')
#如果article_quality.isdigit()条件的返回值是False,则打印
if not article_quality.isdigit():
print('参数不合法')
exit()
else:
print(article_quality)