《从零开始PYTHON3》第七讲
人生是由无数个选择组成,每个选择都有不同的限定条件。现在来说人生有点早是吧:)不过事实的确是这样的。
程序也充满着选择,满足不同的条件,则运行不同的运算。这些对不同运算的选择,则被称为分支,或者叫“条件分支”。
在Python中,最简单的条件分支是这个样子(伪代码):
if 条件:
满足条件时执行的分支
条件不满足时,或者条件满足、执行完分支之后,会继续从这里开始执行
用真实的代码来看个例子:
#当a的值大于3的时候,显示a的值
if a > 3:
print(a)
以上是if分支最简单的形式,完整的if分支使用伪代码表示是这样:
if 条件一:
条件一满足时执行
elif 条件二:
条件二满足(条件一不满足)时执行
elif 条件三:
条件三满足(条件一、二不满足)时执行
...
else:
所有分支条件均不满足时执行
在其它的编程语言中,if分支通常最多只处理两种分支条件,更多的分支要使用if语句的嵌套,或者switch等命令。在python中这些不同的处理方式都被合并到了if分支语句。其中主要的体现就是elif子句,elif实际是“else if"的缩写,这非常像if的嵌套使用,但又更简单易用。
if语句完整的语法包含很多个部分,elif只是其中的一个部分,所以叫“子句”。每个elif子句对应一个分支条件和吻合条件后的分支。在一个if分支结构中,elif子句可以有很多个,这样就可以用于对应很多种不同的分支条件。但是最初的if和最后的else只能有一个。
除了伪代码,我们还可以用流程图来描述if语句的执行走向,从而加深印象:
相信你已经有了概念了。下面是一个真实代码的例子:
#条件分支示例
#作者:Andrew
#输入
wallet=float(input("请输入钱包里的现金总数:"))
if wallet > 1000.0:
print("今晚去吃大餐.")
elif wallet > 500.0:
print("简单吃一顿,然后去迪厅.")
elif wallet > 100.0:
print("去吃个快餐,然后看场电影.")
else:
print("回家看看有没有剩饭,然后看电视吧.")
上面程序中,首先请用户输入一个数字,代表钱包中的现金总数,然后使用float函数把输入变换为浮点数。使用float类型是因为,表达的是现金的总数,当然可能包含小数部分。如果不使用float函数,输入的数据默认是字符串类型,这个我们前面已经讲过了。
随后根据现金的数额,显示不同的提示。提示信息仅供娱乐,这里是为了说明if语句的基本使用方式。你主要需要理解的部分就是,这些不同信息,是根据不同的分支条件决定的。
在if语句中,真正控制程序走向的正是程序中所给出的条件,通常以条件表达式的方式存在。表达式的运算结果只有“真”、“假”两种形式。这是逻辑类型,或称bool(布尔)类型,属于数字类型的子类型,我们在第五章中讲过了。
我们当时还讲过,采用bool类型的原因之一是因为现代数学体系上完备的概念和体系。今天我们就在这个基础上再进一步讲述逻辑运算,或称bool(布尔)运算。
逻辑运算(布尔运算)
bool类型只有两个可能值,所以常见的bool运算方式也并不多,最常用的就是下面三种:
-
not 否定操作,比如下面两条语句,从逻辑上是相同的:
if not 性别=="女": if 性别=="男":
-
and 逻辑“与”操作:and操作符两边的条件,必须都为真,结果才是“真”,否则结果是“假”,例如:
if 性别=="男" and 16<年龄<25:
#当性别为男,同时年龄在16到25岁之间(不包含16岁和25岁)时,执行 -
or 逻辑“或”操作:or操作符两边的条件,只要有一个是“真”,则结果就是“真”,全部为“假”,结果才是假,例如:
if 年龄<=16 or 年龄>=25:
print("条件不符")
#当年龄小于等于16岁,或者大于等于25岁,则显示“条件不符“
条件判断本来挺好用,为什么学这么复杂的布尔运算呢?我们来看一个例子你就会理解了:
假设某个男篮选秀,教练组提出了录取的三个基本条件:
- 男性
- 年龄大于16岁,小于25岁
- 身高超过2.1米
如果只使用逻辑判断,不使用逻辑运算表达式,我们可能得到这样的程序代码(伪代码):
if 性别=="男":
if 16<年龄<25: #注意这里使用了连续判断(if语句嵌套)
if 身高>2.1:
print("符合条件!")
else:
print("不符合条件!")
else:
print("不符合条件!")
else:
print("不符合条件!")
对比如果使用逻辑运算的代码:
if 性别=="男" and 16<年龄<25 and 身高>2.1:
print("条件符合!")
else:
print("条件不符合!")
使用逻辑运算的代码干净、清晰,不易出错。不过在初学的时候,你会感觉有点“烧脑”