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:
字符串截取右3位# # 返回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显⽰结果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论