2016-03-01 132 views
-1

我需要编写一个具有以下条件的类构造函数:向量类构造函数参数

构造函数应该只带一个参数。如果这个参数是一个int或一个long或从其中一个派生的类的一个实例,则认为这个参数是Vector的长度。在这种情况下,构造一个具有指定长度的Vector,每个元素初始化为0.0。如果长度为负数,则用适当的消息提出ValueError。如果参数不被认为是长度,那么如果参数是一个序列(例如list),则使用具有给定序列长度和值的向量进行初始化。如果参数未用作向量的长度,并且它不是序列,则用适当的消息提出TypeError

我不知道怎么写相应的错误,我应该使用这个类错误:

class Failure(Exception): 
    """Failure exception""" 
    def __init__(self,value): 
     self.value=value 
    def __str__(self): 
     return repr(self.value) 

在交互式控制台:

>>> Vector(3) 
Vector([0.0, 0.0, 0.0]) 
>>> Vector(3L) 
Vector([0.0, 0.0, 0.0]) 
>>> Vector([4.5, "foo", 0]) 
Vector([4.5, 'foo', 0]) 
>>> Vector(0) 
Vector([]) 
>>> Vector(-4) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
    File "vector.py", line 14, in __init__ 
    raise ValueError("Vector length cannot be negative") 
ValueError: Vector length cannot be negative 

这里是我的代码。我只需要添加的错误,一个在if语句时,它在else声明的intlong这是一个值误差,以及一个用于TypeError

def is_sequence(obj): 
    try: 
     len(obj) 
     obj[0:0] 
     return True 
    except TypeError: 
     return False 

class Vector: 
    l=[] 

    def __init__(self,object): 
     if(isinstance(object,long) |isinstance(object,int)): 
      x=int(object) 
      if(x<0): 

      else: 
       for i in range(0,x): 
        l.append(0.0) 

     elif(is_sequence(object)): 
      l.append(object) 

     else: 

我不知道如何做这个。

+1

SO不是“代码写入”服务,到目前为止您尝试过哪些代码?你有什么特别的问题? –

+1

你应该向我们展示一些代码_you_已经写好,然后我们帮你修复它。 –

回答

0
class Vector: 

    def __init__(self, obj): 
     self.v = [] 
     if(isinstance(obj, (int, long)): # For Python3 use isinstance(obj, int) 
      if(x < 0): 
       # raise error 
      else: 
       self.v += [0.0] * x 

     else: 
      self.v += obj # raises a type error is obj is not a sequence 
0

您可以通过使用多个条件语句尝试这样

if type(value) == <type 'list'> : 

if type(value) == <type 'int'> : 

东西等等。

+1

这不是你正在尝试做的正确的语法。 – idjaw

+0

“无论是int还是long或从其中一个派生类的实例” –