#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