python杨辉三角两种写法详解
一般写杨辉三角都是用二维数组,通过二维数组的下标,可以非常容易的计算出下一行结果。
[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)#行首和行末为1else: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 = 0while i < n:l2.append(l1)print(l1)for t in zip([0] + l1, l1 + [0]): #011+110=121,0121+1210=1331x.append(sum(t))#通过两次sum,[(0,1),(1,0)]=[1,1]l1 = xx = [] # 清空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]
python杨辉三角两种写法详解相关推荐
- 运用python的方式_对Python使用mfcc的两种方式详解
1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...
- python杨辉三角金字塔
python杨辉三角金字塔(CQUPT.20201.4.26.1) 代码如下: def fun(n):list_1=[[1]*n for i in range(n)]#相当于创建二维数组for i i ...
- 站长在线Python精讲:在Python中格式化字符串的两种方法详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...
- java构造和解析json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java json解析 代码_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java构建json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- FTP协议主动(Port)模式和被动(Passive)两种模式详解
FTP协议主动(Port)模式和被动(Passive)两种模式详解 FTP(File Transfer Protocol)是文件传输协议的简称. 正如其名所示: FTP的主要作用,就是让用户连接上一个 ...
- IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装)
这篇文章主要介绍了IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装),本文通过截图给大家展示的非常详细,需要的朋友可以参考下 目录 1.在线安装: 2.离线安装: IDEA安装阿里巴 ...
最新文章
- linux telnet.class,Linux telnet简单实用方法
- 空间组网(卫星组网)概述
- mysql 1261 load data_mysql使用load data导入数据文件
- js中window的属性
- VMware服务器虚拟化平台应急方案
- Junit +cucumber 运行报错 initiallizationError
- python三维向量运算_使用Python编写一个三维向量,实现向量的加法减法,点乘叉乘...
- php访问80端口强制跳转443,nginx 80端口重定向到443端口
- 中国电信无线网络服务器,电信免费升级500兆?体验过后发现事情并不简单
- 深入浅出——MVP模式
- 为什么机器学习对嵌入式开发很重要?
- windows7设置通电自启动_怎么让Windows7系统电脑自动开机?
- 用html语言设计李白的一首诗,李白诗《赠汪伦》教学设计
- (OpenCV+Python)--目标跟踪,背景分割器:KNN、MOG2和GMG
- 最短路径 floyd最小环 洛谷2738 篱笆回路 网上题解
- IT痴汉的工作现状30-刀客许三爷(下)
- 充电电流的大小是谁决定的?
- 【深度好文】强烈推荐:傅盛认知三部曲!
- 【刷题记录1】算法|数据结构|C/C++
- 视频中有水印怎么去掉 如何去水印