triangles里用到了yield,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 triangles(5) 不会执行 triangles函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield L 时,triangles函数就返回一个迭代值,下次迭代时,代码从 yield L 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
成都创新互联专业为企业提供桂阳网站建设、桂阳做网站、桂阳网站设计、桂阳网站制作等企业网站建设、网页设计与制作、桂阳企业网站模板建站服务,十多年桂阳做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
1 那个2去哪了
你看else语句 L1 = [1,1]每次L都是基于这个L1生成的 比如L=[1,2,1] 那么下一个L1就是[1,3,3,1],下一句L = L1 所以每次都是新的L1生成
2 画红圈的地方应该是和L1.insert(i,L[i-1+i])意思一样
不一样,插入的值是两个数的和
def triangles(max):
L = [1]
n = 0
while(nmax):
n = n+1
if(n == 2):
L=[1,1]
yield L
else:
i = 1
L1 = [1,1]
while(i=n-2):
L1.insert(i,L[i-1]+L[i])
i=i+1
L = L1
yield L
for n in triangles(5):
print n
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
执行你那个生成器,并生成6行杨辉三角的数据
经过观察你就会发现这个列表推导式[L[i-1] + L[i] for i in range(len(L))]是产生每一行的杨辉三角数据的。
L[i-1]+L[i]是根据前一行指定索引位置的杨辉三角数据,产生新的一行的数据
使用python实现杨辉三角
python教程-生成器
杨辉三角的特点:
1.每行端点与结尾的数为1
2.每个数等于它上方两数之和
3.第n行的数字有n项。
知道这三个特点即可
比如 L = [1,3,3,1]
L.append(0) = [1,3,3,1,0]
range(len(L)) 生成的数组是: [0,1,2,3,4]
使用python列表生成式:
L = [L(n) + L(n-1) for n in [0,1,2,3,4]]
当 n=0 时, n-1=-1 ,这时候取倒数第一个元素 0 ,所以 1+0 = 1
剩下的元素就是 n + (n-1) = 新的元素
最后输出:
按照你的要求用字符串类型编写的杨辉三角的Python程序如下
def printYangHui(n):
for i in range(1,n+1):
if i==1:
s="1"
if i==2:
s="1,1"
if i2:
s1=""
begin=0;
for j in range(0,(i-3)+1):
begin1=s.find(",",begin)
begin2=s.find(",",begin1+1)
if begin2==-1:
begin2=begin1+2
s1=s1+str(int(s[begin:begin1])+int(s[begin1+1:begin2]))+","
begin=begin2-(begin2-begin1-1)
s="1,"+s1+"1"
print(s)
n=int(input())
printYangHui(n)
源代码如下(注意源代码的缩进)