杨辉三角(Python)

article/2025/8/28 1:13:44

杨辉三角性质:

  1. 每行首位数字都是1
  2. 每行中间的各项数字都是它肩上两个数字的和
  3. 第n行的数字有n个
  4. 第n行的项数总比第n-1行多一个

 解题思路:

  1. input来读取用户输入的行数。
  2. 创建两个列表list1和list2,list1用于存放最后的结果(结果是二维列表),list2用于存放每一行的数字。
  3. 根据性质输出结果,首尾是1,中间的各项数字都是它肩上两个数字的和.

打印前两行:

num=int(input("请输入您需要打印的杨辉三角的层数:"))
list1=[]
for i in range(num):list2=[]if i==0:list2=[1]elif i==1:list2=[1,1]else:passlist1.append(list2)
print(list1)

在if和elif条件判断中,但i等于0或1即第一层和第二层时直接打印;然后每判断一个判断后,都会将list2添加到list1中.

请输入您需要打印的杨辉三角的层数:2
[[1], [1, 1]]请输入您需要打印的杨辉三角的层数:5
[[1], [1, 1], [], [], []]

打印num行:

num=int(input("请输入您需要打印的杨辉三角的层数:"))
list1=[]
for i in range(num):list2=[]if i==0:list2=[1]elif i==1:list2=[1,1]else:for j in range(i+1):if j==0 or j==i:list2.append(1)else:list2.append(list1[i-1][j-1]+list1[i-1][j])list1.append(list2)#每存一行的数据(每执行一次判断后),便添加到list1
print(list1)

 在else判断中(打印其他层)创建一个for循环,变量j是为了这一层里面的各个元素,或者说j的索引范围,而这也就是参数i+1的原因.好吧我知道你不理解,假设此时需要打印第四层,i即=3,而且第四层的元素有4个,在列表中的索引值j为0,1,2,3。而i的索引范围却只有0,1,2,因此i+1的目的就是为了匹配j的索引.

在循环中的if判断,当j的取值等于0或i时,即这一层的列表的第一个或最后一个时,将1添加到list2中(参考性质1);在else判断中,将上一层即i-1中的元素取出相加(参考性质2)。

好吧,我知道你还是没有看明白,换个说法:

为什么是i-1:因为i-1是这一层的上一层;假设当前是第3层,则i=2,那么上一层就是i=1即第2层.但是存放第三层杨辉三角的列表是[[1],[1,1],[  ]].而我们要先获取上一层即第二层,即i=1即(i-1)的数据(list1[1])

# 假设当前是第4层,则i=3, 但是列表是[[1], [1, 1], [1,2,1],[  ]].而我们要先获取上一层即第三层, 即i=2j即(i-1)的数据(list1[2]),以此类推

为什么是j-1:此时这个索引是为了获得一层中的各个元素值,而j的定义就是用来表示这一行里面的各个元素值!假设当前是第3层,j的取值范围是0,1,2;此时列表为[[1], [1, 1], [1,2,1]]; 要索引[1,1],但是这索引的这个列表范围是0,1,而刚好要索引的列表范围比j的范围小1

# 假设当前是第4层,j的取值范围是0,1,2,3;此时列表为[[1], [1, 1], [1,2,1],[1,3,3,1]];要索引[1,2,1],但是这索引的这个列表范围是0,1,2;而且第四中的list2中的第一个元素3是第三层的第1个元素(list1[2][0])和第二个元素(list1[2][1])相加而得,以此类推!

#list1(二维列表)
[[1]                      第一层(i=0)
[1, 1]                    第二层(i=1)
[1, 2, 1]                 第三层(i=2,j=0,1,2)
[1, 3, 3, 1]              第四层(i=3,j=0,1,2,3)
[1, 4, 6, 4, 1]]          第五层(i=4,j=0,1,2,3,4)请输入您需要打印的杨辉三角的层数:4
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]请输入您需要打印的杨辉三角的层数:6
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]

 打印杨辉三角(直角三角形):       

for i in list1:#print(i)for j in i:print("{:<4}".format(j),end="")print()#每输出一行的元素后就换行

首先遍历list1,因为list1是个二维列表,所以遍历的结果是list1中的各个元素(list1中的小列表),因为print输出默认换行(不换行:print(i,end=""))。此时接着遍历i,然后格式化,左对齐,两个字符之间的宽度为4(宽度自己定义,建议是偶数);print()是每次打印一个列表(list1中的一个元素)后换行,例如打印完第三层后,换行打印第四层,否则都会在同一行。

1     
1     1     
1     2     1     
1     3     3     1     
1     4     6     4     1     #print(i)的结果
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]#print(i,end="")的结果
[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1]

居中杨辉三角:

这次相对上文直角形三角仅仅多了三行,而如何居中,无非就是在每一行的起始数前面空你所需要的长度;

首先引用了一个变量space,他是求list1中的最后一个元素的长度,即最后一层的长度,假设有5层,list1最后一个元素就是[1,4,6,4,1],所以他的长度就是5.至于为什么还要在所求长度后面减一这个不重要,当然你也可以减2,或者不减,重要的是输出调试时看是否对称美观,同时还要参考对应两个字符之间的长度例如格式化方法中的长度4;同时在最后一行的space-=1的作用和当前是一样的,而这也就是为什么可以减也可以不减的原因!

其次,也是本文最难理解的一步.为什么引用space,因为每行前面的空格不是固定的,这是一个动态的效果,因此得需要的一个变量表示,而不是一个固定的数值;同样为什么space要利用最后一层的长度,没有什么别的,主要就是为了美观,不至于出现拥挤,或者不对称的现象!

同样为什么所需空格长度是space*4//2,举例证明:首先在当前直角型杨辉三角中因为相邻两值的长度为4,那么在五层杨辉三角中的最后一行长度(加上空格)就是16,因此第一行所需空格长度为8(因为第一行前面空格的长是最后一行的长度的一半).到了这个时候可能就就有人疑问为什么不直接用16/2呢,这是因为16和8都是你自己数出来的.计算机是不会数的!

在五层杨辉三角中,最后一行的元素有5个,所以space为4;两个数字之间的空格长度也是4,但是要怎么凑出8(用space加上两个数字之间的空格长度的想法是不严谨的)呢?4*4//2=8;公式为(列表长-1)*两数之间的空格长度//2.

 

space=len(list1[-1])-1
for i in list1:print(space*4//2*" ",end="")for j in i:print("{:<4}".format(j),end="")print()space-=1

完整版:

num=int(input("请输入您需要打印的杨辉三角的层数:"))
list1=[]
assert num>0,"请输入一个正整数!"
for i in range(num):list2=[]if i==0:list2=[1]elif i==1:list2=[1,1]else:for j in range(i+1):if j==0 or j==i:list2.append(1)else:list2.append(list1[i-1][j-1]+list1[i-1][j])list1.append(list2)
print(list1)
space=len(list1[-1])-1
for i in list1:print(space*4//2*" ",end="")for j in i:print("{:<4}".format(j),end="")print()space-=1
请输入您需要打印的杨辉三角的层数:9
[[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   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. 最后若发现输出出现拥挤,可以增加相邻数字之间的宽度(format格式化方法)
  2. 若输出结果依然是直角三角形,但是前面依然有空格,看看是否是space在每次循环后是否递减
  3. 最后希望大家下次写注释的时候不要在里面撒谎,中国人不骗中国人!


http://chatgpt.dhexx.cn/article/Gfan7sdR.shtml

相关文章

杨辉三角 Python(简单易懂)

杨辉三角&#xff08;最简单易懂&#xff09; 题目 编写两个函数&#xff0c;一个函数接收一个整数num为参数&#xff0c;生成杨辉三角形前num行数据&#xff0c;另一个函数接收生成的杨辉三角形并按以下形式输出&#xff0c;如图所示。 在图中&#xff0c;列出了杨辉三角形的…

MQ3

编者按】关于MQ&#xff0c;我以前只是有个大概概念。譬如之前&#xff0c;就是根据前端送过来的消息&#xff0c;format成后端所需要的消息格式&#xff0c;并将format后的消息放入一个Queue文件中&#xff0c;如果消息发送成功&#xff08;收到该request成功或者失败的respon…

MQ详解及四大MQ比较

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&a…

1.MQ介绍

什么是MQ mq&#xff08;message queue&#xff09;&#xff1a;面向消息的中间件&#xff08;message-oriented middleware&#xff09;是指利用高效可靠的消息传递机制与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队…

RabbitMQ管理平台与主流MQ框架

目录 1. 什么是MQ 2. 应用场景 3. 主流MQ框架 4. Docker安装部署RabbitMQ 参数说明&#xff1a; 5. RabbitMQ管理平台 6. MQ的核心概念 7. springboot整合rabbitmq 7.1.安装好rabbitmq&#xff0c;登陆RabbitMQ管理平台&#xff0c;新增管理用户并设置权限 7.2.pom.xml添…

MQ高级(四)MQ集群

一、集群分类 RabbitMQ的是基于Erlang语言编写&#xff0c;而Erlang又是一个面向并发的语言&#xff0c;天然支持集群模式。 RabbitMQ的集群有两种模式&#xff1a; &#xff08;1&#xff09;普通集群&#xff1a;是一种分布式集群&#xff0c;将队列分散到集群的各个节点&…

MQ-2烟雾传感器解析

一、工作原理 可用于家庭和工厂的气体泄漏监测装置&#xff0c;适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此&#xff0c;MQ-2可以准确来说是一个多种气体探测器。MQ-2的探测范围极其的广泛。它的优点&#xff1a;灵敏度高、响应快、稳定性好、寿命长、驱动电路简…

MQ2

死信队列 什么是死信队列 一般来说&#xff0c;producer将消息投递到queue中&#xff0c;consumer从queue取出消息进行消费&#xff0c;但某些时候由于特定的原因导致queue中的某些消息无法被消费&#xff0c;这样的消息如果没有后续的处理&#xff0c;就变成了死信(Dead Lett…

MQ-2学习笔记

1.工作原理 MQ-2型烟雾传感器属于二氧化锡半导体气敏材料&#xff0c;属于表面离子式N型半导体。处于200~300摄氏度时&#xff0c;二氧化锡吸附空气中的氧&#xff0c;形成氧的负离子吸附&#xff0c;使半导体中的电子密度减少&#xff0c;从而使其电阻值增加。当与烟雾接触时…

01、RabbitMQ入门

目录 1.、什么是MQ 2、应用场景 3、主流MQ框架 4、Docker安装部署RabbitMQ 5、RabbitMQ管理平台 6、MQ的核心概念 单一生产者和单一消费者 7、springboot整合rabbitmq 执行测试方法testRabbitmq&#xff0c;控制台输出&#xff1a;receive msg : test rabbitmq messag…

MQ2烟雾传感器

1、MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时&#xff0c;传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2气体传感器可用于家…

MQ-2烟雾传感器

一、MQ-2烟雾传感器简介 MQ-2常用于家庭和工厂的气体泄漏监测装置&#xff0c;适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此&#xff0c;MQ-2可以准确来说是一个多种气体探测器。 MQ-2的探测范围极其的广泛。它的优点&#xff1a;灵敏度高、响应快、稳定性好、寿…

MQ-2烟雾浓度传感器(STM32F103)

本实验是通过串口调试助手显示STM32F103C8T6采集到MQ-2传感器的电压值。 一、 概述 1. 简介 MQ-2可用于家庭和工厂的气体泄漏监装置&#xff0c;适宜于液化气、丁烷、丙烷、甲烷、酒精、烟雾等的探测。它的优点是灵敏度高、响应快、稳定性好。寿命长、驱动电路简单以及方便安…

MQ-2烟雾传感器的原理及使用教程

一、MQ-2烟雾传感器简介 MQ-2常用于家庭和工厂的气体泄漏监测装置&#xff0c;适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此&#xff0c;MQ-2可以准确来说是一个多种气体探测器。 MQ-2的探测范围极其的广泛。它的优点&#xff1a;灵敏度高、响应快、稳定性好、寿命…

MQ-2烟雾传感器的使用

一、MQ-2烟雾传感器简介 MQ-2烟雾传感器采用在清洁空气中电导率较低的二氧化锡(SnO2)&#xff0c;属于表面离子式N型半导体。当MQ-2烟雾传感器在200到300摄氏度环境时&#xff0c;二氧化锡吸附空气中的氧&#xff0c;形成氧的负离子吸附&#xff0c;使半导体中的电子密度减少&a…

MQ-2烟雾传感器模块功能实现(STM32)

认识MQ-2模块与其工作原理 MQ-2型烟雾传感器属于二氧化锡半导体气敏材料&#xff0c;属于表面离子式N型半导体。当处于200~300摄氏度时&#xff0c;二氧化锡吸附空气中的氧&#xff0c;形成氧的负离子吸附&#xff0c;使半导体中的电子密度减少&#xff0c;从而使其电阻值增加。…

MQ-2烟雾浓度传感器

文章目录 一、模块简介二、工作原理三、程序设计 本实验将采集到的传感器数据利用ADC转换&#xff0c;将转换后的电压值显示在串口调试助手上 一、模块简介 MQ-2烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当烟雾传感器所处环境中存在可燃气体时&a…

python杨辉三角输出指定行_python杨辉三角输出指定行_使用python打印十行杨辉三角过程详解...

如何用python输出杨辉三角 程序输出需要实现如下效果&#xff1a; [1] [1,1] [1,2,1] [1,3,3,1] .. 方法&#xff1a;迭代&#xff0c;生成器 123456789101112131415161718192021 def triangles() L [1] while True: yiled L L [1] [L[i] L[I1] for i in range(len(L)-1)] …

蓝桥杯 python 杨辉三角

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

python杨辉三角 简单方法

何为杨辉三角&#xff0c;杨辉三角就是&#xff0c;第一行与第二行分别为1和1,1 再往后第三行就有规律了&#xff0c;除了开头和结尾的数&#xff08;都是1&#xff09;&#xff0c;每个数都是自己左上角和右上角的和。如图&#xff1a; 如何用编程把它实现呢&#xff1f;我们…