Python中杨辉三角的学习

今天在学习到廖雪峰教程例中的杨辉三角的时候,很是废了一番脑筋。看了下网上的实例,结合自己的情况,发现思路卡死的原因。

因为是过来的,对list和理解不够,就特别容易卡死。

还有一个错误是对练习题题目没有理解透,要求是

n = 0
results = []
for t in triangles():
    print(t)
    results.append(t)
    n = n + 1
    if n == 10:
        break

下输出结果,也就是做一个生成器

triangles()

然后用上面的代码将他输出出来,而我开始的理解还是C的方式,就是一个函数打印出所有行。理解错了。

除了这两点,其实就比较容易了。

打印出来的是个list,第一行一个元素,定义 

l = [1]  

第二行是2个,这里要开始理解杨辉三角的规律了。每一行的第一列和最后一列是[1],最重要的是运算基数,这个是不变的。

所以可以先假定第二行是

l = [1] + [1]   

来到第三行就可以看规律了

[1, 2, 1]

第三行开始,每一行的的第二个数开始是上一个list的相邻相加,加到最末位,也就是需要这个len(list) -1次运算

这里就要用到列表生成式了。

[1]+[ l[i]+l[i+1] for i in range(len(l)-1)] + [1]

这个是这个题目最关键的一个点了,len-1个数,0+1然后是1+2……

再返回去看第一行,第二行。

第一行可以单独拿出来,可以不考虑。

第二行带入到上面的生成式,len(l)-1=0,也就是直接跳出,也是成立的。

完整的写下来就是

def triangles():
    l = [1]
    while True:
        yield l
        l = [1] + [l[i] + l[i+1] for i in range(len(l)-1)] + [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('测试失败!')

最后,感谢廖雪峰先生的无私奉献!

 

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/tliang1984/article/details/81359612
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞