斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。简单地归结斐波那契数列的规律为:第1个数值为0,第2个数值为1,之后的每个数值都是位于它之前的两个数值的和。

如下python代码用于每隔一秒打印一个斐波那契数列数字,并且将数列保存到制定的文件中:

# !/usr/bin/env python
# -*- coding: utf-8 -*-

import time

def fbis(num):
    result = [0, 1]
    for i in range(num - 2):
        result.append(result[-2] + result[-1])
    return result

def main():
    result = fbis(10)
    fobj = open('result.txt', 'w+')
    for i, num in enumerate(result):
        print("第 %d 个数是: %d" % (i, num))
        fobj.write("%d" % num)
        time.sleep(1)

if __name__ == '__main__':
    main()

代码解析:

  • 一般情况下,在python中用“#”标识注释行,但有两种特殊情况:当python代码运行在linux系统中时,
# !/usr/bin/env python

用于告诉系统python解释器的位置;

# -*- coding: utf-8 -*-

用于标识本文件用UTF-8编码。

  • import语句用于导入包。本例中导入了time包,因为之后的sleep()函数位于其中。

python用缩进标识代码块,因此一个块内的每行代码的前导空格必须一致,否则执行时解释器会报错。

  • range(num)函数用于生成从0到num-1的数字序列。
  • python的内置函数open()用于打开文件,其第1个参数是被打开的文件名,第2个参数是打开的方式,“w+”表示打开代写入的文件。函数main()将打开的文件句柄放在fobj变量中。
  • enumerate()会将数组或者列表组成一个索引序列,其返回值内包含两个变量的迭代器,第1个是序列号,第2个是数组/列表元素。

技巧:用enumerate生成带索引的迭代序列

  • 与其他高级语言一样,判断逻辑用if语句表达。本例中的if语句用于判断代码是被其他模块导入还是直接被执行;如果是直接被执行,则调用main()函数。
  • _ name _ 是python的只读内置变量。在模块中访问该变量时,其随着模块的被调用方式的不同而有不同的值:当该模块被直接执行调用时,_ name _ 的值为_ main _ ;当该模块被其他模块用import语句调用时,该值为当前模块名。

用本例中的if _ name _ == ‘_ main _ ‘:main()的方法启动main()函数是python的常用方法。。在python中,所有内置变量都是以“前带两个下划线 _ ,后带两个下划线 _ ”的方式命名。另一个常用的内置变量是_ class _ ,在类内部使用时其内容为当前类名。