原力计划

文章目录

    • 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就断开连接。

image-20220812220705932

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时,则会返回该文章的质量分,然后提示允许上热榜。

image-20220812232949570

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时,返回该文章的质量分,并提示允许上热榜,否则也返回出该文章的质量分,并计算出与标准分的差值,一并返回给用户。

image-20220812234149781

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('分数太高了,不合理')

代码运行,在冒号后面输入要传入的数据,当数据是不是数字时,则返回参数不合法,请输入数字。

image-20220813103301174

当传入的数据是一个合理的数值时,则运行满足条件的部分代码。

image-20220813103335430

当传入的数值超出最大范围时,最大范围仅100,此时就会允许不满足条件的部分代码。

image-20220813103440168

写代码时,我将判断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的方法,代码可读性好

image-20220813105235887

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)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年4月28日
下一篇 2023年4月29日

相关推荐