廖雪峰 python教程
生成器章节,有一道杨辉的题目。
杨辉三角定义如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
def triangles():
result = [1]
n = 0
while n < 20:
yield result
l = list(result)
l.append(0)
print(l)
result = [l[i] + l[i - 1] for i in range(len(l))]
n = n + 1
return 'done'
这里展示了 每一次的l(末尾添加0为了放便计算下一行 例如 l[-1] + l[0] = 0 + 1 = 1) [1]
[1, 0]
[1, 1]
[1, 1, 0]
[1, 2, 1]
[1, 2, 1, 0]
[1, 3, 3, 1]
[1, 3, 3, 1, 0]
[1, 4, 6, 4, 1]
[1, 4, 6, 4, 1, 0]
[1, 5, 10, 10, 5, 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('测试失败!')