首先需要了解一下什么是杨辉三角,如下图所示:
方法一:计算杨辉三角的前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]……如此循环。
方法三: