使用Python中的递归在列表中添加数字

时间:2016-11-25 18:35:10

标签: python recursion

给定的模板是:

=IF(AND(
    ISERROR(VLOOKUP(A2, F$2:F$11, 1, FALSE)),
    ISERROR(VLOOKUP(A2, H$2:H$11, 1, FALSE)),
    ISERROR(VLOOKUP(A2, J$2:J$11, 1, FALSE))), B2, 0)

我得到了这个:

def total(lst):
    return (
        #### YOUR CODE HERE ####
        #### DO NOT WRITE CODE OUTSIDE OF THIS ####
        #### RETURN STATEMENT ####
    )

def getValue():    
    try:
        return int(input())
    except:
        return None        

v = getValue()
myLst = [v]
while v != None:    
    v = getValue()
    if v != None:
        myLst.append(v)
print(total(myLst))

输入是: 1 2 3 4 五 它应该打印所有数字的总和。 但这给了我一个错误:

def total(lst):
    return (
        if lst ==1:
            lst[0]
        else:
            lst[0]+total(lst[0:])
    )

def getValue():    
    try:
        return int(input())
    except:
        return None        

v = getValue()
myLst = [v]
while v != None:    
    v = getValue()
    if v != None:
        myLst.append(v)
print(total(myLst))

请帮我弄清楚我做错了什么!谢谢!

2 个答案:

答案 0 :(得分:1)

您在return 表达式中放置了一个if 语句。将语句放在表达式中是语法错误。请改用if表达式,例如

return (
    lst[0] if lst == 1 else lst[0] + total(lst[0:])
)

答案 1 :(得分:0)

由于您只允许在表达式中编写代码,因此需要对if - 语句使用略有不同的语法。

if len(lst) == 1:
    lst[0]
else:
    lst[0]+total(lst[0:])

可以写成单个语句:

lst[0] if len(lst) == 1 else lst[0]+total(lst[0:])

(假设您想检查列表的长度,而不是对int进行比较,这总是假的)