python生成器练习题目

斐波那契数列

F[n]=F[n-1]+F[n-2] (n>2,F[0]=1,F[1]=1)

程序分析

初第一个数和第二个数,其余数字均由前两个数相加得到。

代码实现

使用函数实现

1
2
3
4
5
6
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a+b
n += 1

输出结果为

1
2
3
4
5
6
7
>>> fib(6)
1
1
2
3
5
8

当然,采用生成器方式也可以实现

1
2
3
4
5
6
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a+b
n += 1

此时返回结果为生成器对象,调用时候可以使用next()或者for循环

1
2
3
4
5
6
7
8
9
>>> for i in fib(6):
... print(i)
...
1
1
2
3
5
8

杨辉三角

定义见下图

1
2
3
4
5
6
7
8
9
10
11
          1
/ \
1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
/ \ / \ / \ / \
1 4 6 4 1
/ \ / \ / \ / \ / \
1 5 10 10 5 1

程序分析

每一行看做一个list

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import operator


def triagles(n):
a = [1]
while len(a) < n:
yield a
c = [0] + a
d = a + [0]
a = list(map(operator.add, c, d))


m = triagles(6)
for x in m:
print(x)

输出结果

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]

Recommended Posts