#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显示结果如下: