说起杨辉三角,大家一定会想到二项式定理,那么如何通过代码的方式来输出它呢?

其实它的系数是有规律可循的。第n行的第n项实际是等于上一行的第n-1项与第n项的和。

 

由此我们可以写一个函数,这个函数需要一个入参num,表示前n行,函数的目的是打印杨辉三角的前n行

def yang(num):

由于每行的系数都与上一行有关,所以需要定义一个空的list来存放每一行的系数

Ylist = [] 

要打印前n行,就需要遍历每一行,一共有n行,所以要遍历n次 

for i in range(num):

无论是哪一行,最后都有一个1,所以以此为出发点,我们可以在列表的最后都进行追加元素1的操作

当行数num为1时,它是第一行,没有上一行,没有元素,所以直接追加一个1即可

当行数num为2时,它的上一行只有一个元素,无法满足求和条件,所以依旧是对列表追加一个1

Ylist.append(1)

当行数num>2时,它的上一行都至少有2个元素,满足了求和要求,所以当列表元素长度大于1时,开始求和

if len(Ylist) > 1:

开始求和前,如果直接对列表Ylist进行操作,会导致列表数据错乱,求和计算错误,所以要先复制列表切片,复制后的ylist作为上一行的系数

ylist = Ylist[:]

有了上一行的数据ylist,就可以开始取数据进行求和了,如果用第n项+第n-1项的方式,就可以直接从列表的第二项开始遍历

for j in range(1, len(ylist)):

从第2项开始,将ylist的每一项和它的前一项进行求和,然后赋值给当前行的第n项

Ylist[j] = ylist[j-1] + ylist[j]

求和并赋值后,Ylist最后再追加一个1,并打印该行

print(Ylist)

代码如下:
 1 def yang(num):
 2     Ylist = [] #动态存放每一行的数
 3     for i in range(num): #需要几行就遍历几次
 4         if len(Ylist) > 1: #有2个元素以上即可进行加操作
 5             ylist = Ylist[:] #复制切片
 6             for j in range(1, len(ylist)): #从切片的第二个元素开始
 7                 Ylist[j] = ylist[j-1] + ylist[j] #和它前一个元素相加赋值给原列表的同索引元素
 8         Ylist.append(1) #任何一行最后都是1,每次遍历都加上1
 9         print(Ylist)
10 
11 if __name__ == '__main__':
12     yang(4)