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

[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杨辉三角两种写法详解相关推荐

  1. 运用python的方式_对Python使用mfcc的两种方式详解

    1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...

  2. python杨辉三角金字塔

    python杨辉三角金字塔(CQUPT.20201.4.26.1) 代码如下: def fun(n):list_1=[[1]*n for i in range(n)]#相当于创建二维数组for i i ...

  3. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  4. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  5. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  6. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  7. java构建json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  8. FTP协议主动(Port)模式和被动(Passive)两种模式详解

    FTP协议主动(Port)模式和被动(Passive)两种模式详解 FTP(File Transfer Protocol)是文件传输协议的简称. 正如其名所示: FTP的主要作用,就是让用户连接上一个 ...

  9. IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装)

    这篇文章主要介绍了IDEA安装阿里巴巴编码规范插件的两种方式详解(在线安装和离线安装),本文通过截图给大家展示的非常详细,需要的朋友可以参考下 目录 1.在线安装: 2.离线安装: IDEA安装阿里巴 ...

最新文章

  1. linux telnet.class,Linux telnet简单实用方法
  2. 空间组网(卫星组网)概述
  3. mysql 1261 load data_mysql使用load data导入数据文件
  4. js中window的属性
  5. VMware服务器虚拟化平台应急方案
  6. Junit +cucumber 运行报错 initiallizationError
  7. python三维向量运算_使用Python编写一个三维向量,实现向量的加法减法,点乘叉乘...
  8. php访问80端口强制跳转443,nginx 80端口重定向到443端口
  9. 中国电信无线网络服务器,电信免费升级500兆?体验过后发现事情并不简单
  10. 深入浅出——MVP模式
  11. 为什么机器学习对嵌入式开发很重要?
  12. windows7设置通电自启动_怎么让Windows7系统电脑自动开机?
  13. 用html语言设计李白的一首诗,李白诗《赠汪伦》教学设计
  14. (OpenCV+Python)--目标跟踪,背景分割器:KNN、MOG2和GMG
  15. 最短路径 floyd最小环 洛谷2738 篱笆回路 网上题解
  16. IT痴汉的工作现状30-刀客许三爷(下)
  17. 充电电流的大小是谁决定的?
  18. 【深度好文】强烈推荐:傅盛认知三部曲!
  19. 【刷题记录1】算法|数据结构|C/C++
  20. 视频中有水印怎么去掉 如何去水印

热门文章

  1. 宽字节 多字节 单字节 的问题
  2. 为Mac制作WTG的详细流程+制作工具
  3. nodejs 截断字符串_JS截取字符串常用方法详细整理
  4. 获取某一个<tr>中<td>的值
  5. 想要给多个视频添加一样的字幕文案并进行朗读可以吗
  6. 护城行动 | 风声起,攻守有道,知己为先
  7. OBS Studio的安装与使用
  8. ITer必备数学思维——同济大学高等数学上册第三章微分中值定理与导数的应用以及每日一题
  9. max31865芯片读取pt100
  10. 孤陋寡闻了,Python中类竟可以像列表一样操作