?
?关键:杨辉三角形第i行j列的值 = 第 (i-1) 行 (j-1) 列的值 + 第 (i-1) 行 (j) 列的值
总体思路:循环计算出每个元素的值,用关键公式一层一层的计算,每一层元素存储在列表当中。要注意的是计算过程中的列表访问越界问题,故用条件判断是否为左右端点元素,改变计算方法。
若当前为该层左端点的话,第i行j列的值=第 (i-1) 行 (j) 列的值
若为该层右端点,则第i行j列的值 =?第 (i-1) 行 (j-1) 列的值
非做右端点,则?第i行j列的值 = 第 (i-1) 行 (j-1) 列的值 + 第 (i-1) 行 (j) 列的值
'''打印杨辉三角'''
'''
关键:杨辉三角形第i行j列的值=
第 (i-1) 行 (j-1) 列的值 + 第 (i-1) 行 (j) 列的值
'''
Ceng = int(input('输入要打印的杨辉三角层数:'))
A = [[1]] #用列表来存储三角元素,最顶的元素是1
#循环计算出每个元素的值,一层一层的算,i表示层数,j表示该层的第j个元素
for i in range(1,Ceng):
temp = [] #temp用来存储第i层的元素
for j in range(i+1): #杨辉三角的第i层会有i+1个元素
#若为非端点元素,可以直接按公式加得出值
if i-1 >= 0 and j-1 >= 0 and j < len(A[i-1]):
temp.append(A[i-1][j-1] + A[i-1][j])
#若 j-1 < 0 说明为左端元素,则注意越界问题,只加一个值就行
elif j-1 < 0:
temp.append(A[i-1][j])
#若 j == len(A[i]),则说明为本层的最右端元素,同样只加公式中的一个值就行,以防列表越界
elif j==len(A[i-1]):
temp.append(A[i-1][j-1])
A.append(temp) #注意是添加的元素单位是列表类型的,第一次内层循环后A=[[1], [1,1]
print(A)
'''
若层数为10,则A输出为:
[[1],[1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]
通过A[i]直接获取杨辉三角第i层(最顶层记位0层)的所有元素
'''
|