你犯了几个错误:
-
您将值与索引混淆了。 for 循环为您提供列表中的值,而不是列表中的索引。仅因为您的值是整数,您的循环不会立即中断。
换句话说,i 没有设置为0、1、2,而是设置为1、2 和3。
您立即从函数中返回'false',当您找到一个不等于最大值的组合时。第一个总和是3(值1 然后转换为sum(argument[0:2]) 产生3),但你不要让循环继续。
要修复这些错误,请对 range() 函数的结果使用循环,并且仅在尝试所有组合时返回 'false':
def function(argument):
max_arg = max(argument)
argument.remove(max_arg)
for i in range(len(argument)):
if sum(argument[:i + 1]) == max_arg:
return "true"
return "false"
您的“不同组合”仍然很原始。您可以尝试使用itertools.combinations() 和不断增加的长度生成 3 个数字的所有可能组合:
from itertools import combinations
def function(argument):
max_arg = max(argument)
argument.remove(max_arg)
for length in range(1, len(argument) + 1):
for combo in combinations(argument, length):
if sum(combo) == max_arg:
return "true"
return "false"
现在元素的排列顺序不再重要; [1, 4, 3, 2, 6] 将返回 true,因为 1 + 3 + 2 产生 6。
演示:
>>> function([1, 2, 3, 6])
'true'
>>> function([1, 4, 3, 2, 6])
'true'
>>> function([1, 4, 3, 6])
'false'