上一章节,我们介绍了布尔逻辑运算和分支结构(或条件判断),这一章节,我们将介绍另一个基于布尔运算的代码结构——循环。
计算机被创作的目的之一就是帮人类高效、快速地解决重复且枯燥繁琐的工作,例如计算一系列复杂数据的加和、重复性地从网页上获取信息等。这些工作简单,没有太大难度,但是架不住它繁琐、容易出错,最重要的是它们都是机械化的重复性工作。因此,计算机必须要能辅助解决这个问题,而解决问题的核心就是循环。
一、循环的表达方式
循环的目的是重复一定次数去处理某几个计算指令。循环的次数则是一个比较灵活的表达形式,例如可以设置为循环N次,也可以设定为当某个条件达成等。这些循环条件则依赖于布尔逻辑:
- 循环N次:设定一个迭代(循环)计数变量 I 初始化为0(编程通常以0为序列的初始),给定固定值N为迭代次数最大值。每一次循环,I增加1,直到“I == N – 1”(注意I以0开始,因此当为N – 1时,已经循环至第N次),循环结束。这种循环的方式通常是遍历循环。
- 设定某个条件:给定这个达成条件的判断语句,例如布尔计算式、某个函数的返回值等。当这个条件达成(布尔值或结果可以转换为True或False),则循环结束。这类循环则可以称为条件循环。
二、遍历循环或for循环
在多数编程语言中,for循环是相对比较常见的循环方法。举个例子,要计算n(非零)的阶乘,流程图为:

按照流程图,C++中代码可以写为:
# include<iostream>using namespace std;intmain(){int n;// 输入一个整数 ncin >> n;// 计算 n 的阶乘int factorial = 1;for (int i = 1; i <= n; ++i) {factorial *= i;}// 输出cout << factorial << endl;return 0;}
从这段代码的for循环可以看出,循环以“i = 1”开始,至“i = n”结束,即循环n次。
for循环通常是一个遍历循环,通常有一个可迭代的变量数组存入了一系列的数据用于给某个临时变量逐个取值,例如计算阶乘,可以视为包含数字1到n的整数数组, i在循环时依次取这个数组中的值;同时会发现,for循环依赖于遍历边界,例如上面i的起始值以及与n的大小关系。
但是,Python的for循环相对比较简单,用关键词“in”来实现对某个可迭代类型变量(list、tuple、set、dict等)的遍历。如上面的阶乘计算,可以写为:
n = int(input(" >> "))factorial = 1for i in range(1, n + 1):factorial = factorial * iprint(factorial)
由于Python不支持类似C/C++中的遍历边界写法,因此需要改变一下。上述内容中,我们提到遍历是一个数组变量在提供数据,因此我们以n来生成一个包含1到n的数组,即range函数(返回从0至N或从给定的min至max的整数可迭代变量,N或max不包含在返回结果中);在代码运行时,Python会依次自动将数组中的值赋给i,从而完成后续的计算。
for循环的结构大致为:
for val in value_sequence:do_something(val)
依赖for循环,我们可以有很多的实际案例:
# 遍历所有元素fruits = ['apple', 'banana', 'cherry']for fruit in fruits:print(fruit, end=" ")# Output: apple banana cherry# 循环添加元素arange = []for i in range(10):arange.append(i)print(arange)# Output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
与if-else相同,Python的循环同样依靠缩进来将循环中的内容放在相同代码块或层级中,确保程序正确执行。
往期回顾:
用Python Pygame做小游戏|从设计到算法,手把手复刻经典款
Python游戏开发神器|Pygame库全面解析,从基础到进阶全吃透(下集)
Python学习笔记——从入门到报废(八、逻辑判断与分支结构(下))