我想开发一个功能,它接收一个数字列表并返回' True'如果这些数字中任何3个的总和等于0,如果不是,则返回False。 例如,如果我输入[2,2,1,-1,0],输出应为“真”,因为1-1 + 0 = 0
def sum3(list):
list=map(str,list)
for a in list:
for b in list:
for c in list:
if int(a)+int(b)+int(c)==0:
return True
else:
return False
到目前为止我有这个代码,但它只能用于FIRST三个数字的总和等于三。
答案 0 :(得分:2)
我不知道为什么你map
到strings
然后转换回整数,所以我删除了它,尽管修复它并不重要。此外,您应该将参数重命名为l
(或等效),而不是list
,因为这会覆盖内置的list()
函数。
主要的是将return False
移到3 for-loops
之外,以便只有在评估了所有组合后才会返回。您还需要仅搜索列表中的元素而不是当前正在评估的元素。如果存在@Hazerd
,那么该函数将返回0
,因为True
将会0
,a
,b
和/ c
一次。
这给出了纠正的功能:
def sum3(l):
for a in range(len(l)):
for b in range(a+1, len(l)):
for c in range(b+1, len(l)):
if l[a]+l[b]+l[c] == 0:
return True
return False
并且一些测试表明它有效:
>>> sum3([2, 2, 1, -1, 0])
True
>>> sum3([0, 1, 2])
False