斐波那契数列(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 _ ,在类内部使用时其内容为当前类名。