马上就要进行蓝桥杯的省赛了,最近刷了一些蓝桥杯官网上的一些基础题,这里对杨辉三角形的python实现来进行一个思路的自我总结。
首先,直观认识一下杨辉三角;这里摘取一张百度百科上的杨辉三角形图片,如下:
一开始困惑了很久不知道怎么下手,在知乎以及各大网站上看了才大概有了个思路。其实还是要先从目标题目下手,先理解杨辉三角形的本质。其实可以把其的每一行看做是一个列表,下一个列表的值等于目前列表尾部添加一个0与目前列表头部添加一个0进行相加。如下图所示,我这里是第四行的计算过程。
n = input()
N = [1]
for i in range(int(n)):
## for j in range(len(N)):
## print(N[j],end=' ')
print(" ".join(str(x) for x in N))
## print('')
N.append(0)
## S = []
## for k in range(i+2):
## S.append(N[k] + N[k-1])
## N = S
# 列表生成式
N = [N[k] + N[k-1] for k in range(len(N))]
##l = [1,2,3,4]
##print(" ".join(str(i) for i in l))
这里用到了列表生成式。过程例如当i为1的时候,这时候我们列表生成式计算的是[2]行的值,思路正如之前所述。
在代码中实现则是利用两两进行了一个相加过程,因为其实就是目前的值和该值前一个索引的值进行相加。从而实现了之前我草稿所实现的过程。
因为对于列表生成式已经遗忘很久了,查看了一下网上的教程进行了验证,其过程就相当于列表生成是之前那段加了注释的代码。这两个结果是相同的,可以自行验证。(len(N)与 i+2等价)
Ps.print那部分则是由于题目要求,需要用空格相连不能直接打印列表。但是忘却了join函数,于是乎之前使用的是注释部分,结果与join只是差了最后一个元素之后会多一个空格,其他都一样。具体操作可以自行搜索end以及join的用法,join是将其前限定的内容对各个字符进行连接。要求必须是字符,不然会出现以下报错。
TypeError: sequence item 0: expected str instance, int found
print(" ".join(x) for x in N)
如果直接打印则会出现这样的结果,则是输出该类型,是生成器:
4
<generator object <genexpr> at 0x000001BB5F3B1A98>
<generator object <genexpr> at 0x000001BB5F3B1A98>
<generator object <genexpr> at 0x000001BB5F3B1A98>
<generator object <genexpr> at 0x000001BB5F3B1A98>
以上!