Discuss / Python / 找不出问题

找不出问题

Topic source

纸质盒子

#1 Created at ... [Delete] [Delete and Lock User]
# -*- coding: utf-8 -*-

def triangles():
    a=[1]
    x=1
    while True:
        yield a
        n=1
        x=x+1
        a.append(0)
        a1=a
        # print(a1)
        while n<x:
            a[n]=a1[n]+a1[n-1]
            n=n+1

请问这个哪里有问题?

纸质盒子

#2 Created at ... [Delete] [Delete and Lock User]

我测试了a1的值没有问题啊,为什么a加出来有问题

纸质盒子

#3 Created at ... [Delete] [Delete and Lock User]

我的心态炸了

a1=a 这句有问题,python 里面的'='会将两端“绑定”在一起,也就是说a改变的话,a1也会跟着变

https://www.cnblogs.com/xueli/p/4952063.html 我之前也出了这个错,解决方案参考这个

纸质盒子

#6 Created at ... [Delete] [Delete and Lock User]

感谢大佬指导

纸质盒子

#7 Created at ... [Delete] [Delete and Lock User]
# -*- coding: utf-8 -*-
import copy

def triangles():
    a=[1]
    while True:
        yield a
        p=1
        a.append(0)
        a1=copy.deepcopy(a)
        while p<len(a1):
            a[p]=a1[p]+a1[p-1]
            p=p+1

按照大佬的指导修改,并且优化之后输出的内容没有问题,但是显示测试失败

纸质盒子

#8 Created at ... [Delete] [Delete and Lock User]
# -*- coding: utf-8 -*-
import copy

def triangles():
    a=[1]
    while True:
        yield a
        a=list(a)
        p=1
        a.append(0)
        a1=copy.deepcopy(a)
        while p<len(a1):
            a[p]=a1[p]+a1[p-1]
            p=p+1

参照了下方 DoubX 的做法,添加了一行 a=list(a)解决了问题,但是还是没懂。

拜托,把最后解决打出来打看看。最后每个结果中每行都是一样的,,原因就是因为,你每次返回的是同一个数组引用。但是这个你每次循环都是会取出来的所以导致出问题呀


  • 1

Reply