Day18 while循环
今天我们将讨论另一种循环——while循环。昨天我们看到了循环的工作原理,以及为什么要使用for循环。当你需要根据条件而不是计数循环时,通常使用while循环。今天我们将讨论基于条件的循环。
为了完成本课程,让我们继续从上一个笔记本文件“ Week_04”开始,并在下面添加一个标记为“ While 循环”的Markdown模块。
编写一个while循环
就像for循环一样,while循环以关键字“ while”开始。之后,就像我们编写一个if语句一样,写上一个相关的条件代码。让我们来看下面这个例子:
# 写下你的第一个while循环
health = 10
while health > 0:
print(health)
health -= 1 # 丢失这一行将会使结果一直循环下去
# health -=1 等价于 health = health -1
继续运行这一代码块。这将会循环打印出变量health的值,直到数值不再满足>0这一条件。 在这种情况下,一旦变量health值不再大于零,while循环变会停止运行。 在最后一行代码中,我们将变量health值每次循环运行一次就会减1,直到变量health值接近于零。 如果我们对变量health值不做任何修改,那么,整个while循环就会变成无限循环(遇到这种情况是极其糟糕的)。
While vs. For
虽然,我在之前已经多次解释了我们使用每个循环类型的原因,但是,再次重申这些概念仍然是有必要的。 当需要计数或迭代时,通常使用for循环。 在执行基于条件的操作时,通常使用while循环。 当使用while循环时,通常会用到条件判断的布尔值(True为符合条件,False为不符合条件)。每个循环都有他们的最适合的应用环境,但在实际操作中,在大多数情况都是看个人的喜好。一般的经验法则是涉及到计数用for循环,涉及到条件判断则用while循环。
注意:pass、break和continue语句对于while循环也是同样的工作原理。
无限循环
在之前的章节中,我曾提到无限循环是不好的。 无限循环将使代码持续运行直到程序中断,或计算机关机或时间停止为止。知道了这些后,在我们创建项目时,请一定要避免创建无限循环的代码块。让我们来看一个无限循环的例子:
game_over = False # 等于布尔值False
while not game_over: # not Fasle = True
print(game_over)
如果你要在一个代码块中运行此程序,最终结果便是,你将不得不关闭Jupyter Notebook并重新启动它(或至少重新启动内核)。这是因为game_over变量从不变没有变为True,while循环的条件一直符合并不断运行,直到game_over变量变为True。在撰写循环代码的时候,我们一定要确保有退出循环的方法,无论是通过break中断所有循环,还是通过continue中断当前条件而运行下一条件循环。
嵌套循环
一个循环内包含另一个循环的概念就是我们所说的嵌套循环。同时,循环概念仍然适用。使用嵌套循环时,只有内循环代码完成运行后,外部的循环代码才会运行。让我们来看一个例子:
# 嵌套循环是使用两个及以上的循环
for i in range(2): # 外循环
for j in range(3): # 内循环
print(i,j)
继续并运行这一代码块。 一开始,这似乎有点令人困惑,因为这里有很多事情要做。让我们用表4-4详细说明输出结果。
表4-4 跟踪嵌套循环值
迭代 | i值 | j值 | 内循环值 | 外循环值 |
---|---|---|---|---|
1 | 0 | 0 | 1 | 1 |
2 | 0 | 1 | 2 | 1 |
3 | 0 | 2 | 3 | 1 |
4 | 1 | 0 | 4 | 2 |
5 | 1 | 1 | 5 | 2 |
6 | 1 | 2 | 6 | 2 |
总的来说,从表4-4中可以看到,内部循环一共运行6次(3次在外循环为数值1时,3次是外循环数值为2时),外部循环运行2次。而i值也仅在外循环运行时才会递增,直到内循环完成后才运行外循环。内循环必须每次从0到3(不包括3)计数才能运行下一个 外循环进行迭代。
星期三练习
1.用户输入:编写一个while循环,每次循环都会要求用户输入后才可运行,直到他们键入“quit”命令才会停止。
2.双循环:在while循环中编写for循环,从0到5进行计数,当循环到等于3时,所设条件变量game_over为True并中断整个while循环。while循环只有在条件变量game_over为True时,才会停止循环,而输出结果只有0,1,2。
小提示:使用break语句,防止程序陷入无限循环。
今天是短短的一天,因为循环概念不论对于while循环还是for循环都是相同的。但请记住,while循环用于条件循环,而for循环则用于进行计数/迭代。