Discuss / Python / 哎呀,不好意思,看了楼上的答案,才照着做出来的呢,分享一下错误,总之,满满的自卑感,感觉自己太笨太笨了呀

哎呀,不好意思,看了楼上的答案,才照着做出来的呢,分享一下错误,总之,满满的自卑感,感觉自己太笨太笨了呀

Topic source

正确答案: def triangles(): Y=[1] while True: M=[1] yield Y

    #Y=[1]+[Y[i]+Y[i+1] for i in range(len(Y)-1)]+[1]
    for i in range(len(Y)-1):
        M.append(Y[i]+Y[i+1])
    M.append(1)
    Y=M

错误答案:
def triangles(): n=0 M=[1] L=[1] while True:
yield(L) n+=1 if n==1: L.append(1) elif n>=2: L=[1] for i in range(1,n): L.append(M[i-1]+M[i]) L.append(1) M=L 错误在于:输出前两项为 [1,1] [1,1][1,1] 可是为什么不输出result,就和答案一样呢?真不知道哪里的问题。。。 哎,感觉笨死了,突然觉着自己智商有问题,呜呜

输出写错了,输出是:[[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]]

上次代码出现的问题,现在已经解决。 问了一个我狠狠狠仰慕的大神。顺便把大神说给我的话分享一下。 def triangles(): n=0 M=[1] L=[1] while True:
yield(L) n+=1 if n==1: L=[1,1]

        #L.append(1)
    elif n>=2: 
        L=[1]
        for i in range(1,n):
            L.append(M[i-1]+M[i])
        L.append(1)
    M=L

#yield是L的一个引用,所以后续修改也会影响L的引用的值

#多看看相关的基础书,应该有帮助

#没有捷径吧,我也是一点点试错的经验得来这些结果的

#不过要是能仔细看书,应该会少走很多弯路吧

#python默认都是引用,浅拷贝,所以你要注意这个,有点坑

#除非你明确地指示深拷贝

#我是学生物的,然后说自己要学这学那,想学好多东西,结果大神说:"我觉得还是量力而行吧,能做好一件是一件吧"。

#但是不管怎样,我都会努力,哈哈哈,谢谢大神,一直那么那么麻烦你,真心说声谢谢
--小饭盆2018年2月3日19:16:57


  • 1

Reply