# 2.5.2 再谈循环

在介绍到条件和循环之前，我们见到的程序都是按顺序一行一行执行的， 条件和循环则不同。

## 跳转指令

循环有终止条件，也就是说，每次循环都会进行一次条件判断， 通过条件判断的结果决定下一条执行哪里。

```
语句1
语句2
if 不满足条件 then 跳转到语句5
语句3
语句4
跳转到if
语句5
语句6
```

一个循环的结构可以拆解成上面的模式。在Python中，`if 不满足条件 then 跳转到语句5`和`跳转到if`被 一个`while`语句替换了。所以，要实现循环，只需要条件语句，再加上“跳转”指令即可。 汇编语言中便是这么做的。

一些“不那么”高级语言，如C，提供了“跳转”。许多比较“现代”的语言如Python则没有显式的“跳转”， 因为这些“跳转”通常被诟病降低可读性、容易出错等。 但Python仍可以实现这样的功能， 参见[Python文档](http://python.usyiyi.cn/documents/python_352/faq/design.html#yiyi-247) （这里用到了“异常”，下一节将会介绍）。

## `do-while`循环

一些语言中提供了`do-while`循环，

![\`do-while\`循环流程图](http://c.biancheng.net/cpp/uploads/allimg/120129/1-120129205201429.gif)

另外一些语言，比如C以及受C影响的C++，C#，Java等一票语言， 它们的`for`循环长这样：`for(语句1; 条件; 语句2) {循环体}`。 翻译成Python，大概是

```
语句1
while 条件:
    循环体
    语句2
```

这两种循环的形式比较直观地把汇编语言中的循环翻译成了高级语言。 但在高级语言的语境下有时候会显得比较多余。

也有人[提议](https://www.python.org/dev/peps/pep-0315/)在Python中加入`do-while`，但被拒绝。 [这里](https://mail.python.org/pipermail/python-ideas/2013-June/021610.html)有一段解释。

翻译一下大概就是觉得没必要。

**Task For Tutors**

* 以你的编程经验，这个问题怎么看？

## break跳出两层循环

之前提到`break`语句可以跳出循环，有个在许多语言中都有些令人头疼的问题，如何跳出两层循环， [这里](https://www.zhihu.com/question/37076998)给出了一些解答。
