python杨辉三角两种写法详解

您所在的位置:网站首页 Java使用for循环输出杨辉三角 python杨辉三角两种写法详解

python杨辉三角两种写法详解

2024-01-06 23:17| 来源: 网络整理| 查看: 265

一般写杨辉三角都是用二维数组,通过二维数组的下标,可以非常容易的计算出下一行结果。

[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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3