列表索引超出范围(Python 3)

2024-10-01 15:29:27 发布

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

尝试使用递归计算整数或浮点列表的和。但是,我得到一个'列表索引超出范围'错误。 原谅我,如果这是愚蠢的,但我是非常新的,这仍然只是玩。你知道吗

def sum(listOfNumbers):
    listOfNumbers == int or float
    if len(listOfNumbers) == 1:
        return listOfNumbers[0]
    else:
        return listOfNumbers[0] + sum(listOfNumbers[1:])


for (input, output) in [ ([1.0], 1), ([1,2], 3), ([1,2.0,3], 6) ]:
    result = 'PASSED' if sum(input) == output else 'FAILED'
    print('Test', input, result)
    print(sum([]))

Tags: 列表inputoutputreturnifdef错误整数
2条回答

您正在将一个空列表作为参数传递给正在进行的print(sum())调用。也许可以尝试传递input以查看打印的sum()函数的结果。你知道吗

当列表中没有元素时,sum函数不能正常工作。len(listOfNumbers)将等于零,因此执行else子句,并尝试访问listOfNumbers[0]。但是没有元素的列表没有第0个元素,因此listOfNumbers[0]会因“列表索引超出范围”错误而崩溃。你知道吗

更改函数,使其处理长度为零的列表。实现这一变化的最简单方法是:

def sum(listOfNumbers):
    if len(listOfNumbers) == 0:
        return 0
    if len(listOfNumbers) == 1:
        return listOfNumbers[0]
    else:
        return listOfNumbers[0] + sum(listOfNumbers[1:])

。。。但实际上只需要一个基本情况,这样就可以删除中间子句:

def sum(listOfNumbers):
    if len(listOfNumbers) == 0:
        return 0
    else:
        return listOfNumbers[0] + sum(listOfNumbers[1:])

相关问题 更多 >

    热门问题