Hw:Python测试一个带有两个参数的函数计算它们并返回一个列表

时间:2016-04-30 21:59:49

标签: python python-2.6

我创建了一个函数,它接受两个参数计算它们并返回一个列表,每个元素设置为参数n和输入列表中相应值的总和。这是我的函数代码:

    def add_n_all(L,n):
        listx = map(lambda x:x + n, L)
        return listx

测试我的函数的代码如下所示:

    def testmap_1(self):
        L = [2, 3, 4]
        n = 2
        L2 = map.add_n_all(L,n)
        self.assertListAlmostEqual(L2, [4, 2, 5, 3, 6, 4])

    def testmap_1(self):
        L = [2, 3, 4]
        n = 2
        L2 = map.add_n_all(L,n)
        self.assertListAlmostEqual(L2, [3, 1, 6, 4, 8, 6])

然而,当我运行测试时,我不断收到此错误。我试图改变变量,但它似乎没有用,所以我不确定我做错了什么。

失败:testmap_1(主要 .TestCases)

     Traceback (most recent call last):
        File "map_tests.py", line 33, in testmap_1
        self.assertListAlmostEqual(L2, [3, 1, 6, 4, 8, 6])
     File "map_tests.py", line 7, in assertListAlmostEqual
        self.assertEqual(len(l1), len(l2))
     AssertionError: 3 != 6
   Ran 3 tests in 0.001s

   FAILED (failures=1)

2 个答案:

答案 0 :(得分:1)

您的函数不会增加长度,因此您将具有3个元素(L2)的列表与包含6个元素的列表进行比较,这些元素显然不相等。

答案 1 :(得分:0)

  

然而,当我运行测试时,我不断收到此错误。

当测试(或者换句话说AssertionError失败时)会引发Python中的

assert

assertListAlmostEqual中检查输入和输出列表的长度。

 self.assertEqual(len(l1), len(l2))

在您的测试用例中输入

L = [2, 3, 4]

的长度为3。

map()函数的输出列表的长度将与其输入的长度相同。因此,将输出L23)的长度与[3, 1, 6, 4, 8, 6]的长度(6)进行比较显然会使断言失败。

因此,在您的测试用例中,您需要纠正与L2对比的内容。

更改

self.assertListAlmostEqual(L2, [3, 1, 6, 4, 8, 6])

self.assertListAlmostEqual(L2, [4, 5, 6])

通过测试(除非您打算测试否定案例,在这种情况下您需要使用assertNotEqual)。

OR

如果您打算在每个元素上获得一个带有+n的输出列表,并且还要从列表中获取相应的元素,那么您可以执行以下操作之一(不编写代码...这是你的HW rt ...... ):

def add_n_all(L,n):
    # Consturct an empty list, which will be used to return as the output of this function
    # for each element in the list
        # do .extend() with [element+n, element] on the list initialized earlier for the purpose of this function return

    # return the output list

OR

def add_n_all(L,n):
    # good luck figuring out this list comprehension
    return [item for sublist in [[x+n, x] for x in L] for item in sublist]