栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python之生成器 (generator)应用: 杨辉三角

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python之生成器 (generator)应用: 杨辉三角

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 前言
    • 最近学python,写了足足1个小时才写对,再去看大佬的写法直接来个降维打击,我是不是不适合敲代码?
  • 一、问题?
  • 二、自己写的通俗(垃圾)代码
  • 大神写的,5行就完事
  • 总结


前言 最近学python,写了足足1个小时才写对,再去看大佬的写法直接来个降维打击,我是不是不适合敲代码?

提示:以下是本篇文章正文内容,下面案例可供参考

一、问题?

杨辉三角定义如下:

      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():
    L = [1]
    n = 0    #从第0行开始算
    yield L   #第0行加进去

    
    while n < 10:                 #输出前10行元素
        n = n + 1                 #第1行(注意我是从第0行开始算)
        S = []                    #临时变量,进行新一行的存储
        for i in range(n + 1):    #这里一定注意不能是range(n),例如此时n = 1,那么就是range(1),只生成0,会造成接下来的下标越界
            
            if(i == 0 or i == n):
                S.insert(i, 1)    #首尾两元素为1
            else:
                S.insert(i, L[i - 1] + L[i])   #注意下标,第一次写成了L[i] + L[i+1],造成了越界
        L = S
        yield L     #一轮结束,中断
    return 'done'

大神写的,5行就完事
#杨辉三角 杨辉三角 杨辉三角
def triangles():
    L = [1]
    while True:
        yield L
        L = [1] + [L[i] + L[i+1] for i in range(len(L) - 1)] + [1]

总结

我是fw,我是fw,我是fw

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号