说起杨辉三角,大家一定会想到二项式定理,那么如何通过代码的方式来输出它呢?
其实它的系数是有规律可循的。第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)