重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
杨辉三角
的一些理解:
感觉杨辉三角的实现至少在前两行是特殊的。在后面的几行代码中我是这样想的,可以用第n项加第n+1项。两边再加上1就可以了罢。两边如果都这么做的话可以实现对称的操作。
让我们来实现吧。在实现的过程中想套用一层循环发现难以实现,用两层试试看。
yh=[[1],[1,1]]
for i in range(2,6):
line=[1]
ls=yh[i-1]
for j in range(len(ls)-1):
line.append(ls[j]+ls[j+1])
line.append(1)
yh.append(line)
print(yh)
#打印n行的杨辉三角
a=int(input('请输入第几行'))
y=[[1],[1,1]]
for i in range(a-2):
n=y[i+1]
long=len(n)
line=[1]
for j in range(long-1):
line.append(n[j]+n[j+1])
line.append(1)
y.append(line)
print(line)
关于补零的一些想法,在杨辉三角当中,可以将左右两边当成多了一个零,在进入下一行的时候就可以看成0+1=1,同理右边也是一样,在实际写代码中,开始确实是左边多一个[0]
,右边多一个[0],但实际操作下来,左边的[0]可以省去,因为在python当中是有独特的负索引机制,在右边的最后一项可以看做是[-1]项,这样从0开始迭代的话可以从i-1开始
迭代,是一个python的独特思想。
y=[[1]]
for i in range(1,6):
n=y[i-1]+[0]
l=[]
for j in range (i+1):
l.append(n[j-1]+n[j])
y.append(l)
print(y)
如果用独特的负索引的话,用对称性也是可以做出来的也是从-1项开始做起一直做到中间,这就需要在一开始的时候就创建一个刚刚好的列表空间,然后将元素一个一个填充进去
,这种方法就叫做对称法
y=[[1]]
for i in range(5):
n=y[i]+[0]
line=[1]*(i+2)
for j in range((i+2)//2+1):
line[j]=n[j-1]+n[j]
line[-j-1]=line[j]
y.append(line)
print(y)
其实有这个想法之后实现代码并不困难,其实这种方法只是一种思想,这更多是为最后一种方法铺路,前面三种方法可以看出都是引用一个新列表然后将新列表填充到旧列表当中,如果将旧列表直接copy一个新列表这样可以省去许多冗余量,我们称这第四种方法为单列覆盖法。
y=[1]*6
for i in range(6):
long=6-i
tmp=1
for j in range (1,i//2+1):
val=y[j]+tmp
tmp=y[j]
y[j]=val
y[-long-1]=val
print(y[:i+1])
在这里引用了一个中间变量tmp因为如果不引用的话会造成数据覆盖,会有人在实际操作中会判断是奇数列还是偶数列,但是我们在实验中可以看到其实判断是多余的,因为完全可以在多余列覆盖即可。
到现在杨辉三角就差不多完成了。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。