考虑错误的实例 - DIET

时间:2014-11-29 08:58:15

标签: python-3.x

我编写了一个脚本,通过this文章之后的离散区间编码树(饮食)来表示正整数,并且我目前正在运行测试(使用 unittest )。

class node:
    def __init__(self,n_Left=None,n_Right=None,LeftChild_=None,RightChild_=None):
      self.interval=[min(n_Left,n_Right),max(n_Left,n_Right)]
      self.RightChild=RightChild_
      self.LeftChild=LeftChild_
    def length(self):
        if (self.interval,self.LeftChild,self.RightChild)==([None,None],None,None):
            raise EmptyNode()
        return self.interval[1]-self.interval[0]+1


class diet:
    def __init__(self,root_=None):
        self.root=root_

    def member(self,saught_value):
        node_=self.root #a node instance
        if node_==None: return False
        if (saught_value>=(node_.interval)[0]) and (saught_value<=(node_.interval)[1]):
            return True
        if saught_value<(node_.interval)[0]:
            L=diet(node_.LeftChild)
            return L.member(saught_value)
        R=diet(node_.RightChild)
        return R.member(saught_value)

    def append(self,value):
        if self.member(value):
            return self
        node_=self.root
        if node_==None:
            return diet(node(value,value))
        right_child=node_.RightChild
        left_child=node_.LeftChild
        if value<(node_.interval)[0] :
          if value+1==(node_.interval)[0] :
            Root=node(value,(node_.interval)[1],left_child,right_child)
            return joinLeft(diet(Root))
          else:
            subtree=diet(left_child) 
            Root=node((node_.interval)[0],(node_.interval)[1],subtree.append(value),right_child)
            return diet(Root)
        if value >(node_.interval)[1]:
          if value==(node_.interval)[1]+1:
            Root=node((node_.interval)[0],value,left_child,right_child)
            return joinRight(diet(Root))
          else:
            subtree=diet(right_child  )
            Root=node((node_.interval)[0],(node_.interval)[1],left_child,subtree.append(value))             
            return diet(Root)


#TEST
max_number_of_nodes=20 
maximum=100
minimum=0

class Tests_Cases(unittest.TestCase):
    def setUp(self):
        self.number_of_nodes=random.randint(0,max_number_of_nodes)
        self.nLeft=random.randint(minimum,maximum)
        self.nRight=random.randint(minimum,maximum)
        self.root=node(self.nLeft,self.nRight)
        self.tree=diet(self.root)
        self.values=[]
        for i in range(max_number_of_nodes-1):
            (self.values).append(random.randint(minimum,maximum))
    def test_member(self):
        x=random.randint(minimum,maximum)
        self.assertFalse(diet().member(x))
        self.assertTrue(((self.tree).member(self.nLeft))&((self.tree).member(self.nRight)))
        for v in self.values:
            self.tree=(self.tree).append(v)
        for v in self.values:
            self.assertTrue((self.tree).member(v))

当我运行测试时,我有一个错误。这是追溯:

ERROR: test_member (__main__.Tests_Cases)

----------------------------------------------------------------------
Traceback (most recent call last):
  File "script.py", line 155, in test_member
    self.tree=(self.tree).append(v)
  File "script.py", line 101, in append
    if self.member(value):
  File "script.py", line 96, in member
    return R.member(saught_value)
  File "script.py", line 90, in member
    if (saught_value>=(node_.interval)[0]) and (saught_value<=(node_.interval)[1]):
AttributeError: diet instance has no attribute 'interval'

我无法通过运行R.member(saught_value)并测试 if 条件来了解原因,因此将node_视为饮食的一个实例:我明确提出了member定义的第一行node_=self.root,它应该是 node 的一个实例。

0 个答案:

没有答案