求和正偶数
写一个函数,计算一个整数列表中所有正偶数的总和。这个函数叫做 sum_positive_even,应该接受一个列表作为参数。你的函数要返回一个整数值。如果列表中没有正偶数,函数就应该返回 0。
例如:test_list = [1, 2, 3, 4]
print(sum_positive_even(test_list)) 结果是 6
这是我的代码:
test_list = []
sum = 0
for i in test_list:
if i%2==0 and i>0:
return sum+=i
else:
return 0
我这样做是不是完全错了?它一直显示错误。
4 个回答
-1
要返回一个值,你需要定义一个方法。
test_list = [-1, 2, 3, 4]
sum = 0
for i in test_list:
if i%2==0 and i>0:
sum+=i
print sum
其实如果你在写方法的话……
def sum_positive_even(test_list):
sum = 0
for i in test_list:
if i%2==0 and i>=0:
sum+=i
return sum
sum_positive_even([-1, 2, 3, 4])
#output 6
#sum_positive_even([-1, -2, 3, 5])
#output 0
解释:
- 要返回一个值,必须先定义一个方法。
- 根据题目的要求,比如说如果第一个元素是-1,那么逻辑就直接返回0,而不需要去查看列表中的其他元素。
- 所以,如果条件对所有元素都不成立,我们把和(sum)设为0,那么和就会保持为0。
1
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,当你在写代码时,可能会发现某个功能不能正常工作,这时候就需要去查找原因。
通常情况下,大家会去网上搜索解决方案,比如在StackOverflow上提问或者查看别人的问题和答案。这个过程就像是向朋友请教,看看他们有没有遇到过类似的情况,或者有没有好的解决办法。
在提问时,记得描述清楚你遇到的问题,包括你使用的工具、代码示例,以及你尝试过的解决方法。这样其他人才能更好地理解你的问题,并给出有效的建议。
总之,遇到问题不要慌,先冷静下来,仔细检查代码,然后再去寻求帮助。这样才能更快地找到解决方案,提升自己的编程能力。
# Note: sum is a built in function
test_list = [1, 2, 3, 4, -2, -8, 8]
def sum_positive_even(lst):
"Filter using a generator expression and return sum."
fgen = (n for n in lst if n % 2 == 0 and n > 0)
return sum(fgen, 0)
if sum_positive_even(test_list) == 14:
print("OK!")
if sum_positive_even([]) == 0:
print("Empty list OK!")
1
下面的代码有两个版本:一个是比较有经验的程序员可能会用的方法,另一个则是比较简单直接的做法,也就是对你尝试的修正。
def sum_positive_even(lst):
return sum(filter(lambda x: x > 0 and x%2 == 0, lst))
def sum_positive_even_v2(lst):
sum = 0
for i in lst:
if i%2==0 and i>0:
# remember that item by summing it up (don't return it yet)
sum+=i
# else: do nothing and check the next item
# all the list has been checked
return sum
test_list = [-2, -1, 0, 1, 2, 3, 4]
print(sum_positive_even(test_list))
print(sum_positive_even_v2(test_list))
关于第一个版本中使用的函数的文档:
Python 内置的 sum 函数
Python 内置的 filter 函数
1
>>> l = [1, -3, 4, 2, 0, -5]
>>> filter(lambda x: x > 0 and x%2 == 0, l)
[4, 2]
>>> sum(filter(lambda x: x > 0 and x%2 == 0, l))
6
然后把它定义成一个函数
def addEvenAndPositive(myList):
return sum(filter(lambda x: x > 0 and x%2 == 0, myList))
>>> addEvenAndPositive([1, -3, 4, 2, 0, -5])
6