我不明白我的代码有什么问题。
我正在尝试添加列表的正值。
这是我的代码:
def sam(n):
for x in n:
if x > 0:
return sum(x)
答案 0 :(得分:2)
您实际上从未创建要添加的值。您每次迭代都会向列表中添加一个值。
只需遍历列表并手动添加:
def sam(n):
value = 0
for x in n:
if x > 0:
value += x
return value
或者你可以在一行中完成:
def sam(n):
return sum(x for x in n if x > 0)
为了更好的练习,你应该选择更好的变量。更有意义的变量更易于记忆,并使您的代码更具可读性:
因此n
可以是num_list
(或number_list
)。
您可以使用number
而不是使用x进行迭代。这告诉您该号码包含一个字母。
答案 1 :(得分:0)
您应该在递归调用中添加一个,并且需要在递归中识别基本因子(终止递归调用的条件)。
你可以试试这个:
def sum(n):
if(len(n) > 0):
if(x > 0):
return x + sum(n[(x+1):])
else:
return sum(n[(x+1):])
else:
return 0
此处递归调用x + sum(n[(x+1):])
在最后进行,因此它也称为尾递归。
并且,每次进行递归调用时,都需要传递列表的其余部分作为参数(这是通过切片列表完成的)。 sum(n[(x+1):])
或者,如果您只想要一种简单的方法来执行此操作而不使用递归,则可以使用迭代方法。为了使这更容易理解,你需要有一个额外的变量来跟踪总和。
所以,你的代码看起来像这样:
def sum(n):
s = 0
for x in n:
if(x > 0):
s += x
return s