美文网首页
Python学习之二:杨辉三角(生成器)

Python学习之二:杨辉三角(生成器)

作者: 快乐的杀马特 | 来源:发表于2017-10-22 20:49 被阅读0次

概念

一边循环一边计算的机制,称为生成器:generator。


题目

杨辉三角定义如下:

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10  10  5  1

把每一行看做一个list,试写一个generator,不断输出下一行的list:

# -*- coding: utf-8 -*-

def triangles():

# 期待输出:

# [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]

n = 0

for t in triangles():

print(t)

n = n + 1

if n == 10:

break


答案

def triangles():

L=[1]

while True:

yield  L

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

n=0

for t in triangles():

print(t)

n+=1

if  n ==10:

break


思路

杨辉三角的规律:

1、第n行有n个数字

2、每行的前后,都是“1”

3、第n行的第L[i]的值,等于第n-1行第L[i]+L[i+1]的值


解法

定义函数,求杨辉三角

定义第一个数组,初始化是[1],也就是杨辉三角的第一个值。

随后建一个生成器,使用yield函数来声明这是一个生成器并循环打印L(该行数组)为:[1]+[L[i]+L[i+1]for i in range(len(L)-1)]+[1]

下面开始不懂:

首末两位是1,中间是一个循环,循环内容:[L[i]+L[i+1]for i in range(len(L)-1)],代表中间的那些数字,这其中:

求得的值:L[i]+L[i+1]

形参:i

实参:range(len(L)-1)]   #这里不懂,range是一个序列,代表从0到len(L)-1,L是一个序列,它的长度是什么呢?

相关文章

网友评论

      本文标题:Python学习之二:杨辉三角(生成器)

      本文链接:https://www.haomeiwen.com/subject/duenuxtx.html