Python_斐波那契数列
斐波那契数列
斐波那契数列有称为黄金分割数列。
在数学上,斐波那契数列可以以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2,n属于正整数)。
简单的归结斐波那契数列为:第1个数值为0,第2个数值为1,之后的每个数值是位于它之前的两个数值之和。
代码实现
每隔一秒打印一个“斐波那契”数列数字,并且将数列保存到指定的文件中。
1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import time 5 6 7 def fbis(num): 8 result =[0,1] 9 for i in range(num-2): 10 result.append(result[-2]+result[-1]) 11 return result 12 13 14 def main(): 15 result = fbis(10) 16 fobj = open("./01_fbis_result.txt",'w+') 17 for i ,num in enumerate(result): 18 print("第 %d 个数是: %d"%(i,num)) 19 fobj.write("%d "%num) 20 time.sleep(1) 21 22 23 if __name__ == '__main__': 24 main()
代码解析
- 一般情况下,在Python中用 # 标识注释行。但有两种特殊情况,在Python代码运行在Linux系统时, #!/user/bin/env python 用于告诉Python解释器的位置; # -*- coding:utf-8 -*- 用于标识文本文件用UTF-8格式编码。
- import 语句用于导入包。本例中导入了 time 包,因为之后的 sleep() 函数位于其中。
- Python的函数定义使用 def 关键字完成。冒号“:”用户代码块开域。代码块通过缩进对齐代表代码逻辑,而不是使用大括号。因为没有了额外的字符,程序的可读性更高,而且缩进完全能够清楚地表达一个语句属于哪个代码块。本例中定义了两个函数:fbis 和 main。
注意:Python用缩进标识代码块,因此每一个代码块内的每行代码的前导缩进空格必须一致,否则缩进执行时解析容器会报错。
- 函数参数无需定义类型,比如本例中fbis的参数是num。
- List是Python中常用的列表类型,Python中的列表类型用中括号对“[ ]”定义。本例 fbis() 中的result变量是list的实例,用于保存被生成的数列。
- range(num) 函数用于生成0到num-1的数字序列。
- [for ... in ...]语句是循环流程语句。在fbis()的for语句中,生成一个从0到num-2-1的循环,每个循环体中计算一个数值并加入到result列表中。
- 列表变量的负数索引用于获取列表中倒数的元素。例如本例中result[-1]意为获取result的倒数第1个元素。
- 函数main()中用参数10调用fbis()函数,生成10个斐波那契数字。
- Python的内置函数open用于打开文件,其第1个参数是被打开文件的文件名,第2个参数是打开的方式。“w+”表示打开待写入的文件,函数main()将打开的文件句柄放到fobj变量中。
- enumerate()会将数组或列表组成一个索引序列,其返回值内包含两个变量的迭代器,第1个是序列号,第2个是数组、列表元素。
技巧:用enumerate生成带索引的迭代序列。
- 在Python中可以调用print语句打印输出,可以用print语句显示变量的字符串表示,或者仅使用变量名查看该变量的原始值。Python的print语句与字符串格式运算符(%)结合使用,可以实现字符串替换功能,这一点和C语言的printf()函数非常相似。字符串中的前缀"u"表示字符串用UTF-8格式编码。
注意:print中的格式运算符(%)后面的被替代变量一定要放在小括号内。
- 用文件句柄的write()函数可以向文件写入数据。类似地,文件句柄还有read()函数可以读入数据。
技巧:用open()函数打开文件,用write()函数向文件写入内容,用read()函数从文件中读入内容。
- 用time包的sleep()函数可以让程序暂停一段时间,本例中输入参数1以指定暂停1秒。
- 与其他高级语言一样,判断逻辑用if语句表达。本例中的if语句用于判断代码是被其他模块导入还是直接被执行;如果是直接被执行,则调用main()函数。
- __name__ 是Python的只读内置变量。在模块中访问该变量时,其随着模块被调用的方式不同而有不同的值:当该模块被直接执行调用时,__name__ 的值为 __main__ ;当该模块被其他模块用import语句调用时,该值为当前模块名。
技巧:用本例中的 if __name__ == '__main__': main()的方法启动main()函数值Python的常用方法。在Python中,所有的内置变量都以"前带两个下划线_,后带两个下划线_"的方式命名。另一个常用的内置变量是 __class__ ,在类内部使用时其内容为当前类名。
将代码保存为 fbi.py 文件,无需编译程序,直接用python命令执行程序,其结果如下:
文件中的内容