首先需要了解一下什么是杨辉三角,如下图所示:

 方法一:计算杨辉三角的前6行

 1 yang = []
 2 # 首先创建一个空列表yang
 3 for i in range(6):
 4 # 循环6次输出前6行,range是从0开始的
 5     row = [1]
 6 # 建一个只包含1的列表row,并且每次循环都重新定义
 7     yang.append(row)
 8 # 将列表row作为元素添加到列表yang里面
 9     if i == 0:
10         continue
11 # 这里是第一行的输出,第一行只有一个1,作为特殊情况
12     for j in range(i-1):
13         row.append(yang[i-1][j] + yang[i-1][j+1])
14 # yang[i-1][j],yang列表的元素是列表row
15 # 这里的意思是yang列表的第i-1个元素的j元素
16     row.append(1)
18 print(yang)
19 ##############################################
20 D:\untitled\project2\venv\Scripts\python.exe D:/untitled/project2/day1/yanghui.py
21 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
22
23 Process finished with exit code 0

当i取0的时候,row=[1],yang=[[1]],continue跳出当前循环;i开始取1,row=[1],yang=[[1],[1]],j依旧不会取值,不执行row.append(yang[i-1][j] + yang[i-1][j+1]),执行row.append(1),即前面的row=[1]的尾部追加一个1(虽然row=[1]已经被追加到了yang列表里面),所以yang=[[1],[1]]就变成了yang=[[1],[1,1]];i开始取2,row=[1],yang=[[1],[1,1],[1]],j取值0,执行row.append(yang[i-1][j] + yang[i-1][j+1]),即row.append(yang[1][0] + yang[1][1])即row.append(1+1)即row.append(2),yang列表变成[[1],[1,1],[1,2]],然后row.append(1),yang就变成了[[1],[1,1],[1,2,1]]……如此循环。

方法二:

 1 n = 6
 2 oldline = []
 3 newline = [1]
 4 length = 0
 5 print(newline)
 6 for i in range(1,n):
 7     oldline = newline.copy()
 8     oldline.append(0)
 9     newline.clear()
10     offset = 0
11     while offset <= i:
12         newline.append(oldline[offset-1] + oldline[offset])
13         offset += 1
14     print(newline)
15 #########################################
16 D:\untitled\project2\venv\Scripts\python.exe D:/untitled/project2/day1/teryer.py
17 [1]
18 [1, 1]
19 [1, 2, 1]
20 [1, 3, 3, 1]
21 [1, 4, 6, 4, 1]
22 [1, 5, 10, 10, 5, 1]
23
24 Process finished with exit code 0
#代码10行~11行,可以替换成以下的代码:
#for offset in range(i+1)

凑0的想法,负索引。第一行为特殊情况(即i=0的时候),独自输出(即代码第3行和第5行);然后i=1的时候,oldline=newline=[1],然后oldline.append(0),oldline=[1,0],newline.clear()清空变成[],设定一个变量offset初始值为0,offset与i的关系就是第i行重复offset次,共计打offset个数值,offset取0时,newline.append(oldline[offset-1] + oldline[offset])即newline.append(oldline[-1] + oldline[0])即newline.append(0+1)即newline.append(1)(PS:这里用到了负索引的概念),然后newline从[]变为[1]。offset取1时,newline.append(oldline[offset-1] + oldline[offset])即newline.append(oldline[0] + oldline[1])即newline.append(1+0)即newline.append(1),然后newline从[1]变为[1,1]……如此循环。

方法三:

02-11 13:44