def Ytriangle(max):
l1=[1]
l2=[1,1]
if max==1:
yield l1
elif max==2:
yield l2
else:
n=3
while n<=max:
i=0
while i<n-2:
l1.append(l2[i]+l2[i+1])
i=i+1
l1.append(1)
l2=l1
n=n+1
用了一种很笨但逻辑还算容易理解的方法,首先看到这个题后我先考虑的是怎样将上排元素两两之和加入下排数字,最笨的方法就是用了append()函数一个一个的加,在编写过程中从第三排考虑时发现简单的循环加入并且在末尾加入1就能成功,但是在排数等于4 时出现了问题,l2[i]报错超出列表范围,在这一点我卡了很久。后来才发现是因为并没有进行第三排数字的计算直接开始第四排就会出现这个问题,于是我加上了一个n=3使得不论max为多少都是从第三排开始计算一直到n=max。
请问一下max==2的时候,为什么elif下边不加 yield l1 也可以得到第一个列表 [1] 呀
Sign in to make a reply
阿财
def Ytriangle(max):
l1=[1]
l2=[1,1]
if max==1:
yield l1
elif max==2:
yield l2
else:
yield l1
yield l2
n=3
while n<=max:
i=0
l1=[1]
while i<n-2:
l1.append(l2[i]+l2[i+1])
i=i+1
l1.append(1)
l2=l1
n=n+1
yield l2
用了一种很笨但逻辑还算容易理解的方法,首先看到这个题后我先考虑的是怎样将上排元素两两之和加入下排数字,最笨的方法就是用了append()函数一个一个的加,在编写过程中从第三排考虑时发现简单的循环加入并且在末尾加入1就能成功,但是在排数等于4 时出现了问题,l2[i]报错超出列表范围,在这一点我卡了很久。后来才发现是因为并没有进行第三排数字的计算直接开始第四排就会出现这个问题,于是我加上了一个n=3使得不论max为多少都是从第三排开始计算一直到n=max。