(喜欢文章的作者欢迎点赞关注!)
前文我们已经介绍了布尔计算逻辑,对布尔逻辑的具体应用之一——条件判断,本文将做讲解和说明。
如前面所说,我们想对不一样的条件做不同的代码设计,就好比面对不同的人说不同的话、撒不同的谎,汤是用来喝的而菜是用来吃的等。其实,代码本身是可以抽象成流程图的,且可以使用到流程图中的所有逻辑和变换,或者说代码就是流程图的具象表达,因此,其必然是能够做条件判断并实现分支结构的。
一、简单条件判断
Python提供了关键词“if”、“else”来用于条件判断,if表示某条件成立,else表示该条件不成立。

对于上面的流程图,使用代码就可表示为:
a = 5b = 1if a > 2 and b < 2:a += 2b -= 2else:a -= 2b += 2
需要十分注意,一是if后面需要跟条件判断语句或布尔值,布尔值可以是数字,若为数字,通常整数0表示False,非零表示True;二是Python是缩进敏感的编程语言,通常我们以4个空格为一个缩进单位(有的是2个空格),相邻且有相同缩进单位的代码行属于同一个代码块或同一个层级,而else只有与对应的if在同一层级, if条件成立时运行的代码也只有为if的子层级时(相较于if缩进一个单位),才会发挥正确的作用。
例如,若代码“b = b - 2”没有缩进,则其变为了与if、else在相同代码层级,这时不管条件如何“b = b - 2”都会执行;且由于else的前一行同级代码不是if,就会导致else本身不知道参与了哪一个比较条件,从而出现程序错误。
二、复杂条件判断
(1)多层判断
通常我们的条件判断不可能只有一层,例如下面的流程图,其有两个层级的条件判断:

其对应的代码为:
a, b = 5, 1if a > 2 and b < 2:a += 2if b == 1:b *= 3else:a -= 2b += 2
需要注意到代码缩进问题,由于“b = b * 3”是第二个if成立时执行,因此其必须在第二个if缩进的基础上再次缩进,以确保其在第二个if的代码块中执行。
不是所有的if语句都需要有else,而else必须对应一个if。
(2)连续判断
购票时,我们可能会遇到这样一件事:现有购票活动优惠,如果不满18岁,则免费;如果是老年人大于65岁,则半价;否则打8折。将购票过程转换为一个根据年龄(age)进行打折(discount)的过程,那么可以得到这样的流程图:

转换为Python代码,可以写为:
age = input("Customer's age: ")discount = 1.0if age < 18:discount = 0else:if age > 65:discount = 0.5else:discount = 0.8
这样的写法没有错,但是能不能在“age < 18”不满足时,直接判断“age > 65”,绕过重复的else操作,就如同C/C++、Java当中的“else if”那样?答案是当然可以!
Python提供了一个名为“elif”的关键词,用来代替其他编程语言中的“else if”操作,这样,上述购票优惠的代码就可以改写为:
age = input("Customer's age: ")discount = 1.0if age < 18:discount = 0elif age > 65:discount = 0.5else:discount = 0.8
通过例子,我们还可以看出,嵌套的条件判断其实可以使用“elif”来进行替换,从而减少代码的缩进层级,让代码更加易于浏览、理解和检查。
(3)三目运算(三元运算)
以上面购票的例子,如果我们不考虑老年人,只考虑是否成年,那么代码就要改写为:
age = input("Customer's age: ")discount = 1.0if age < 18:discount = 0else:discount = 0.8
会发现,实现了一个简单功能,却花费了5行代码完成,这是一个不必要的浪费。事实上,我们可以用一行代码完成这个操作,让代码简洁化:
discount = 0 if age < 18 else 0.8这行代码的功能与上面的5行相同,但是却十分简洁。这个表达式就是三目运算或叫做三元运算,可以抽象的表达为:
target = expression_1 if condition else expression_2在这里注意一个细节,表达式里使用的是“expression”(表达式),而非“value”(值),这说明三目运算不仅可以用来赋值操作,其同时可以完成一定程度的运算,例如:
y = x ** 2 if x > 0 else -x # -x 表示取 x 的相反数同时,由于是表达式,我们甚至可以实现三目运算的嵌套,例如:
target = exp_1 if cond_1 else (exp_2 if cond_2 else exp_3)往期回顾:
Python学习笔记——从入门到报废(七、逻辑判断与分支结构(上))
Python学习笔记——从入门到报废(六、常用内置函数与顺序执行)