当返回值相同时,为什么会出现断言错误?

2024-03-29 14:01:22 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,目前,我正在尝试创建一个简单的函数,它接受一个数字列表,并创建一个包含每个元素及其后续元素之间差异的新列表

比如说

difference([1, 2, 5, 3])将返回[1, 3, -2]

现在我的代码

def difference(numbers):
    for number in numbers:
        i=0
        dif_list=[]
        while i < len(numbers)-1:
            dif_list.append(numbers[i+1]-numbers[i])
            i +=1
        if len(dif_list) == len(numbers)-1:
            return print(dif_list)

这确实返回了正确的输出,但是当我尝试使用断言来检查它时,它会说有一个断言错误

assert difference([1, 2, 5, 3]) == [1, 3, -2] 发出

<ipython-input-23-c9c23c8f4955> in <module>
----> 1 assert difference([1, 2, 5, 3]) == [1, 3, -2]

有人知道为什么会这样吗


Tags: 函数代码in元素列表lendef数字
2条回答

如果通过删除print直接返回,它将起作用:

def difference(numbers):
    for number in numbers:
        i=0
        dif_list=[]
        while i < len(numbers)-1:
            dif_list.append(numbers[i+1]-numbers[i])
            i +=1
        if len(dif_list) == len(numbers)-1:
            return (dif_list)

assert difference([1,2,5,3]) == [1, 3, -2]
def difference(numbers):
    dif_list=[]
    i = 0
    while i < len(numbers)-1:
        dif_list.append(numbers[i+1]-numbers[i])
        i +=1
    if len(dif_list) == len(numbers)-1:
        return dif_list

assert difference([1,2,5,3]) == [1, 3, -2]
print('pass')

输出:pass

主要的问题是您返回了一个print(),但我也将您的dif_列表移到了for循环之外,因为这很有意义。变化不大,但这就是我要说的。我可能也会对它进行一些重构,但它现在已经运行了

编辑-我忍不住要重构一点,因为你的for循环完全没有必要,它什么都没做

相关问题 更多 >