欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-21 12:24:52
...

0 引言

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

1 杨辉三角形

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

2 编程思路

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

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>

以上!