python生成器实现输出杨辉三角

python创建一个generator,有2种方法。

一是将列表生成式的[]改为()。

二是定义一个函数,并且这个函数里含有yield关键字。这个函数就是一个generator

 

简单的生成器可以用列表生成式生成,复杂的就写不出来了。

下面用generator的方法实现输出杨辉三角:

def triangles():
    #输出列表
    res_now = []
    while True:
        #上一个列表,用于计算当前列表
        #注意必须使用copy函数,直接赋值相当于res_now的引用
        res_last = res_now.copy()
        #当前计算行号
        level = len(res_now) + 1
        #注意情况要输出的列表
        res_now.clear()
        if level == 1:
            res_now.append(1)
        else:
            for index in range(level):
                if index == 0 or index == level - 1:
                    res_now.append(1)
                else:
                    res_now.append(res_last[index - 1] + res_last[index])
        yield res_now

注意:列表拷贝必须使用copy函数。

以下是测试代码:

n = 0
results = []
for t in triangles():
    print(t)
    l_now = t.copy()
    results.append(l_now)
    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('测试失败!')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值