1 案例1:斐波那契数列
1.1 问题
编写fib.py脚本,主要要求如下:
- 输出具有10个数字的斐波那契数列
- 使用for循环和range函数完成
- 改进程序,要求用户输入一个数字,可以生成用户需要长度的斐波那契数列
1.2 方案
斐波那契数列就是某一个数,总是前两个数之和,比如0,1,1,2,3,5,8。由于输出是一串数字,可以用列表的结构存储。开始时,列表中有两个值,即0,1。然后通过循环向列表中追加元素,追加元素总是列表中最后两个元素值之和。
本例使用的是列表,不能使用元组,因为列表是一个可变类型,而元组是不可变类型。各种数据类型的比较如下:
按存储模型分类
标量类型:数值、字符串
容器类型:列表、元组、字典
按更新模型分类:
可变类型:列表、字典
不可变类型:数字、字符串、元组
按访问模型分类
直接访问:数字
顺序访问:字符串、列表、元组
映射访问:字典
由于循环次数是确定的,可以使用for循环。python中的for循环与传统的for循环(计数器循环)不太一样,它更象shell脚本里的foreach迭代。python中的for接受可迭代对象(例如序列或迭代器)作为其参数,每次迭代其中一个元素。
for循环经常与range()函数一起使用。range函数语法如下:
range([start,] stop[, step])
range函数将返回一个列表,如果列表没有给定起始值,那么起始值从0开始,结束值是给定的结束值的前一个值,另外还可以设置步长值。例:
- >>> range(10) #没有给定起始值则从0开始,结束值为9
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- >>> range(5,10) #给定起始值,列表的第一个值就是给定的起始值
- [5, 6, 7, 8, 9]
- >>> range(0, 10, 2) #给定步长值为2,列出10以内的偶数
- [0, 2, 4, 6, 8]
- >>> range(1, 10, 2) #给定起始值、步长值,列出10以内的奇数
- [1, 3, 5, 7, 9]
当将脚本改成交互式运行时,需要注意,用户输入的数字,python仍然将其视为字符而不是整型数字,需要使用int()将用户输入做类型转换。
在进行运算时,应使得参与运算的对象属于同一类型,否则如果python无法进行隐匿类型转换将会出现异常。
>>> '30' + 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
上面的代码之所以出现错误,是因为不能将字符串与数字进行加法或拼接运算。如果希望将其拼接,可以使用下面的方式:
- >>> '30' + str(3)
- '303'
如果希望将其全作为数字进行相加,可以使用下面的方式:
>>> int('30') + 3
33
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:编写固定输出的斐波那契数列
- [root@py01 bin]# vim fibs