向量输入在Python中给出输出向量`[0,...,0]`

时间:2016-05-31 10:30:34

标签: python vector

我正在尝试在Python中创建一个矢量类。我还没到那么远,而且已经卡住了。

这是我目前的代码:

    class vector:

        def __init__(self, n, l = []):
            self.v = []
            if(isinstance(n, int)):
               x = int(n)
               if (x < 0):
                   return SyntaxError
               else:
                   self.v += [0.0] * x
            else:
               self.v += n

        def __str__(self):
            return str(self.v)

问题是,当我的输入是

    >>> u = vector(3,3.14)
    >>> print(u)

然后我的输出是

    [0.0, 0.0, 0.0] 

但我希望它是

    [3.14,3.14,3.14]

我还想要以下内容:

    >>> v=[3,[2.0,3.14,-5])
    >>> print(v)
    [2.0,3.14,-5]

我的脚本有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

您有[0.0] * x,但我认为您的意思是[l] * x

清除代码必须支持的类型并将其写下来真的很有帮助。它还有助于定义输入和输出组合的清晰列表,您可以将它们用作测试:

class Vector(object):
    def __init__(self, n, l):
        if isinstance(l, (list, tuple)):  # l is a list, check length
            if len(l) == n:  # length as required, keep as is
                pass
            elif len(l) > n:  # to long, use only the first n items
                l = l[0:n]
            elif len(l) < n:  # to short, append zeros
                l += [0] * (n - len(l))

        elif isinstance(l, (int, float)):  # create a list containing n items of l
            l = [l] * n

        self.v = l

    def __str__(self):
        return str(self.v)

添加一些测试:

def test(a, b):
    print 'input: {}, output: {}'.format(a, b)
    if str(a) != b:
        print('Not equal!')

test(Vector(3, 3.14), '[3.14, 3.14, 3.14]')
test(Vector(3, [4, 4, 4]), '[4, 4, 4]')
test(Vector(2, [4, 4, 4]), '[4, 4]')
test(Vector(4, [4, 4, 4]), '[4, 4, 4, 0]')
test(Vector(3, [2.0, 3.14, -5]), '[2.0, 3.14, -5]')