如何循环定义? 〜值累加,直到达到极限,其余部分再次循环

时间:2019-02-16 21:53:02

标签: python while-loop sum

我在循环时很挣扎。 我有一个带有宽度的列表(双精度或整数,无所谓-不需要精度)。 基本上我需要总和低于限制的项目数。 现在,它仅找到第一个数字。 我无法适应while循环,因此它将重新开始计算其余项目。 该代码给出6作为输出,导致sum(100,300,30,100,50,80)

第一次迭代:从0开始直到总和达到限制:[100,300,30,100,50,80,400,120,500,75,180]->给出6

第二次迭代:从下一个(第一个运行+1的最后一个索引)开始,然后迭代其余的迭代:400,120,500,75,180->给出2

3rd:迭代500,75,180->给出3

宽度数=未知

如果width> limit->破坏代码

Widths = [100,300,30,100,50,80,400,120,500,75,180]

def items(nums,limit):  
    sum=0   
    for i in range(0,len(nums)):  
        sum += nums[i]
        if sum>limit-1:  
          return i

print (items(Widths,850))

我想要这样的输出: [6,2,3]

1 个答案:

答案 0 :(得分:0)

返回立即退出该函数。您需要存储而不是返回,然后从那里去。 我还指出了一些在代码中的注释也应该有所帮助。

Widths = [100,300,30,100,50,80,400,120,500,75,180]

def items(nums,limit):  
    acc = 0  #do not use sum as a variable name. it "shadows" or hides the builtin function with same name
    length = 0
    result = []
    for num in nums:  #You do not really need indexes here, so you can directly iterate on items in nums list. 
        acc += num 
        if acc >= limit: #greater than or equal to. 
            result.append(length)
            acc = num
            length = 1
        else:
            length += 1
    result.append(length) #if you need the last length even if it does not add up.
    return result


print (items(Widths,850))
#Output:
[6, 2, 3]