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
代码
def triangles():
max = 999
n = 0
L = [] # 工具列表
r = [] # 最终输出
while n < max:
if n == 0:
L.append(1)
yield L
else:
for i in range(len(L)):
if i == 0: # 第一行第一个总是1
r.append(1)
if i != 0:
x = L[i - 1] + L[i]
r.append(x)
if i == len(L) - 1: # 第一行最后一个总是1
r.append(1)
L = r # 不赋值的话,L的大小一直不变,不能当计算中间工具了
yield r
r = [] # 每输出一行list,就要把结果清空,因为append是在末尾添加元素
n = n + 1
# 测试代码
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
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('测试失败!')