python 中的 While 循环

226 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

python 中的 While 循环

在 2.3 节的末尾,我们提到大多数计算任务无法使用分支程序完成。例如,考虑编写一个要求X数的程序。你可能会考虑写这样的东西

image.png

但很快就会发现,你需要的条件与正整数一样多-而且有无限多个。你想写的是一个看起来像的程序(下面是伪代码,而不是Python)

image.png

当我们希望一个程序多次做同样的事情时,我们可以使用迭代。通用迭代(也称为循环)机制如图 2-6 中的框所示。像条件语句一样,它从测试开始。如果测试的计算结果为 True,则程序将执行一次循环主体,然后返回以重新评估测试。重复此过程,直到测试的计算结果为 False,之后控制权将传递给迭代语句后面的代码。

image.png

我们可以使用 while 语句编写图 2-6 中描述的循环类型。考虑图 2=7 中的代码。

image.png

代码首先将变量 x 绑定到整数 3。然后,它通过使用重复加法继续平方x。图 2-8 中的表显示了每次到达循环开始时的测试时与每个变量关联的值。我们通过手工模拟代码来构建表格,即我们假装是Python解释器并使用铅笔和纸执行程序。使用铅笔和纸可能看起来很古怪,但这是了解程序行为方式的绝佳方法。

image.png

第四次到达测试时,它的计算结果为 False,控制流在循环之后继续执行打印语句。对于 x 的哪些值,此程序将终止?有三种情况需要考虑:x==0,x> 0,x < 0。

假设 x == 0。num_iterations的初始值也将是 o,并且永远不会执行循环正文。

假设 x > o。次数迭代的初始值将小于 x,并且循环正文将至少执行一次。每次执行循环主体时,num_iterations的值正好增加 1。这意味着,由于迭代次数开始小于 x,因此在循环的有限次数迭代之后,num_iterations将等于 x。此时,循环测试的计算结果为 False,控件继续执行 while 语句后面的代码。

假设 x < 0。非常糟糕的事情发生了。控制将进入循环,每次迭代都将num_iterations远离 x,而不是更接近 x。因此,程序将继续永远执行循环(或者直到发生其他不好的事情,例如溢出错误)。我们如何在程序?将测试更改为< abs(x) 的次数迭代几乎有效。循环终止,但打印负值。如果循环中的赋值语句也更改为 ans = ans + abs(x),则代码可以正常工作。

手指练习:将以下代码中的注释替换为 while 循环。

image.png

有时,在不测试循环条件的情况下退出循环很方便。执行 break 语句将终止包含该语句的循环,并将控制权紧跟在循环之后的代码。例如,代码

image.png

如果在嵌套循环内执行 break 语句(另一个循环中的循环),则中断将终止内部循环。

手指练习:编写一个程序,要求用户输入 10 个整数,然后打印输入的最大奇数。如果未输入奇数,则应为此打印一条消息。