python经典---杨辉三角(两种方法)

#method 1

def triangle():

    a=[1]
    while 1:
        
        yield a  #yield返回a 但不终止循环
        # 当next继续进行时才会由此继续yield之后的操作
        a.append(0)
        # 当前角标位置的元素是上一行中对应角标位置与其前一位元素的加和
        a=[a[i]+a[i-1] for i in range(len(a))]#for i in len(a)为了获取角标


# 呈三角形格式输出
def shuchu(n):
    scq=triangle()#生成器放在此处
    # 如果放在for循环里面的话,每次调用生成器都会执行triangle()函数中的如下命令
    # a=[1]
    # while 1:
    #     # 返回a 但不终止循环
    #     yield a
    # 当前每一行都是以列表的形式输出的,需要按照字符串输出,那么就要遍历列表里面的每个元素,再转换类型以字符串输出
    for i in range(n):#依次输出每一行
        res=''#先定义一个空字符串,将稍后遍历出来的字符串添加进来
        # 因为triangle函数中含有yield,所以这是一个生成器generator,所以输出的时候需要用next()
        # 又因为next只能输出一个,所以需要用for i in next(triangle())来遍历第一个函数中a里面的每一个元素,并要转化为字符串
        
        for i in next(scq):
            # 把获取到的元素转化为字符串并添加到空字符串res里面
            res+=str(i)+' '#加空格是为了使同一行相邻的两个元素不相连
        # 居中输出(格式化输出需要用到format '^''<' '>')
        print(format(res[:-1],'^100'))
shuchu(10)

#显示结果如下

 

 

#method 2

def yhsj(n=10):
    a=[1]
    while n>0:
        yield a
        a = [1]+[x+y for x,y in zip(a[:],a[1:])]+[1] #关键思想
        n-=1

ys=yhsj()
for i in ys:
    print(i)

#method 2显示结果如下:

 

转载于:https://www.cnblogs.com/Ann0609/p/9472012.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值