计算机根据判断条件的布尔值(TrueFalse),选择性的执行部分代码(选择结构都有判断条件,一般用比较运算符来判断,输入值和运算值比较之后,符合条件的为 True 不符合的为 False

单分支结构

if...语句(如果...)

a = 1000  # 将用户的存款金额赋值到变量
qk = int(input('请输入取款金额:'))  # 将用户输入的取款金额赋值到变量
if qk <= a:  # 如果此判断式结果为 True 的话,执行下面的代码
    ye = a - qk  # 计算取款后剩下的余额
    print('取款成功,卡内余额为:', ye)  # 告知用户取款成功和剩余存款

运行:

  • 输出问题:请输入取款金额:
  • 输入数据:300

运行结果:

  • 取款成功,卡内余额为: 700

注意:判断语句后面必须加 : 冒号才算成立,第四行第五行前面的空格被称为缩进,一般输入判断语句后回车换行会自动添加,直到你主动删除缩进,下次换行就不会出现了,用来代表代码的从属关系,也就是判断式结果为 True 的时候,运行下面带缩进的代码

缩进:标准的缩进为4个空格,1-3个也可以,但是同一个判断条件下的缩进需要保持一致

双分支结构

if...else...语句(如果...否则...)

a = 1000  # 将用户的存款金额赋值到变量
qk = int(input('请输入取款金额:'))  # 将用户输入的取款金额赋值到变量
if qk <= a:  # 如果此判断式结果为 True 的话,执行下面的代码
    ye = a - qk  # 计算取款后剩下的余额
    print('取款成功,卡内余额为:', ye)  # 告知用户取款成功和剩余存款
else:  # 上面的判断式结果为 False 的话,执行 else 语句下的代码
    print('卡内余额不足,请重新输入取款金额!')  # 提示用户余额不足

运行:

  • 输出问题:请输入取款金额:
  • 输入数据:1001

运行结果:

  • 卡内余额不足,请重新输入取款金额!

如果取款金额小于或等于存款,提示取款成功,告知剩下余额,否则提示余额不足,请重新输入取款金额

需要注意的是,else 语句后面也要加 : 冒号才算成立,它和下面代码的从属关系也是用缩进来表示的

if...语句也可以直接用对象的布尔值作为判断因素

if qk:  # 如果对象 qk 的布尔值为 True 则执行下列代码
if not qk:  # 如果对象 qk 的布尔值为 False 则执行下列代码

Python中一切皆对象,所以这个对象可以是值,可以是变量,可以是表达式,可以是任何对象

注意:

if + 对象(判断对象的布尔值是否为True),这种判断式的对象如果是空字符串 '' "" 空列表 [] 空元组 () 空字典 {} 和整数 0 或者运算结果为整数 0 的表达式(应该还有其他的,未理解,后续跟进),那么这个判断式下面的带缩进的代码会提示:‘此代码无法访问’‘不可到达的代码’等深黄色警告,但可以正常运行,不会报错,我估计是PyCharm可以直接判断这些对象的布尔值必定是 False ,所以直接告知下面的代码无法被运行,但空函数和浮点数 0.0虽然布尔值也是False 却不会有此类警告

if + not + 对象(判断对象的布尔值是否为False),这种判断式的对象无论是哪种都不会出现:‘此代码无法访问’‘不可到达的代码’等深黄色警告

多分支结构

if...elif...else...语句(如果...如果...否则...)

cj = int(input('请输入您的成绩:(百分制)'))
if 0 <= cj <= 59:
    print('成绩不合格')
elif 60 <= cj <= 79:
    print('成绩合格')
else:
    print('成绩优秀')

运行:

  • 输出问题:请输入您的成绩:(百分制)
  • 输入数据:60

运行结果:

  • 成绩合格

与上面双分支结构不同的是,多分支结构有更细分的判断条件,能输出更多不同的结果,除此之外,没有其他不同,从上至下,只要有一条判断条件符合被执行后,其它的就不会被执行了(重点注意代码上下顺序,不然系统会做出不合逻辑的判断,后面嵌套if...语句有详细讲到)

elif 如果换成 if,获得的输入值同时符合两个或以上的判断条件时,这些判断条件下面的代码都会被执行

cj = int(input('请输入您的成绩:(百分制)'))
if 0 <= cj <= 59:
    print('成绩不合格')
if 60 <= cj <= 79:
    print('成绩合格')
else:
    print('成绩优秀')

运行:

  • 输出问题:请输入您的成绩:(百分制)
  • 输入数据:59

运行结果:

  • 成绩不合格
  • 成绩优秀

为什么会输出两个结果,看下面:

可以看到,我们的输入值为59,符合第一条判断条件,那么为什么还会执行第三条 else(否则) 判断条件下的代码呢,我们可以这么看,因为第二条判断条件没有用到 elif... 语句,所以系统判定第一条为单分支结构,第二条和第三条为双分支结构,也就是看似是一个整体的分支结构,其实第一条和第二三条是分开的,是两段分支结构代码,而它们使用了同一个变量进行判断,所以下面的双分支结构第一条判断条件不符合,自然就执行了 else(否则) 判断条件下的代码了

分支结构详解图

注意:多分支结构的第一个判断条件必须用 if... 语句开头,不然会报错

我们在做数值的区间判断的时候,通常要用到两次比较运算,这个时候我们可以用布尔运算符 and 或者 or 来连接或者直接连接,看下面:

if cj >= 0 and cj <= 59:
if 0 <= cj <= 59:

这两种区间判断式效果是一样的,都是表达 cj 这个变量要大于等于 0 同时小于等于 59 ,运算结果布尔值才是 True ,才会执行下面的代码,一般建议用下面的方式,更简洁明了

最后修改:2021 年 06 月 10 日 04 : 04 PM