Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用递归返回列表中不包括K和以下数字的和_Python_List_Recursion_List Comprehension - Fatal编程技术网

Python 使用递归返回列表中不包括K和以下数字的和

Python 使用递归返回列表中不包括K和以下数字的和,python,list,recursion,list-comprehension,Python,List,Recursion,List Comprehension,我的代码应该接收一个整数和一组整数。它回来了 列表中整数的总和,但忽略 不吉利的数字和紧跟其后的数字 不幸的数字。我只是尝试使用递归(没有迭代)。到目前为止,我的代码适用于前5种情况,但与后2种情况有问题,因为它们的末尾有不吉利的数字。我没有试图完全重写我的函数,只是在我当前的函数中发现了错误 def unlucky(unlucky_num, a_list): """ >>> unlucky(13,[1]) 1 >>> unlu

我的代码应该接收一个整数和一组整数。它回来了 列表中整数的总和,但忽略 不吉利的数字和紧跟其后的数字 不幸的数字。我只是尝试使用递归(没有迭代)。到目前为止,我的代码适用于前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:]) 
对于最后两种情况,我收到以下错误(文件名已编辑):

错误
**********************************************************************
文件“----”,第39行,用sum_表示不吉利
失败示例:
sum#u不幸(13,[13,1,2,13,2,1,13])#13,1,13,2,13被忽略
提出的例外情况:
回溯(最近一次呼叫最后一次):
文件“-----”,第138行,处于运行状态
exec(compile)(example.source,文件名,“single”,
文件“”,第1行,在
sum#u不幸(13,[13,1,2,13,2,1,13])#13,1,13,2,13被忽略
文件“-----”,第50行,sum_不幸
返回sum_unlucky(unlucky_num,a_列表[2:])
文件“-----------”,第52行,不吉利
返回一个_列表[0]+sum_unlucky(unlucky_num,a_列表[1:])
文件“----------”,第50行,总计
返回sum_unlucky(unlucky_num,a_列表[2:])
文件“----------”,第52行,不吉利
返回一个_列表[0]+sum_unlucky(unlucky_num,a_列表[1:])
文件“-----”,第51行,sum_不幸
返回和不吉利(不吉利的数字,一个列表)
文件“----”,第51行,用sum_表示不吉利
返回和不吉利(不吉利的数字,一个列表)
文件“----”,第51行,用sum_表示不吉利
返回和不吉利(不吉利的数字,一个列表)
[上一行重复986次以上]
文件“---”,第45行,用sum\u表示不吉利
如果一个_列表==[]:
RecursionError:比较中超出了最大递归深度

正如Mark Meyer所说,它永远不会到达
列表=[]
。尝试:

def unlucky(unlucky_num,一个列表):
如果len(a_列表)==1:
如果一个_列表[0]==不走运的_num:
返回0
其他:
返回一个_列表[0]
如果一个_列表[0]==不走运的_num:
如果len(a_列表)>1:
返回unlucky(unlucky_num,a_列表[2:])
返回不吉利(不吉利的数值,一个列表)
返回一个\u列表[0]+不吉利(不吉利的\u num,一个\u列表[1:])

如果
len(a_列表)==1,您忘记排除不吉利的数字。请使用
a_列表[1:][/code>

def unlucky(unlucky_num, a_list):
    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[1:])  # <- Here
    return a_list[0] + unlucky(unlucky_num, a_list[1:])

实际上,您只需要两个测试,这将更容易避免错误。一个测试基本情况,即空数组和一个测试不吉利的数字。您不需要测试基本情况后的长度,因为您可以传回空数组。通过这两个测试,函数的编写方式可以非常准确地反映需求可读方式:

def unlucky(unlucky_num, a_list):
    if not a_list:                             # base case
        return 0 

    head, *rest = a_list                       # rest will be [] when len(a_list) == 1

    if head == unlucky_num:
        return unlucky(unlucky_num, rest[1:])
    return head + unlucky(unlucky_num,rest)

unlucky(7,[7,4,5,7,5,4,7])
# 9

你得到了什么结果?把它放在问题中很有帮助,这样我们可以更容易地看到问题。如果不清楚,我很抱歉。我用红色突出显示的doctest来演示示例输出。但是会包括错误。没问题,这只会有助于提前获得所有信息。很清楚你期望的是什么,但有助于显示您实际得到的结果。如果某个列表[0]==unlucky\u num
您没有提供else to
,因此当列表中的最后一个数字是不吉利的数字时,它不会停止。它会不断返回
return a\u list[0]+unlucky(unlucky\u num,a\u list[1:])
这似乎有效,但它会在案例中产生另一个错误
>>不幸(13[13,0])
请检查!它比我的更清楚!
def unlucky(unlucky_num, a_list):
    if a_list in ([], [unlucky_num]):
        return 0
    elif a_list[0] == unlucky_num:
        return unlucky(unlucky_num, a_list[2:])
    return a_list[0] + unlucky(unlucky_num, a_list[1:])
def unlucky(unlucky_num, a_list):
    if not a_list:                             # base case
        return 0 

    head, *rest = a_list                       # rest will be [] when len(a_list) == 1

    if head == unlucky_num:
        return unlucky(unlucky_num, rest[1:])
    return head + unlucky(unlucky_num,rest)

unlucky(7,[7,4,5,7,5,4,7])
# 9