Python实现杨辉三角--yield的使用

前言

本文通过定义一个生成器函数来实现杨辉三角。生成器函数的特点如下:

  • 1.生成器函数中使用yield代替普通函数中的print进行输出;
    说明:函数在执行到yield语句时便停止执行并返回,下次执行时直接从上次返回的yield语句处继续执行下面的语句。
  • 2.调用生成器函数时需要声明一个对象,该对象可以使用for循环进行迭代;

实现

  • 1.杨辉三角的定义如下:
    在这里插入图片描述
    说明:当n>=2时,每一行的开头和结尾都是1,从第3行开始,中间的各个元素=上一行相应位置与前一位置元素之和。我们假设将每一行的所有元素当作一个列表,例如:
    第二行的元素为:list_2 = [1,1]
    第三行的元素为:list_3 = [1,2,1]
    除去首尾都是1不变之外,list_3中的2 = list_2[0] + list_2[1]。又如list_5中的4 = list_4[0] + list_4[1],6 = list_4[1] + list_4[2]。

  • 2.实现思路
    (1)预先声明两个list:tri = [1]和pre = [1]
    说明:其中列表tri表示下一行的所有元素,列表pre表示上一行的列表元素。
    列表tri中每次的元素变化都 = 列表pre中相应位置的元素之和。
    (2)每次计算完列表tri中的元素之后,通过append(1)来添加末尾的元素。

  • 3.实现代码

# 杨辉三角--generator
def triangles(max):		# max表示准备输出多少行的元素
    tri = [1]
    pre = [1]
    n = 1
    while n <= max:
        yield tri
        for i in range(1, len(pre)):
            tri[i] = pre[i-1] + pre[i]
        tri.append(1)
        pre = tri[:]
        n += 1
              
triangles = triangles(10)  # 以输出10行为例;调用generator函数,返回一个generator对象
for tri in triangles:      # 遍历generator对象不断计算并输出下一行的元素
    print(tri)
  • 4.实现结果
    实现结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值