【发布时间】:2020-04-25 18:58:24
【问题描述】:
我的代码应该接收一个整数和一个整数列表。它返回 列表中的整数之和除了,它忽略 不吉利的数字和紧跟在它后面的数字 倒霉的号码。我只是尝试使用递归(无迭代)。到目前为止,我的代码适用于前 5 个案例,但后 2 个案例存在问题,因为它们最后有不吉利的数字。我不会试图完全重写我的函数,只是在我目前拥有的内容中发现错误。
def unlucky(unlucky_num, a_list):
"""
>>> unlucky(13,[1])
1
>>> unlucky(13,[1,2,3,4,5,6])
21
>>> unlucky(13,[13,1,2,3])
5
>>> unlucky(13,[1,13,2,3])
4
>>> unlucky(13,[13, 0])
0
>>> unlucky(13,[13,1,2,13,2,1,13]) #13,1,13,2,13 ignored
3
>>> unlucky(7,[7,4,5,7,5,4,7]) #7,4,7,5,7 ignored (7 is unlucky)
9
"""
if a_list == []:
return 0
if a_list[0] == unlucky_num:
if len(a_list) > 1:
return unlucky(unlucky_num, a_list[2:])
return unlucky(unlucky_num, a_list)
return a_list[0] + unlucky(unlucky_num, a_list[1:])
对于最后两种情况,我收到以下错误(文件名已编辑):
Error
**********************************************************************
File "------", line 39, in sum_unlucky
Failed example:
sum_unlucky(13,[13,1,2,13,2,1,13]) #13,1,13,2,13 ignored
Exception raised:
Traceback (most recent call last):
File "-------", line 138, in __run
exec(compile(example.source, filename, "single",
File "<doctest sum_unlucky[5]>", line 1, in <module>
sum_unlucky(13,[13,1,2,13,2,1,13]) #13,1,13,2,13 ignored
File "-------", line 50, in sum_unlucky
return sum_unlucky(unlucky_num, a_list[2:])
File "---------", line 52, in sum_unlucky
return a_list[0] + sum_unlucky(unlucky_num, a_list[1:])
File "--------", line 50, in sum_unlucky
return sum_unlucky(unlucky_num, a_list[2:])
File "--------", line 52, in sum_unlucky
return a_list[0] + sum_unlucky(unlucky_num, a_list[1:])
File "-------", line 51, in sum_unlucky
return sum_unlucky(unlucky_num, a_list)
File "------", line 51, in sum_unlucky
return sum_unlucky(unlucky_num, a_list)
File "------", line 51, in sum_unlucky
return sum_unlucky(unlucky_num, a_list)
[Previous line repeated 986 more times]
File "----", line 45, in sum_unlucky
if a_list == []:
RecursionError: maximum recursion depth exceeded in comparison
【问题讨论】:
-
你得到了什么结果?把它放在问题中是有帮助的,这样我们就可以更容易地看到问题。
-
如果不清楚,我深表歉意。我正在使用以红色突出显示的 doctest 来演示示例输出。但会包含错误。
-
没问题,提前准备好所有信息会有所帮助。很清楚您的期望,但有助于显示您实际获得的结果。
-
您没有向
if a_list[0] == unlucky_num提供 else,所以当列表中的最后一个数字是不幸的数字时,它永远不会停止。它不断返回return a_list[0] + unlucky(unlucky_num, a_list[1:])
标签: python list recursion list-comprehension