第5章- 循环

我尝试过的每种编程语言都有某种循环结构。大多数有不止一个。python世界有两种类型的循环:

  • 这个 for 循环和

  • 这个 while 循环


你会发现 for 到目前为止,Loop是这两者中最流行的。循环在您想多次执行某项操作时使用。通常,您会发现需要对一段数据反复执行一些操作或一组操作。这就是循环出现的地方。它们使将这种逻辑应用到数据中变得非常容易。

让我们开始学习这些有趣的结构是如何工作的!

for循环

如上所述,当您想迭代N次时,可以使用循环。如果我们看到一个例子,就更容易理解了。让我们使用python的内置 范围 功能。range函数将创建一个长度为n的列表。在python 2.x中,实际上还有一个函数 润智 这是一个数字生成器,并不像range那样需要大量资源。他们基本上改变了 润智 进入之内 范围 在python 3中。下面是一个例子:

>>> range(5)
range(0, 5)

如您所见,上面的range函数接受一个整数并返回 范围 对象。range函数还接受开始值、结束值和步进值。下面还有两个例子:

>>> range(5,10)
range(5, 10)
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]

第一个示例演示了可以传递开始值和结束值,range函数将返回从开始值到结束值(但不包括结束值)之间的数字。所以在5-10的情况下,我们得到5-9。第二个示例演示如何使用 list 函数的作用是使range函数在1到10之间每秒钟返回一个元素。所以它从一开始,跳过两个,等等。现在你可能想知道这和循环有什么关系。好吧,展示循环如何工作的一个简单方法是,如果我们使用范围函数!看一看:

>>> for number in range(5):
       print(number)

0
1
2
3
4

这里发生了什么?让我们从左到右读出来。对于5范围内的每个数字,打印该数字。我们知道,如果我们调用值为5的range,它将返回一个包含5个元素的列表。所以每次通过循环,它都会打印出每个元素。上面的for循环相当于以下内容:

>>> for number in [0, 1, 2, 3, 4]:
       print(number)

范围函数只是让它小一点。for循环可以循环任何类型的python迭代器。我们已经看到了它如何迭代列表。让我们看看它是否也可以遍历字典。

>>> a_dict = {"one":1, "two":2, "three":3}
>>> for key in a_dict:
       print(key)

three
two
one

当你使用 for 使用字典循环,您将看到它自动循环键。我们没必要说 for key in a_dict.keys() (尽管那样也会奏效)。 Python 为我们做了正确的事。您可能想知道为什么这些键的打印顺序与字典中定义的顺序不同。正如您在第3章中所记得的,字典是无序的,所以当我们迭代它时,键可以是任意顺序的。

现在,如果知道可以对键进行排序,那么可以在迭代它们之前进行排序。让我们稍微修改一下字典,看看它是如何工作的。

>>> a_dict = {1:"one", 2:"two", 3:"three"}
>>> keys = a_dict.keys()
>>> keys = sorted(keys)
>>> for key in keys:
       print(key)

1
2
3

让我们花点时间来了解这段代码的作用。首先,我们创建一个字典,它的键是整数,而不是字符串。然后我们从字典中提取钥匙。每当调用keys()方法时,它将返回一个无序的键列表。如果你把它们打印出来,发现它们是按升序排列的,那么这只是偶然的。现在我们有一个字典键的视图,它存储在一个名为 keys .我们将其分类,然后使用 for 循环到循环。

现在我们准备好让事情更有趣一点了。我们将循环一个范围,但我们只想打印出偶数。为此,我们希望使用条件语句,而不是使用范围的step参数。你可以这样做:

>>> for number in range(10):
        if number % 2 == 0:
            print(number)

0
2
4
6
8

你可能想知道这里发生了什么。百分号怎么了?在python中,%被称为模数运算符。当使用模数运算符时,它将返回余数。当你把一个偶数除以两,就没有余数了,所以我们把这些数打印出来。你可能在野外不会经常使用模数运算符,但我发现它有时很有用。

现在我们准备好了解 while 循环。

while循环

while循环也用于重复代码段,但它不会循环n次,而是只循环直到满足特定条件。让我们来看一个非常简单的例子:

>>> i = 0
>>> while i < 10:
        print(i)
        i = i + 1

while循环有点像条件语句。这段代码的意思是:当变量 i 小于十,打印出来。最后,我们将i的值增加一个。如果运行此代码,它应该打印出0-9,每个0-9都在自己的行上,然后停止。如果你移除我们增加i值的部分,那么你将得到一个无限循环。这通常是件坏事。应避免无限循环,称为逻辑错误。

有另一种方法可以打破循环。它是通过使用内置的 beak 。让我们看看它是如何工作的:

>>> while i < 10:
        print(i)
        if i == 5:
            break
        i += 1

0
1
2
3
4
5

在这段代码中,我们添加一个条件来检查变量 i 等于5。如果是这样,那么我们就跳出循环。正如您从示例输出中看到的,一旦达到5,代码就会停止,即使我们告诉while循环保持循环直到达到10。您还将注意到,我们更改了使用 += .这是一个方便的快捷方式,您也可以将其用于其他数学运算,如减法(-=)和乘法(==)。

内建的断路器被称为 流量控制工具 .还有一个叫 持续 基本上用于跳过一个迭代或继续下一个迭代。有一种方法可以使用它:

i = 0

while i < 10:
    if i == 3:
        i += 1
        continue

    print(i)

    if i == 5:
        break
    i += 1

这有点混乱,不是吗?基本上,我们添加了第二个条件来检查 i 等于3。如果是这样,我们会增加变量并继续执行下一个循环,这会有效地跳过将值3打印到屏幕上。和以前一样,当我们达到5的值时,我们就脱离了循环。

关于循环,我们还需要讨论一个主题,那就是 else 语句。

在循环中还有什么用

这个 else 循环中的语句仅在循环成功完成时执行。else语句的主要用途是搜索项:

my_list = [1, 2, 3, 4, 5]

for i in my_list:
    if i == 3:
        print("Item found!")
        break
    print(i)
else:
    print("Item not found!")

在这段代码中,当 i 等于3。这将导致跳过else语句。如果要进行实验,可以更改条件以查找不在列表中的值,这将导致执行else语句。老实说,在我做程序员的这几年里,我从未见过有人使用这种结构。我看到的大多数例子都是博客作者试图解释它的用途。我见过一些人使用它来在您搜索的iterable中找不到项时引发错误。您可以阅读一篇由Python核心开发人员撰写的相当深入的文章。 here .

总结

希望在这一点上,您可以看到Python循环中的值。它们使重复更容易理解。你很可能会看到 for 循环比 while 循环。事实上,我们要换一种方式 for 当我们学习理解时,在下一章中会用到循环!如果您仍然不确定这一切是如何工作的,在继续之前,您可能需要重新阅读本章。