📅  最后修改于: 2023-12-03 15:28:44.119000             🧑  作者: Mango
本问题涉及程序的正确性。
以下是一个计算列表中所有元素之和的Python程序实现。考虑在列表为空的情况下程序的行为。
def sum(L):
if not L:
return 0
else:
return L[0] + sum(L[1:])
print(sum([1,2,3,4,5]))
输出结果为:15
该程序递归地调用自己,每次传入的参数是列表L去掉第一个元素后的子列表。最终的返回值是列表中所有元素之和。程序的基础情况是在列表为空时返回0。
但是如果程序的参数是一个空列表,则会出现错误。这是因为在程序的第二行中,通过not L
判断列表是否为空,当L
为空列表时,not L
即为True,程序返回0,这个结果是正确的。但是,在程序的第五行中,当递归调用sum()
函数时,传入的参数是空列表[]
,此时程序会出现IndexError异常,因为空列表[]
没有第一个元素,因此无法进行索引访问L[0]
操作,导致程序崩溃。
防治此类错误的方法是在程序第二行的判断条件中,将not L
改成L is None
或者L == None
。
因此,修正后的程序如下代码所示:
def sum(L):
if L is None or len(L) == 0:
return 0
else:
return L[0] + sum(L[1:])
print(sum([1,2,3,4,5]))
print(sum([]))
上述代码的输出结果为:
15
0
可以看出,在列表为空时,程序返回0,不会出现异常。