一般写杨辉三角都是用二维数组,通过二维数组的下标,可以非常容易的计算出下一行结果。
[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]
解法一:嵌套列表
先找规律,杨辉三角有n行,第一行有1个数,第二行有2个数,第三行有3个数…每一行的元素个数与行号大小相等,可以用嵌套列表存储每一行:
L=[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
从上图的直角三角形中找规律:其中规律为:
L[x][y]=L[x-1][y]+L[x-1][y-1] :x即行号,y即列号,本行的一个元素值=上一行同列元素值+其左边元素值
还要先做一点特殊处理:把每一行的行首和行为置1,只计算行中间部分(因为只有行中间部分符合规律)
# 杨辉三角一般解法
def triangle(n):
l=[] #用来存储所有行的返回列表
for i in range(n):
if i==0:
l.append([1]) # 第一行
elif i==1:
l.append([1,1])#第二行
#第三行以后.....
else:
y = [] # 存储一行,每次清空
for j in range(i+1):
if j==0 or j==i:
y.append(1)#行首和行末为1
else:
y.append(l[i-1][j]+l[i-1][j-1])
l.append(y)#放入所有行存储列表中
return l
n=12 #行数12
x=triangle(n)
for i in range(len(x)):#逐行打印结果
print(x[i])
其结果就是开篇的直角杨辉三角了,如果要打印成等腰三角形,那在输出格式上要设置一下
字符串有一个center函数,可以令字符串居中显示,且两边可以填充符号,这里就填充空格
利用循环,把每一行转换成字符串,然后输出此行:
这里直接就调用上面写的杨辉三角函数:
#杨辉三角输出呈等腰三角形
x=triangle(n)
for i in range(len(x)):
#字符串有center函数,可以居中打印
s=str(x[i])
print(s.center(n*10))#域宽n*10,两边填充空格
结果如下:
C:\python3.8\PyCharmLocation\venv\Scripts\python.exe [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]
这只是一种粗糙的打印方法,越到后面队型越崩坏,更细致的格式输出方法还没有写出。
解法二:用zip方法解
杨辉三角还有一个特性:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]:
由上一行(第二行)前面加一个0组成的列表,去缝合(zip)上一行后面加一个0组成的列表,效果如下:
由第二行11得到第三行:
011
+110
= 121
由第三行121得到第四行:
+0121
+1210
=1331
可以利用zip方法将两个列表交错缝合,在用sum方法将缝合后的元组结果算出
python中的zip方法效果是:将两个序列缝合起来,并返回一个由元组组成的序列
如:
序列1: l1=[1,2,3,4,5]
序列2: l2=[6,7,8,9,10]
x=zip(l1,l2)
print(list(x))
结果为:[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)],用sum将(1,6)结果相加得出为7
#杨辉三角
def f4(n):#n 为行数
l1 = [1]#用于存放单行结果
l2 = []#用于存放所有行的结果
x = [] # 用于存放sum结果的列表,需要每次清空
i = 0
while i < n:
l2.append(l1)
print(l1)
for t in zip([0] + l1, l1 + [0]): #011+110=121,0121+1210=1331
x.append(sum(t))#通过两次sum,[(0,1),(1,0)]=[1,1]
l1 = x
x = [] # 清空
i += 1
f4(22)
C:\python3.8\PyCharmLocation\venv\Scripts\python.exe C:/python3.8/PyCharmLocation/venv/7/21/question4.py
[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]
[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]
[1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1]
[1, 12, 66, 220, 495, 792, 924, 792, 495, 220, 66, 12, 1]