数据结构(Python语言描述)(第2版)
上QQ阅读APP看书,第一时间看更新

1.2 控制语句

Python包含了针对顺序、条件执行和迭代等情况的常见的各种控制语句。语句的序列是一组连续编写的语句。序列中的每一条语句必须以相同的缩进开始。本节将介绍条件执行和迭代的控制语句。

Python条件语句的结构和其他语言中的类似,即通过关键字if、elif和else以及冒号和缩进来实现。

单向if语句的语法如下:

if <Boolean expression>:
    <sequence of statements>

正如前面提到的,布尔表达式(boolean expression)可以是任意的Python值,其中的一些值被当作False,另一些值被当作True。如果布尔表达式为True,就运行该语句序列;否则,什么也不会发生。语句序列(一条或多条语句)必须至少按照一个空格或制表符(通常一个制表符是4个空格)来缩进或对齐。冒号是唯一的分隔符,如果序列中只有一条语句,它可以紧跟在同一行的冒号之后。

双向if语句的语法如下:

if <Boolean expression>:
    <sequence of statements>
else:
    <sequence of statements>

注意缩进和关键字else后面的冒号。在这种用法下,只有一个序列将被运行。如果布尔表达式为True,那么第一个序列会被运行;如果布尔表达式为False,那么第二个序列将被运行。

多向if语句的语法如下:

if <Boolean expression>:
    <sequence of statements>
elif <Boolean expression>:
    <sequence of statements>
...
else:
    <sequence of statements>

多向if语句也只会运行一个语句序列。多向if语句会包含一个或多个不同的布尔表达式,除了第一个布尔表达式,其他布尔表达式都会被写在关键字elif之后。在这种用法里,最后一个else:分支是可以省略的。

下面的示例是比较两个数的大小的问题,并输出正确的答案:

if x > y: 
    print("x is greater than y")
elif x < y: 
    print("x is less than y")
else: 
    print("x is equal to y")

前面讨论的numberguess程序包含了一个main函数的定义和如下的if语句:

if __name__ == "__main__":
    main()

上述if语句的作用是,允许程序员要么将模块当作一个独立的程序运行,要么从Shell窗口或另一个模块中导入它。其工作方式为:每个Python模块都包含一组内建的模块变量,当加载该模块时,Python虚拟机会自动为这些变量赋值。

如果该模块是作为一个独立的程序加载(要么从一个终端提示符运行它,要么从一个IDLE窗口加载它)的,该模块的_name_变量会设置为字符串"_main_";否则,这个变量会设置为模块的名称,在这个例子中,也就是"numberguess"。不管怎么样,该变量的赋值都会在模块中的任何代码加载之前完成。因此,当执行到模块末尾的if语句时,只有模块作为一个独立的程序启动,才会调用模块的main函数。

在开发独立的程序模块时,if _name_ == "_main_"这样的习惯用法很有用,因为这使得程序员只要把模块导入Shell窗口中就可以看到其相关帮助文档。同样,程序员在IDLE中进行模块开发时,可以在模块中用这一方法来编写和运行测试工具函数。

Python的while循环语句的结构和其他语言也是类似的。其语法如下。

while <Boolean expression>: 
    <sequence of statements>

下面的示例展示了如何计算从1到10的乘积并输出结果。

product = 1
value = 1
while value <= 10: 
    product *= value 
    value += 1
print(product)

注意,这里使用了扩展的赋值运算符*=。product *= value这行代码等价于如下的代码。

product = product * value

Python中的for循环语句可以用于在值的序列上进行更简洁的迭代。这条语句的语法如下。

for <variable> in <iterable object>:
    <sequence of statements>

当运行这个循环时,可迭代对象(iterable object)中的每一个值都被赋给循环变量,并且把这个值应用在其后面的语句序列里。可迭代对象的示例是字符串和列表。下面的代码使用了Python的range函数,返回整数的一个可迭代的序列,可以计算前面示例中的乘积。

product = 1
for value in range(1, 11):
    product *= value
print(product)

Python程序员通常更喜欢用for循环来迭代确定范围的值或值的序列。如果继续循环的条件是某个布尔表达式,那么程序员会使用while循环。