Как зациклить мое определение?~ сумма значений до достижения предела и повторение цикла для остальных - PullRequest
0 голосов
/ 17 февраля 2019

Я борюсь с во время зацикливания.У меня есть список с шириной (двойной или целое число, не имеет значения - не нужна точность).В основном мне нужно количество предметов, сумма которых ниже предела.Теперь он находит только первый номер.Я не могу адаптироваться к циклу while, поэтому он будет начинать вычисления заново с остальными элементами.Этот код дает 6 в качестве выходных данных, вызывая сумму (100,300,30,100,50,80) <предел = 850. Требуемый цикл будет делать это: </p>

1-я итерация: начинать с 0 до достижения предела суммы: [100,300,30,100,50,80,400,120,500,75,180] -> дать 6

2-я итерация: начать со следующего (последний индекс с 1-го цикла +1) и повторить все остальное: 400 120 500 755 180 -> дать 2

3-й: итерация более 500,75,180 -> дать 3

Количество ширин = неизвестно

если ширина> предел -> нарушить код

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 голосов
/ 17 февраля 2019

возврат сразу выходит из функции.Вам нужно хранить вместо возвращения, и идти оттуда.Я также указал на некоторые комментарии в коде, которые должны помочь.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...