180 lines
8.3 KiB
Markdown
180 lines
8.3 KiB
Markdown
# Python For 循环和 While 循环
|
||
|
||
> 原文:[https://python.land/introduction-to-python/python-for-loop](https://python.land/introduction-to-python/python-for-loop)
|
||
|
||
我们学习了如何用条件语句 if 和 else 来改变程序的流程。另一种控制流程的方法是使用 Python for-loop 或 Python while-loop。本质上,循环允许你重复一段代码。
|
||
|
||
目录
|
||
|
||
|
||
|
||
* [Python For-loop](#Python_For-loop "Python For-loop")
|
||
* [Python for 循环和列表](#Python_for-loops_and_lists "Python for-loops and lists")
|
||
* [Python While-loop](#Python_While-loop "Python While-loop")
|
||
* [无限循环](#Infinite_loops "Infinite loops")
|
||
* [更多类型的循环](#More_types_of_loops "More types of loops")
|
||
|
||
|
||
|
||
## Python For-loop
|
||
|
||
在 Python 中有两种创建循环的方法。我们先来看看 Python 的 for-loop。for 循环遍历您提供给它的对象的各个元素。如果这听起来很难,一个例子将有望澄清这一点:
|
||
|
||
```py
|
||
>>> for letter in 'Hello':
|
||
... print(letter)
|
||
...
|
||
H
|
||
e
|
||
l
|
||
l
|
||
o
|
||
```
|
||
|
||
我们在这里偶然发现了两个需要解释的概念:可迭代性和对象。
|
||
|
||
**Iterable**
|
||
|
||
An iterable is an object in Python that can return its members one at a time.
|
||
|
||
正如您在示例代码中看到的,一个文本字符串是可迭代的。大多数 [Python 的数据类型](https://python.land/python-data-types)在某种程度上都是可迭代的。如果你想知道所有的基本细节,请前往关于[迭代器](https://python.land/deep-dives/python-iterator)的页面。如果您是编程新手,我建议您继续阅读这里的内容,稍后再讨论迭代器。
|
||
|
||
我们需要解决的下一个问题是:对象。这是一个很大的主题,在本教程中有自己的章节: [Python 类和对象](https://python.land/objects-and-classes)。你现在不需要学习它来理解 Python for-loops。知道 Python 中的一切都是对象就够了,对象有一定的类型和一定的属性。可迭代是这些属性之一。
|
||
|
||
所以我们知道 for 循环可以循环遍历 iterable 对象。通过逐个返回其成员,使其在一个[变量](https://python.land/introduction-to-python/variable)(在上面的例子中是变量`letter`)中可用,您可以用 for 语句循环遍历 iterable 的每个元素。
|
||
|
||
Python 中 for 循环的通用模板是:
|
||
|
||
```py
|
||
for <variable> in <iterable>:
|
||
... do something with variable
|
||
```
|
||
|
||
在每次迭代中,来自`iterable`的一个元素被分配给`variable`。这个变量存在,并且只能在循环内部使用。一旦没剩下什么,循环就停止,程序继续执行下一行代码。
|
||
|
||
## Python for 循环和列表
|
||
|
||
这是研究新数据类型的理想时机:[列表](https://python.land/python-data-types/python-list)。Python 列表可以包含零个或多个对象。这是 Python 编程中经常使用的数据类型。在其他编程语言中,通常没有列表这样的东西。大多数语言都提供数组,但是数组只能包含一种类型的数据。
|
||
|
||
[Python 也有数组](https://docs.python.org/3/library/array.html),但我们不会在本课程中讨论它们。简而言之:数组只能包含一种类型的数据(比如数字),但是它们在存储数据方面更有效。另一方面,列表可以混合存储所有类型的数据,非常灵活,但会牺牲一些性能。关于列表的详细解释,你可以阅读我关于 [Python 列表](https://python.land/python-data-types/python-list)的文章。如果你是初学者,我建议你继续阅读。
|
||
|
||
列表就像字符串一样,是可迭代的;因此,它们与 for 循环配合得非常好:
|
||
|
||
```py
|
||
>>> mylist = [1, 'a', 'Hello']
|
||
>>> for item in mylist:
|
||
... print(item)
|
||
...
|
||
1
|
||
a
|
||
Hello
|
||
```
|
||
|
||
让我们再试一次,但这一次是在一个互动的面包屑中,所以你可以玩它:
|
||
|
||
[https://crumb . sh/embed/jcfk 2 va 3 vlb](https://crumb.sh/embed/jcfK2VA3vLb)
|
||
|
||
有几点需要注意:
|
||
|
||
* 我们用引号创建列表。
|
||
* 它的内容是您喜欢的任何类型的对象,用逗号分隔,它们不需要属于同一类型。
|
||
* 我们也可以手动访问列表中的单个元素。
|
||
|
||
Thank you for reading my tutorials. I write these in my free time, and it requires a lot of time and effort. I use ads to keep writing these *free* articles, I hope you understand! **Support me by disabling your adblocker on my website** or, alternatively, **[buy me some coffee](https://www.buymeacoffee.com/pythonland)**. It's much appreciated and allows me to keep working on this site!
|
||
|
||
一个列表可以包含我们到目前为止看到的所有类型:数字、字符串、布尔值,甚至其他列表。事实上,如果你愿意,你可以创建一个列表列表!正如您在交互式示例中看到的,我们还可以访问列表中的单个元素。记住在计算机科学中,我们从 0 开始计数。所以`mylist[0]`给我们第一个元素,`mylist[1]`给我们第二个元素,以此类推。
|
||
|
||
以下是您可以在 REPL 或上面的交互式代码示例中尝试的一些事情:
|
||
|
||
```py
|
||
>>> mylist = [1, 2, 'Hello', ['a', 'b'] ]
|
||
>>> mylist[0]
|
||
1
|
||
>>> mylist[0] + mylist[1]
|
||
3
|
||
>>> mylist[2]
|
||
'Hello'
|
||
>>> mylist[3][0]
|
||
'a'
|
||
```
|
||
|
||
从上一个例子中,您可以看到如何访问嵌套列表。关于 Python 列表的广泛的[教程可以在后面的 Python 教程中找到。](https://python.land/python-data-types/python-list)
|
||
|
||
## Python While-loop
|
||
|
||
虽然 Python 中的 for 循环有点难以理解,但是因为有了像 [iterability](https://python.land/deep-dives/python-iterator) 和 [objects](https://python.land/objects-and-classes) 这样的新概念,While 循环实际上要简单得多!它的模板如下所示:
|
||
|
||
```py
|
||
while <expression evaluates to True>:
|
||
do something
|
||
```
|
||
|
||
你应该这样理解:“当这个表达式的值为`True`时,继续做下面的事情”。
|
||
|
||
让我们来看一个真实的例子:
|
||
|
||
```py
|
||
>>> i = 1
|
||
>>> while i <= 4:
|
||
... print(i)
|
||
... i = i + 1
|
||
...
|
||
1
|
||
2
|
||
3
|
||
4
|
||
```
|
||
|
||
我们看到在`while`语句之后有一个表达式:`i <= 4`。只要这个表达式的值为`True`,while 循环内部的块就会重复执行。
|
||
|
||
在上面的例子中,我们从`i = 1`开始。在循环的第一次迭代中,我们打印`i`并增加 1。只要`i`小于或等于 4,这种情况就会一直发生。print 语句的输出确认这个循环运行了四次。
|
||
|
||
这里有一个互动的例子,让你自己尝试一下:
|
||
|
||
[https://crumb.sh/embed/itwRMBZbEoY](https://crumb.sh/embed/itwRMBZbEoY)
|
||
|
||
Python while 循环
|
||
|
||
## 无限循环
|
||
|
||
有时你希望你的软件继续运行。在这种情况下,无限循环会有所帮助。让我们用 Python 创建这样一个无限循环:
|
||
|
||
```py
|
||
>>> while True:
|
||
... print("Help I'm stuck in a loop!")
|
||
...
|
||
```
|
||
|
||
为什么这是一个无限循环?请记住,while 接受一个表达式,只要该表达式的值为`True`,就一直重复代码。因为非常简单的表达式'`True`'总是`True`,这个循环永远不会停止。
|
||
|
||
### 走出无限循环
|
||
|
||
使用 while 循环,很容易出错并发现自己陷入了一个无限的 while 循环。这意味着由于某种原因,表达式永远不会计算为 False。它发生在我们最好的人身上。同时按下 **control + c** 可以脱离这种情况。既然知道了如何故意制造无限循环,那就人为制造这样一种情况吧。点击**控制+ c** 停止以下循环:
|
||
|
||
```py
|
||
>>> while True:
|
||
... print("Help I'm stuck in a loop!")
|
||
...
|
||
```
|
||
|
||
输出将如下所示:
|
||
|
||
```py
|
||
Help I'm stuck in a loop!
|
||
Help I'm stuck in a loop!
|
||
Help I'm stuck in a loop!
|
||
Help I'm stuck in a loop!
|
||
Help I'm stuck in a loop!
|
||
Help I'm stuck in a loop!^C
|
||
Traceback (most recent call last):
|
||
File "<stdin>", line 2, in <module>
|
||
KeyboardInterrupt
|
||
```
|
||
|
||
如果你仔细观察,你会看到错误前的字符`^C`,意味着`control + c`在该点被按下。这个组合键会让你摆脱程序无限期运行的大多数情况,所以记住它是有好处的!
|
||
|
||
无限循环在 for 循环中不太常见,因为大多数可迭代对象会在某个时候用完要迭代的元素。然而,如果你发现自己陷入了一个无限的 for 循环,你可以用同样的技巧来摆脱它。
|
||
|
||
## 更多类型的循环
|
||
|
||
在本教程的后面,您还将了解到 [Python 列表理解](https://python.land/deep-dives/list-comprehension)。列表理解是 Python 中一个强大的构造,我们可以用它来基于现有的列表创建一个列表。如果您是编程新手,您应该先学习其他基础知识,不过我建议您继续学习下一部分。 |