def triangles(m):
L = [1]
n = 1
while n <= m:
yield L
L = [1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]
n = n + 1
=========
这里和作业不一样是定义了参数m,作为while时的判断,没用m时判断用True即可(大小写严格区分)。
我百度了下,有个解释容易理解,说的yield相当于return,因为是生成器,所以下一次执行就是上一次结果后。
执行过程,假设m=3(每行用list表示):
1、n=1,执行到yield L,return L的值,即初值L=[1],这是生成器第一个值,即杨辉三角第一行;
2、循环n=2,执行L = [1]+[L[i]+L[i+1] for i in range(0)]+[1],即L = [1]+[1],也即是L=[1,1],这里range(0)是空,这是生成器第二个值,即杨辉三角第二行;
3、循环n=3,执行L = [1]+[L[i]+L[i+1] for i in range(1)]+[1],即L=[1]+[[L[0]+L[1]]+[1],L[0]+L[1]上个L=[1,1],即L=[1,2,1],,这是生成器第三个值,即杨辉三角第三行;
...
4、按照输出要求格式打印
Sign in to make a reply
金甲神将9528
def triangles(m):
L = [1]
n = 1
while n <= m:
yield L
L = [1]+[L[i]+L[i+1] for i in range(len(L)-1)]+[1]
n = n + 1
=========
这里和作业不一样是定义了参数m,作为while时的判断,没用m时判断用True即可(大小写严格区分)。
我百度了下,有个解释容易理解,说的yield相当于return,因为是生成器,所以下一次执行就是上一次结果后。
执行过程,假设m=3(每行用list表示):
1、n=1,执行到yield L,return L的值,即初值L=[1],这是生成器第一个值,即杨辉三角第一行;
2、循环n=2,执行L = [1]+[L[i]+L[i+1] for i in range(0)]+[1],即L = [1]+[1],也即是L=[1,1],这里range(0)是空,这是生成器第二个值,即杨辉三角第二行;
3、循环n=3,执行L = [1]+[L[i]+L[i+1] for i in range(1)]+[1],即L=[1]+[[L[0]+L[1]]+[1],L[0]+L[1]上个L=[1,1],即L=[1,2,1],,这是生成器第三个值,即杨辉三角第三行;
...
4、按照输出要求格式打印