
学编程就像学做菜——光看菜谱没用,得亲自下厨。今天我们就用一道经典的“编程菜”——斐波那契数列,来彻底搞懂Python中的循环控制结构。
无论你是编程小白还是想巩固基础,跟着这篇文章一步步拆解代码,保证让你对for循环和while循环的理解上升一个台阶。
什么是斐波那契数列?
斐波那契数列是这样一个序列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
发现规律了吗?从第三项开始,每一项都等于前两项之和。
用数学公式表示就是:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) (n ≥ 2)
这个数列在自然界中随处可见:向日葵的种子排列、贝壳的螺旋、甚至音乐的节奏。而在编程界,它是学习循环和递归的经典案例。
用for循环实现斐波那契数列
我们先从最简单的开始:输出前N个斐波那契数。
完整代码如下:
n = int(input("你想输出前几个斐波那契数?请输入:")) a, b = 0, 1 print(f"斐波那契数列的前{n}项是:") for i in range(n): print(a, end=" ") a, b=b, a+b |
第1行:n = int(input("你想输出前几个斐波那契数?请输入:"))
input()让用户输入数字,但输入的是字符串
int()把字符串转换成整数
比如用户输入10,n就等于10
第2行:a, b = 0, 1
这是Python特有的多重赋值
相当于:a = 0 且 b = 1
a代表当前的斐波那契数,b代表下一个数
第4行:for i in range(n):
for循环开始,range(n)会生成0到n-1的数字
循环体会执行n次(i从0到n-1)
第5行:print(a, end=" ")
输出当前的a值
end=" "让输出不换行,用空格隔开,而不是默认的换行
第6行:a, b = b, a + b
这是整个程序的核心!一行代码同时更新两个变量
右边的b和a+b先计算,再赋值给左边的a和b
相当于同时执行:
新a=旧b
新b=旧a+旧b

用while循环实现
有时候我们不知道要输出多少个,而是想输出所有小于某个数的斐波那契项。
用while循环输出小于1000的斐波那契数,完整代码如下:
a, b = 0, 1 print("小于1000的斐波那契数有:") while a < 1000: print(a, end=" ") a, b = b, a + b |
第3行:a, b = 0, 1
同样初始化前两项
第5行:while a < 1000:
while循环开始,只要a < 1000,就重复执行循环体
这里我们不知道要循环多少次,所以用while更合适
第6行:print(a, end=" ")
输出当前的a值,并且不换行
第7行:a, b = b, a + b
和for循环一样,更新a和b

代码中的控制结构分析
让我们看看这段简单的代码里包含了哪些控制结构:
1. 顺序结构
代码从上到下执行:
先接收用户输入
然后初始化变量
然后执行循环
最后输出结果
2. 循环结构(两种形式)
for循环:当知道确切次数时使用
while循环:当只知道条件,不知道次数时使用
常见错误与调试
错误1:忘记更新变量
a, b = 0, 1 for i in range(10): print(a) # 忘记写 a, b = b, a + b |
后果:永远输出0,形成无限循环(对于while循环来说)或者永远输出同一个值。
错误2:赋值顺序写反
a, b = 0, 1 for i in range(10): print(a) a = b b = a + b # 错误!这时候a已经被更新了 |
这会导致计算错误,因为第二行用的已经是新a了。
正确写法必须是同时赋值:a, b = b, a + b
错误3:起始值不对
有人可能会从1开始:
a, b = 1, 1 # 这样会得到 1,1,2,3,5... 少了0 |
取决于你想要什么,如果从0开始,必须用0,1。
动手试试吧
1. 修改程序,输出斐波那契数列的前20项
2. 输出斐波那契数列中所有小于2000的项
3. 找出第1个大于10000的斐波那契数
【上周答案公布】找出以下代码程序的错误

结果:

第二个:
代码:

结果:

第三个:
代码:

结果:

精彩回顾:
一起学Python(004):Python程序三种控制结构:顺序、分支和循环
一起学Python(003):Python代码书写规则:那些让程序崩溃的“小细节”
一起学Python(002):计算机的“数字秘密”——0和1如何统治世界?
一起学Python(001):为什么文科生也要学Python?
欢迎【点赞】+【转发】❤️
