Python基础教程5.4 条件和条件语句

5.4 条件和条件语句

到目前为止,在你编写的程序中,语句都是逐条执行的。现在更进一步,让程序选择是否执行特定的语句块。

5.4.1 这正是布尔值的用武之地

在本书前面,你多次遇到了真值,现在终于需要用到它们了。真值也称布尔值,是以在真值方面做出了巨大贡献的George Boole命名的。

注意 如果你始终聚精会神,肯定注意到了第1章的旁注“先睹为快: if语句”,其中已经描述了if语句。然而,到目前为止,还没有正式介绍if语句。你将看到,有关if语句,还有很多我没有介绍的地方。

用作布尔表达式(如用作if语句中的条件)时,下面的值都将被解释器视为假:

False None 0 "" () [] {}

换而言之,标准值False和None、各种类型(包括浮点数、复数等)的数值0、空序列(如空字符串、空元组和空列表)以及空映射(如空字典)都被为假,而其他各种值都被视为真①,包括特殊值True②。

明白了吗?这意味着任何Python值都可解释为真值。乍一看这有点令人迷惑,但也很有用。虽然可供选择的真值非常多,但标准真值为True和False。在有些语言(如C语言和2.3之前的Python版本)中,标准真值为0(表示假)和1(表示真)。实际上, True和False不过是0和1的别名,虽然看起来不同,但作用是相同的。

>>> True

True

>>> False

False

>>> True == 1

True

>>> False == 0

True

>>> True + False + 42

43

因此,如果你看到一个返回1或0的表达式(可能是使用较旧的Python版本编写的),就知道这实际上意味着True或False。

布尔值True和False属于类型bool,而bool与list、 str和tuple一样,可用来转换其他的值。

——————————

① 至少对内置类型值来说如此。你在第9章将看到,对于自己创建的对象,解释为真还是假由你决定。

② 正如Python老手Laura Creighton指出的,这种差别类似于“有些东西”和“没有东西”的差别,而不是真和假的差别。

>>> bool('I think, therefore I am')

True

>>> bool(42)

True

>>> bool('')

False

>>> bool(0)

False

鉴于任何值都可用作布尔值,因此你几乎不需要显式地进行转换(Python会自动转换)。

注意 虽然[]和""都为假(即bool([]) == bool("") == False),但它们并不相等(即[] != "")。对其他各种为假的对象来说,情况亦如此(一个更显而易见的例子是() != False)。

5.4.2 有条件地执行和 if 语句

真值可合并,至于如何合并稍后再讲,先来看看真值可用来做什么。请尝试运行下面的脚本:

name = input('What is your name? ')

if name.endswith('Gumby'):

print('Hello, Mr. Gumby')

这就是if语句,让你能够有条件地执行代码。这意味着如果条件(if和冒号之间的表达式)为前面定义的真,就执行后续代码块(这里是一条print语句);如果条件为假,就不执行(你应该猜到了)。

注意 在第1章的旁注“先睹为快: if语句”中,将有条件执行的语句与if语句放在同一行中。这与前一个示例中使用单行代码块的做法等价。

5.4.3 else 子句

在前一节的示例中,如果你输入以Gumby结尾的名字,方法name.endswith将返回True,导致后续代码块执行——打印问候语。如果你愿意,可使用else子句增加一种选择(之所以叫子句是因为else不是独立的语句,而是if语句的一部分)。

name = input('What is your name?')

if name.endswith('Gumby'):

print('Hello, Mr. Gumby')

else:

print('Hello, stranger')

在这里,如果没有执行第一个代码块(因为条件为假),将进入第二个代码块。这个示例表明, Python代码很容易理解,不是吗?如果从if开始将代码大声朗读出来,听起来将像普通句子一样(也可能不那么普通)。

还有一个与if语句很像的“亲戚”,它就是条件表达式——C语言中三目运算符的Python版本。下面的表达式使用if和else确定其值:

status = "friend" if name.endswith("Gumby") else "stranger"

如果条件(紧跟在if后面)为真,表达式的结果为提供的第一个值(这里为"friend"),否则为第二个值(这里为"stranger")。

5.4.4 elif 子句

要检查多个条件,可使用elif。 elif是else if的缩写,由一个if子句和一个else子句组合而成,也就是包含条件的else子句。

num = int(input('Enter a number: '))

if num > 0:

print('The number is positive')

elif num

print('The number is negative')

else:

print('The number is zero')

5.4.5 代码块嵌套

下面穿插点额外的内容。你可将if语句放在其他if语句块中,如下所示:

name = input('What is your name? ')

if name.endswith('Gumby'):

if name.startswith('Mr.'):

print('Hello, Mr. Gumby')

elif name.startswith('Mrs.'):

print('Hello, Mrs. Gumby')

else:

print('Hello, Gumby')

else:

print('Hello, stranger')

在这里,如果名字以Gumby结尾,就同时检查名字开头,这是在第一个代码块中使用一条独立的if语句完成的。请注意,这里还使用了elif。最后一个分支(else子句)没有指定条件——如果没有选择其他分支,就选择最后一个分支。如果需要,这里的两个else子句都可省略。如果省略里面的else子句,将忽略并非以Mr.或Mrs.打头的名字(假设名字为Gumby)。如果省略外面的else子句,将忽略陌生人。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180912G0DRKH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券