2.6. 控制流

未匹配的标注

控制流

在我们迄今为止所看到的程序中,总有一系列的语句被 Python 以精确的自上而下的顺序执行。那要是你想改变它的执行流程呢?例如,你希望程序根据不同的情况做出一些决定和做不同的事情,像是根据一天中的时间打印“早上好”或“晚上好”呢?

你可能已经猜到了,这是通过控制流语句实现的。在 Python 中,有 iffor 和 while 三个控制流语句。

if 语句

if 语句用于检查一个条件:如果条件是真的,我们运行一个语句块(称为 if-block),否则我们执行另一个语句块(称为 else-block)。else 语句是可选的。

示例(保存为 if.py):

number = 23
guess = int(input('Enter an integer : '))

if guess == number:
    # 新程序块的开始处
    print('Congratulations, you guessed it.')
    print('(but you do not win any prizes!)')
    # 新程序块的结尾处
elif guess < number:
    # 另一个程序块
    print('No, it is a little higher than that')
    # 你可以在程序块中“为所欲为”——做任何你想做的事情
else:
    print('No, it is a little lower than that')
    # 只有当猜测数大于给定数的时候,才会执行此处

print('Done')
# 在 if 语句执行结束后,最后的这句语句总是会被执行。

输出:

$ python if.py
Enter an integer : 50
No, it is a little lower than that
Done

$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done

$ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done

它的工作原理

在这个程序中,我们从用户那里获得猜测数(guesses),然后检查一下它是否等于我们设定的数字。我们将变量 number 设置为任意整数,比如 23 。然后,我们用 input() 函数得到用户的猜测数。函数只是可以重复使用的程序片段。我们将在 下一章 看到更多关于函数的内容。

我们向内置的 input 函数提供一个字符串,该函数将其打印输出到屏幕上,然后等待用户的输入。一旦我们键入一些内容并按下 [回车] 键, input() 函数会以字符串的形式返回我们键入的内容。然后我们使用 int 把这个字符串转换为整数,然后把它保存到变量 guess 中。 实际上, int 是一个类,但是目前来讲,你只需要知道你能够用它将字符串转换为整数即可(假设字符串包含的是一个合法有效的整数)。

然后,我们对用户的猜测数和我们的设定数进行比较。如果它们相等,我们就打印输出成功消息。注意,我们使用缩进级别来告诉 Python 哪些语句属于哪个语句块。这就是缩进在 Python 中如此重要的原因。我希望你能坚持「一致缩进」的原则。

注意,在 if 语句的结尾处有一个冒号——我们是在向 Python 表明后面跟着一个语句块。

然后,我们检查猜测数是否小于设定数,如果小于,我们会告知用户他们必须猜得再高一点。我们这里使用的是 elif 从句,它将两个相关的 if else-if else 语句组合成一个 if-elif-else 语句。这样做会使程序变得更简单,而且还减少了所需的缩进量。

elif 和 else 语句必须在逻辑行的结尾处有一个冒号,后面跟着相应的语句块(当然,要有适当的缩进)。

在一个 if 语句的 if 语句块中还可以再嵌套一个 if 语句,我们称之为嵌套的 if 语句。

记住, elif 和 else 部分是可选的。最迷你的合法有效的一个 if 语句为:

if True:
    print('Yes, it is true')

在 Python 执行完完整的 if 语句以及相关的 elif 和 else 从句后,它会继续往下执行包含 if 语句的语句块中的下一个语句。在本例中,它是主语句块(程序执行的开始),下一个语句是 print('Done') 语句。在此之后,Python 会遇到程序的结尾然后直接结束。

尽管这是一个非常简单的程序,但我已经指出了许多你应该注意的事情。所有的这些都非常直观(对于那些有 C/C++ 积累的程序员来说,也非常简单)。虽然在一开始你需要了解这些事情,但是经过一些练习后,你会对它们感到舒服,并且这一切会让你觉得非常自然

C/C++ 程序员请注意

Python 中没有 switch 语句。你可以用一个 if..elif..else 语句完成相同的操作(在某些情况下,你还可以用 字典(dictionary) 快速地完成相同操作)。

while 语句

while 语句可以让你重复执行一个语句块,只要条件为真。一个 while 语句就是所谓的 循环 语句的一个例子。 一个 while 语句可以有一个可选的 else 从句。

示例(保存为 while.py):

number = 23
running = True

while running:
    guess = int(input('Enter an integer : '))

    if guess == number:
        print('Congratulations, you guessed it.')
        # 这会导致 while 循环停止
        running = False
    elif guess < number:
        print('No, it is a little higher than that.')
    else:
        print('No, it is a little lower than that.')
else:
    print('The while loop is over.')
    # 你可以在此处继续进行其它你想做的操作

print('Done')

输出:

$ python while.py
Enter an integer : 50
No, it is a little lower than that.
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done

它的工作原理

在这个程序中,我们仍然玩猜谜游戏,但是它的优点是用户可以一直猜,直到猜对为止——不需要像我们在上一节一样,每猜一次都要重复运行一次程序。 这巧妙地阐述了 while 语句的用法。

我们将 input 和 if 语句移动到 while 循环地内部,并在 while 循环之前将变量 running 设置为 True 。首先,我们检查变量 running 是否为 True ,然后继续执行相应的 while 语句块 。执行完该语句块以后,再检查条件是否成立,在本例中,条件是变量 running 。如果条件为真,我们就再次执行 while 语句块,否则我们将继续向下执行可选的 else 语句块,然后继续向下执行下一个语句。

else 语句块会在 while 循环的条件变为 False 时执行——甚至有可能在第一次检查条件时,条件就是 False 。如果 while 循环中有一个 else 从句,它总是会执行到,除非用 break 语句跳出循环。

我们将True 和 False 称为布尔类型,而且你可以认为它们分别等于数值 1 和 0 。

C/C++ 程序员请注意

记住,在 while 循环中可以有一个 else 从句。

for 循环

for..in 语句是另一种循环语句,它会 迭代 对象序列,即会遍历序列中的的每个项。在后面的章节中,我们将详细了解 序列 。目前你只需要知道的是,序列只是一个有序的项的集合。

示例(保存为 for.py):

for i in range(1, 5):
    print(i)
else:
    print('The for loop is over')

输出:

$ python for.py
1
2
3
4
The for loop is over

它的工作原理

在这个程序中,我们打印输出一个数字 序列 。我们使用内置函数 range 来生成这个数字序列。

我们在这里做的是提供给它两个数字(参数), range 函数会返回从第一个数字开始到第二个数字结束的数字序列。例如, range(1,5) 得到序列 [1, 2, 3, 4] 。默认情况下,range 的步长为 1 .如果我们为 range 函数提供第三个数字,那么这就是步长。例如,range(1,5,2) 得到 [1,3] 。记住,返回的序列的范围  包含第二个数字。

注意, range() 每次只产生一个数字,如果你想要完整的数字序列,那就需要在 range() 上调用 list() 函数。例如, list(range(5)) 会生成 [0, 1, 2, 3, 4] 。在 数据结构章节 中有关于列表的解释。

然后 for 循环对这个范围进行遍历—— for i in range(1,5) 等价于 for i in [1, 2, 3, 4] ,就像是将序列中的每一个数字(或对象)分配给 i 一样,一次只分配一个。然后对 i 的每个值执行语句块。在这种情况下,我们只打印输出语句块中的值。

记住, else 部分是可选的。如果程序有该部分,那么在 for 循环结束后一定会执行一次该部分。除非遇到 break 语句

记住, for..in 循环适用于任何序列。在这里,我们有一个由内置的 range 函数生成的数字列表,但是更一般地,我们可以使用任何对象的任何序列!我们将在后面的章节中详细探讨这个问题。

C/C++/Java/C# 程序员请注意

Python 的 for 循环与 C/C++ 的 for 循环截然不同。 C# 程序员会注意到 Python 中的 for 循环和 C# 中的 foreach 循环很像。 Java 程序员会注意到 Python 中的 for 循环和 Java 1.5 中的 for (int i : IntArray) 很像。 

比如,你想要在 C/C++ 中,编写 for (int i = 0; i < 5; i++),那么这在 Python 中就相当于 for i in range(0,5) 。如你所见,Python 中的 for 循环更简单、更易于表达、更不容易出错。

break 语句

break 语句是用来 中断 循环语句的,即直接停止循环语句的执行,就算循环条件没有变为 False 或者序列没有迭代到最后一项。

需要重点关注的是,如果你 中断 了一个 for 循环或者一个 while 循环,任何相应循环的 else 语句块都不会被执行。

示例(保存为 break.py):

while True:
    s = input('Enter something : ')
    if s == 'quit':
        break
    print('Length of the string is', len(s))
print('Done')

输出:

$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 11
Enter something : quit
Done

它的工作原理

在这个程序中,我们反复获取用户的输入内容,然后打印输出每次输入的长度。我们还专门提供了一个条件去终止该程序,那就是检查用户的
输入内容是否为 'quit' 。我们通过 中断 循环来终止程序,然后到达程序的结尾处。

我们可以使用内置的 len 函数得到输入字符串的长度。

要记住, break 语句也可以和 for 循环一起使用。

本人(原作者)的 Python之诗

我在这里用到的输入是我自己些的一首小诗:

Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!

continue 语句

continue 语句用来告诉 Python 跳过当前循环语句块中的其余部分,然后 继续 执行循环的下一个迭代。

示例(保存为 continue.py);

while True:
    s = input('Enter something : ')
    if s == 'quit':
        break
    if len(s) < 3:
        print('Too small')
        continue
    print('Input is of sufficient length')
    # 其它操作...

输出:

$ python continue.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit

它的工作原理

在这个程序中,我们虽然接收用户的输入内容,但是我们只处理长度至少为 3 的输入字符串。所以,我们使用内置的 len 函数来获得字符串的长度,如果长度小于 3 ,我们就使用 continue 语句跳过当前语句块中的其余语句。否则依然执行其余语句,然后执行其它后续操作。

注意, continue 语句也可以和 for 循环一起使用。

总结

我们已经了解了如何使用三个控制流语句—— if 、 while 和 for 以及和它们相关的 break 和 continue 语句。这些是 Python 中最常用的部分,因此我们要对他们非常熟悉。

接下来,我们将了解如何创建和使用函数。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
Summer
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~