当前位置:首页>python>一起学Python(005):从斐波那契数列看循环控制结构

一起学Python(005):从斐波那契数列看循环控制结构

  • 2026-09-16 18:27:29
一起学Python(005):从斐波那契数列看循环控制结构

学编程就像学做菜——光看菜谱没用,得亲自下厨。今天我们就用一道经典的“编程菜”——斐波那契数列,来彻底搞懂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?

欢迎【点赞】+【转发】❤️

最新文章

随机文章