用python画杨辉三角_杨辉三角实现(Python)

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, 9, 36, 84, 126, 126, 84, 36, 9, 1]

2、思考过程:

将整个输出图形,可以认为是行列元素组成的。

整个思路的核心简单来说,除了首尾元素是1之外,其它元素的计算思路就是:[row][col]= [row-1][col-1]+[row-1][col]

举个例子:第四行的输出结果是:1,3,3,1,而第三行的输出结果是:1,2,1

除了首尾两个元素是1之外,3其实是上行元素1与2的和,另一个3是上一行元素2与1的和。

但是,用python实现这个过程,和其它语言有点差异性,比如Java、c++,它们都有二维数组可以使用,但是Python却没有,所有有点头疼。但是,Python有列表,每行元素可以通过列表输出。那么,具体实现过程是怎么样的呢?

3、代码实现

def triangle():

#第一行元素就是一个1

line = [1]

# 循环输出每行的元素列表

while True:

yield line

# 生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]

line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1]

# 控制输出行数

n = 0

# 由于triangle()其实是一个生成器Iterator,因此可以使用for循环遍历输出

for item in triangle():

print(item)

n += 1

# 输出10行的时候就结束

if n % 10 == 0:

break

4、代码分析

整个实现过程中是通过yield关键字定义生成器来实现的。

其中,

line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1]

是理解的关键。

非常巧妙,既有列表的拼接操作,同时又使用了列表生成式,代码很简洁,但理解起来却不容易。

可以去取某个实例来理解:

比如,现在要输出第四行元素,怎么处理呢?

第三行元素是1,2,1

那么,len(line)此时是3,range(len(line)-1)的结果元素是0,1

当i = 0 时,line[i] + line[i+1] = 1+2 = 3

当i = 1 时,line[i] + line[i+1] = 2+1 = 3

在这里,range()的返回结果是从0开始的,而不是1,因此列表的元素索引也是从0开始的

最后,再利用列表拼接,将首尾的1连接起来,就得到了我们想要的本行元素列表

同样,其它行的元素也是这样的操作,那么,在外围添加一个循环条件: while True

每次输出本行元素列表,然后计算下行元素列表,循环进行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值