python练习题——generator

题目

杨辉三角定义如下:

      1
     / \
    1   1
   / \ / \
  1   2   1
 / \ / \ / \
1   3   3   1
/ \ / \ / \ / \
1   4   6   4   1
/ \ / \ / \ / \ / \
1   5   10  10  5   1

把每一行看做一个list,试写一个generator,不断输出下一行的list。

期待输出:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
n = 0
results = []
for t in triangles():
print(t)
results.append(t)
n = n + 1
if n == 10:
break
if results == [
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1],
[1, 8, 28, 56, 70, 56, 28, 8, 1],
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:
print(‘测试通过!’)
else:
print(‘测试失败!’)

思路

题目要求利用generator来写,可以看出来代码中的yield L,其中的L是一个list,依次是[1]、[1,1]、[1,2,2]等等,代码如下:

def triangles():
    L = [1] # 给L赋初始值
    while True:
        yield L # generator运行yield后就停止,下次从yield之后接着运行
        L = [L[i+1]+L[i] for i in range(len(L)-1)] # 这里生成的是除去两边1之后的中间值,
        L.insert(0,1) # 将1插入到L的第一个位置
        L.append(1) # 将1插入到L的最后一个位置

错误总结:之前一直将L[i]写成了L(i)

猜你喜欢

转载自blog.csdn.net/lwycc2333/article/details/80054940