通过前面三篇的学习,相信大家对Python已经有了入门,今天我们来实践一下:打印斐波纳契数列。

什么是斐波纳契数列?

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n – 1)+F(n – 2)(≥ 2,∈ N*)。

用Python实现打印斐波纳契数列是非常简单的,代码如下:

#!/usr/bin/python3
 
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1 # 等价于:n=0,m=1,a=n,b=m,也就是 a=0, b=1
while b < 10:
    print(b)
    a, b = b, a+b # a=b, b=a+b

这个例子中,我们用到了复合赋值语句。在第一行的复合赋值语句中,变量 a 和 b 同时得到新值 0 和 1。最后一行再次使用了同样的方法,可以看到,右边的表达式会在赋值变动之前执行。右边表达式的执行顺序是从左往右的。

例子中,还用到了While循环语句。Python 中 while 语句的一般形式:

while 判断条件(condition):
    执行语句(statements)……

执行流程图如下:

需要注意的是,在Python中,没有 do……while 这样的循环。While循环还支持else,当 while … else 在条件语句为 false 时执行 else 的语句块。

我们来看下面的例子:

#!/usr/bin/python3
 
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

表弟问我,我们在其他编程语言中都学过自增(+)、自减(–),上面这个例子程序中

print (count, " 小于 5")
count = count+1

为什么不换成

print (count++, " 小于 5")

然而,在Python中是没有 ++ 和 -- 的。要实现自增和自减的话,我们可以使用如下操作:

a = a + 1
# 或
a += 1

这是因为在Python中,数字类型是不可变数据。也就是数字类型数据在 内存 中是不会发生改变,当变量值发生改变时,会新申请一块内存赋值为新值,然后将变量指向新的内存地址。

我们看下面的例子:

>>> a = 10
>>> id(a)
140530470127960
>>> a += 1
>>> id(a)
140530470129080

可以看到当 a 的值发生改变时,a 指向的内存地址也发生了改变。而在C语言中,a 指向的内存地址并不会发生改变,而是改变内存的内容。

+= 是改变变量,相当于重新生成一个变量,把操作后的结果赋予这个新生成的变量。
++ 是改变了对象本身,而不是变量本身,即改变数据地址所指向的内存中的内容。

所以,Python中不存在自增(++)或自减(–)。

但是,有时候在Python程序中,我们还会看到存在 ++i 这种形式,这其实不是自增,只是简单的表示正负数的正号而已。正正得正,负负得正,所以 ++i 和 --i 都是 i 。