今天学习廖雪峰老师的python,学习到了生成器,最后老师给了一道题
输出杨辉三角
# -*- coding: utf-8 -*- def triangles():
# 期待输出:
# [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('测试失败!')
自己想了半天没想出来,看评论区的第一个代码异常简洁
def triangles():
L = [1]
while True:
yield L
L= [(L + [0])[i] + ([0] + L)[i] for i in range(len(L)+1)]
现来解析一下这个代码
L=[1]为初始状态
重点是
L= [(L + [0])[i] + ([0] + L)[i] for i in range(len(L)+1)]
这一句是列表生成式
L+[0] 和 [0]+L 分别是在列表最前面和最后面加上一个0
len(L)+1则为下一层的个数
两两进行错位相加得到下一行的列表
第二层就是 [1,0]
[0,1]
相加得[1,1]
第三层为 [1,1,0]
[0,1,1]
相加得[1,2,1]
以此类推
最后
以上就是欣慰中心最近收集整理的关于Python-杨辉三角输出的全部内容,更多相关Python-杨辉三角输出内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复