Python蓝桥杯练习基础题 杨辉三角形

0 引言

马上就要进行蓝桥杯的省赛了,最近刷了一些蓝桥杯官网上的一些基础题,这里对杨辉三角形的python实现来进行一个思路的自我总结。

1 杨辉三角形

首先,直观认识一下杨辉三角;这里摘取一张百度百科上的杨辉三角形图片,如下:
Python蓝桥杯练习基础题 杨辉三角形_第1张图片

2 编程思路

一开始困惑了很久不知道怎么下手,在知乎以及各大网站上看了才大概有了个思路。其实还是要先从目标题目下手,先理解杨辉三角形的本质。其实可以把其的每一行看做是一个列表,下一个列表的值等于目前列表尾部添加一个0与目前列表头部添加一个0进行相加。如下图所示,我这里是第四行的计算过程。
Python蓝桥杯练习基础题 杨辉三角形_第2张图片

3 代码实现

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>

以上!

你可能感兴趣的:(蓝桥杯,基础题,python)