我正在尝试在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]
我的脚本有什么问题?
谢谢!
答案 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]')