【问题标题】:Python Unit Test Case error: takes exactly 2 arguments (3 given)Python 单元测试用例错误:恰好需要 2 个参数(给定 3 个)
【发布时间】:2021-04-25 10:02:55
【问题描述】:

在运行 python Binary Search Tree Traversal 的测试用例时遇到问题。它给出了一个错误:

======================================================================
ERROR: test_case_1 (__main__.TestProgram)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "BST_traversal.py", line 31, in test_case_1
    self.assertEqual(root.inOrderTraversal(root,[]),inOrder)
TypeError: inOrderTraversal() takes exactly 2 arguments (3 given)

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

BST 的代码是:

import unittest

class BST:
    def __init__(self,value):
        self.value = value
        self.left = None
        self.right = None

    def inOrderTraversal(self,array):
        if self is not None:
            inOrderTraversal(self.left,array)
            array.append(self.value)
            inOrderTraversal(self.right,array)
        return array

class TestProgram(unittest.TestCase):
    def test_case_1(self):
        root = BST(10)
        
        root.left = BST(5)
        root.left.left = BST(2)
        root.left.left.left = BST(1)
        root.left.right = BST(5)
        root.right = BST(15)
        root.right.right = BST(22)

        inOrder = [1, 2, 5, 5, 10, 15, 22]
        preOrder = [10, 5, 2, 1, 5, 15, 22]
        postOrder = [1, 2, 5, 5, 22, 15, 10]

        self.assertEqual(root.inOrderTraversal(root,[]),inOrder)

if __name__ == '__main__':
    unittest.main()

即使为 BST 开设了单独的课程也对我没有太大帮助。

【问题讨论】:

  • Python 的self argument is implicit。您将需要对您的实现进行重大调整(创建单独的独立函数,或修改 inOrderTraversal 以接受其他参数)。

标签: python binary-search-tree inorder


【解决方案1】:

self 是一个隐藏参数,你不需要给出

import unittest


class BST:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

    def inOrderTraversal(self, data, array):
        if data is not None:
            data.inOrderTraversal(data.left, array)
            array.append(data.value)
            data.inOrderTraversal(data.right, array)
        return array


class TestProgram(unittest.TestCase):
    def test_case_1(self):
        root = BST(10)

        root.left = BST(5)
        root.left.left = BST(2)
        root.left.left.left = BST(1)
        root.left.right = BST(5)
        root.right = BST(15)
        root.right.right = BST(22)

        inOrder = [1, 2, 5, 5, 10, 15, 22]
        preOrder = [10, 5, 2, 1, 5, 15, 22]
        postOrder = [1, 2, 5, 5, 22, 15, 10]
        arr = root.inOrderTraversal(root, [])
        print(arr)
        self.assertEqual(arr, inOrder)


if __name__ == '__main__':
    unittest.main()
.
[1, 2, 5, 5, 10, 15, 22]

【讨论】:

    【解决方案2】:
    import unittest
    
    class BST:
        def __init__(self,value):
            self.value = value
            self.left = None
            self.right = None
    
        def inOrderTraversal(self,array):
            if self and self.left:
                self.left.inOrderTraversal(array)
            if self:
                array.append(self.value)
            if self and self.right:
                self.right.inOrderTraversal(array)
            return array
    
    class TestProgram(unittest.TestCase):
        def test_case_1(self):
            root = BST(10)
    
            root.left = BST(5)
            root.left.left = BST(2)
            root.left.left.left = BST(1)
            root.left.right = BST(5)
            root.right = BST(15)
            root.right.right = BST(22)
    
            inOrder = [1, 2, 5, 5, 10, 15, 22]
            preOrder = [10, 5, 2, 1, 5, 15, 22]
            postOrder = [1, 2, 5, 5, 22, 15, 10]
    
            self.assertEqual(root.inOrderTraversal([]),inOrder)
    
    if __name__ == '__main__':
        unittest.main()
    

    应该运行。您已经非常接近了,只需要了解self 参数的工作原理。 is not None 也是多余的,仅供参考。

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多