Программа Python, Исключить группы

#python #for-loop

Вопрос:

     kicked = 0

    def calculate():
        room = 0
        global kicked
        
        N = input("Write the number of groupsn")
        M = input("Write the size of the groups, separated with space:n").split()
        for elem in M:
            if room int(elem)<int(N) 1:
                room  = int(elem)
            else:
                kicked  = 1
                
    while True:
        try:
            calculate()
            print(kicked, "groups did not fit")
            break
        except:
            print("An exception occurred, try again:n")
 

В основном мне нужна помощь, чтобы объяснить мой цикл for.
во-вторых, я не могу использовать вход разветвителя на своем первом входе, почему?

Комментарии:

1. Просить о помощи «объяснить мой цикл for» немного необычно — это ваш цикл, вы должны знать, что он делает 😀 В любом случае он в основном проверяет, является ли сумма всех элементов в M, если она все еще меньше или равна N; если нет, он «пинает» все оставшиеся элементы. Не самый эффективный способ сделать это, но он работает. Для второго вопроса: вы, конечно , можете использовать split() свой первый ввод, но вы получите list , а не одно значение — поэтому вам нужно будет сделать что-то вроде `int(N[0]), чтобы получить число

2. Большое тебе спасибо, братан. Вы сказали, что это не самый эффективный способ, так как бы вы это сделали?

Ответ №1:

Преобразование предыдущего комментария в ответ и добавление некоторых подсказок по оптимизации, которые не поместились бы в комментарии:

Просить о помощи «объяснить мой цикл for» немного необычно — это ваш цикл, вы должны знать, что он делает 😀 В любом случае он в основном проверяет, является ли сумма всех элементов в M той мере, в какой она все еще меньше или равна N ; если нет, он «пинает» все оставшиеся элементы. Не самый эффективный способ сделать это, но он работает. По второму вопросу: вы, конечно, можете использовать split() свой первый ввод, но вы получите список, а не одно значение — поэтому вам нужно будет сделать что-то вроде int(N[0]) , чтобы получить номер.

Оптимизации:

  • приведение строки к int не особенно медленное, но нет необходимости повторять одну и ту же операцию много раз. Итак, давайте перейдем N к int раз и навсегда:
 N = int(input("Write the number of groupsn"))
 
  • по той же причине давайте преобразуем каждый elem из них в int один раз, а не дважды, и пока мы здесь, давайте проверим на меньшее или равное, вместо добавления 1 и тестирования на меньшее, чем (этот последний пункт даст лишь очень небольшое улучшение, но улучшит читаемость):
 for elem in M:
    e = int(elem)
    if room   e <= int(N):
        room  = e
 
  • наконец, как только мы пинаем группу, нет необходимости продолжать цикл — мы пинаем все остальное. Итак, давайте вычислим, сколько групп мы выбиваем, и выйдем из цикла:
 for i,elem in enumerate(M):
    e = int(elem)
    if room   e <= int(N):
        room  = e
    else:
        kicked = len(M) - i
        break