python杨辉三角形原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python杨辉三角形原理相关的知识,希望对你有一定的参考价值。

主要就是为什么11,11,2,1然后就是1,3,3,1那个2去哪了画红圈的地方应该是和L1.insert(i,L[i-1+i])意思一样吧,但为什么要用L[i-1]+L[i]不直接用i呢回答的好再加悬赏
追问没说清楚,其实我说的两个数是那两个3,为什么会出现两个,是函数里哪句起到了这个作用

triangles里用到了yield,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 triangles(5) 不会执行 triangles函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield L 时,triangles函数就返回一个迭代值,下次迭代时,代码从 yield L 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

1 那个2去哪了

你看else语句 L1 = [1,1]每次L都是基于这个L1生成的 比如L=[1,2,1] 那么下一个L1就是[1,3,3,1],下一句L = L1 所以每次都是新的L1生成


2 画红圈的地方应该是和L1.insert(i,L[i-1+i])意思一样

不一样,插入的值是两个数的和

def triangles(max):
    L = [1]
    n = 0
    while(n<max):
        n = n+1
        if(n == 2):
            L=[1,1]
            yield L
        else:
            i = 1
            L1 = [1,1]
            while(i<=n-2):
                L1.insert(i,L[i-1]+L[i])
                i=i+1
            L = L1
            yield L


for n in triangles(5):
    print n

追问

好吧,第一点听懂了,但第二点就。。。,希望能一起解释下为什么会出现两个数

追答

1
1,1
[1,2,1]
[1,3,3,1]

i=1
L=[1,2,1]
L1=[1,1]
while(i<=n-2):
n是4的话 会执行2次L1.insert(i,L[i-1]+L[i]),即L1.insert(1,3),L1.insert(2,3)

参考技术A 当然不一样,i 只是 List 的下标而已,具体的数是 L[i],杨辉三角的计算方式是当前数字头顶的两个数字之和。

杨辉三角形函数 JavaScript Generator 实现

起源

近年关,思乡情浓。于是看起了python,在廖雪峰的python教程中看到了python Generator感觉与 JavaScript 颇有神似,故译之。

百度百科语言实现 唯独少了我大 JavaScript,这怎么能行呢?

实现

这种情况下,我是极力不想承认我的工作是翻译python

  • ES6 Generator 实现
function *triangles() {
    var arr = [1], tempArr = [];

    while (true) {
        yield arr;
        arr.push(0)
    // console.log(arr)
    tempArr = Array.from({length: arr.length}).map((item, index) => index++)
    // console.log(tempArr);

        arr = arr.map((t, i) => (arr[i-1] || 0) + arr[i])
    // console.log(arr)
    }
}
  • Test:
const yhItrator = triangles()

console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)
console.log(yhItrator.next().value)

以上是关于python杨辉三角形原理的主要内容,如果未能解决你的问题,请参考以下文章

利用队列打印出n行杨辉三角形.用C语言

以杨辉三角形的三种实现体会python的编程特性

python写杨辉三角形

C语言:杨辉三角形

杨辉三角形

课堂作业之杨辉三角形