len() вычисляется каждый раз или это фиксированное значение не требующее обработки? Другими словами, если мне нужно несколько раз использовать len() то лучше сохранить это значение в переменной или на скорость вычисления это не влияет?
len() вычисляется каждый раз, но если обернуть len в range в цикле for, то len будет вычислено 1 раз перед первой итерацией. range получит текущее значение len, создаст фиксированный диапазон, и цикл будет выполнен по этому диапазону, даже если len потом поменяется. d=[10,20,30] for i in range(len(d)): d.append(i) print (d) Получим [10, 20, 30, 0, 1, 2] , т.е. цикл for выполнился 3 раза для range(3), потому что в момент выполнения len(d) было равно 3. Сравните с программой d=[10,20,30] for i in d: d.append(i) print(d) Эта программа зациклится, выдавая всё более возрастающий список d: [10, 20, 30, 10] [10, 20, 30, 10, 20] [10, 20, 30, 10, 20, 30] [10, 20, 30, 10, 20, 30, 10] [10, 20, 30, 10, 20, 30, 10, 20] ... Попробуйте также изменить строку for i in d[:]:
@@olegkomlev в последнем примере урока он же должен сначала 1 делить на 2 и вывести результат в консоль, потом 1 делить на 3 и так до тысячи, выводя постоянно результаты в консоль пока не переберет всë Почему консоль выдала значение примерно 6.89?
@@АристархРоссолимо Нет, он не должен выводить результаты в консоль после каждого деления. Обратите внимание на отступ. Оператор "S+= 1/i" имеет справа отступ в 4 пробела, а оператор print(S) отступа не имеет.Это значит, что тело цикла состоит только из "S+= 1/i", именно этот оператор и повторяется 999 раз. А только затем, после окончания цикла, один раз выполняется оператор print(S), который выводит получившийся результат S.
@@АристархРоссолимо Потому что принт без отступа, т.е. он выводит только результат после работы всех итераций цикла. Если поставить отступ в 4 пробела у принта, то он будет выводить каждую итерацию цикла, т.к. станет частью цикла.
Сергей, здравствуйте! Изучаю сейчас циклы, решаю задачи. Вот никак не могу одну решить! Уже дня 3 бьюсь и не пойму где ошибка? Если поможете, наведёте на мысль, буду очень признателен. Условие- На вход программе подается два натуральных числа a и b (a < b). Напишите программу, которая находит натуральное число из отрезка [a;b] с максимальной суммой делителей. Я написал такой вот код: a = int(input()) b = int(input()) summer = 0 num = 0 max_sum = 0 max_num = 0 for i in range(a, b + 1): for j in range(1, i): if i % j == 0: num = i summer += j if max_sum
Спасибо автору за объяснение цикла for и функции range(). Я по-прежнему стараюсь быть лучше каждый день, чтобы стать счастливым.
Очень подробно и доступно 👍👍
Очень ждал урок по функции range! Спасибо
Благодарю за очередной хороший урок!
Спасибо большое за проделанную работу
Спасибо вам огромное за ваши труды. Вы преподаватель от бога, благодаря вам поняла что не все потеряно)) Даже кипящего чайника можно обучить.
Огромное вам спасибо, за ваш труд!))👆🙏🦾
Спасибо за урок, прям как глоток горного воздуха
Очень хорошая лекция. Сергею спасибо 🙂
Спасибо, супер подача материала ❤️
Спасибо тебе, ты Человек!!!!
Отличный урок, спасибо!
Спасибо. Все стало понятным.
Очень понятно, спасибо. Лайк и подписка
Спасибо!
спасибо!👏👍
THE BEST of THE BEST
за 12 минут объяснил понятнее, чем училка в шк за пол года
Чуть позже посмотрю... А так like как обычно
len() вычисляется каждый раз или это фиксированное значение не требующее обработки? Другими словами, если мне нужно несколько раз использовать len() то лучше сохранить это значение в переменной или на скорость вычисления это не влияет?
Конечно лучше сохранять - влияет.
len() вычисляется каждый раз, но если обернуть len в range в цикле for, то len будет вычислено 1 раз перед первой итерацией. range получит текущее значение len, создаст фиксированный диапазон, и цикл будет выполнен по этому диапазону, даже если len потом поменяется.
d=[10,20,30]
for i in range(len(d)):
d.append(i)
print (d)
Получим [10, 20, 30, 0, 1, 2] , т.е. цикл for выполнился 3 раза для range(3), потому что в момент выполнения len(d) было равно 3.
Сравните с программой
d=[10,20,30]
for i in d:
d.append(i)
print(d)
Эта программа зациклится, выдавая всё более возрастающий список d:
[10, 20, 30, 10]
[10, 20, 30, 10, 20]
[10, 20, 30, 10, 20, 30]
[10, 20, 30, 10, 20, 30, 10]
[10, 20, 30, 10, 20, 30, 10, 20]
...
Попробуйте также изменить строку for i in d[:]:
@@olegkomlev в последнем примере урока он же должен сначала 1 делить на 2 и вывести результат в консоль, потом 1 делить на 3 и так до тысячи, выводя постоянно результаты в консоль пока не переберет всë
Почему консоль выдала значение примерно 6.89?
@@АристархРоссолимо Нет, он не должен выводить результаты в консоль после каждого деления. Обратите внимание на отступ. Оператор "S+= 1/i" имеет справа отступ в 4 пробела, а оператор print(S) отступа не имеет.Это значит, что тело цикла состоит только из "S+= 1/i", именно этот оператор и повторяется 999 раз. А только затем, после окончания цикла, один раз выполняется оператор print(S), который выводит получившийся результат S.
@@АристархРоссолимо Потому что принт без отступа, т.е. он выводит только результат после работы всех итераций цикла. Если поставить отступ в 4 пробела у принта, то он будет выводить каждую итерацию цикла, т.к. станет частью цикла.
Подскажите, пожалуйста, на 12:00 минуте, зачем в третьей строке писать S=0 ? какой в этом смысл? Заранее, спасибо
Во-первых, создаем переменную S. Во-вторых, инициализируем ее нулем, чтобы там точно 0 был.
Like!
👍
а как сделать шаг дробным к примеру for i in range( -2,2,0.5), но этот шаг питон выдаёт за ошибку
нельзя, range() только с целыми числами
@@selfedu_rus а если от меня задача требует числа от -2 до 2 выводить с шагом 0.5?
Сергей, здравствуйте! Изучаю сейчас циклы, решаю задачи. Вот никак не могу одну решить! Уже дня 3 бьюсь и не пойму где ошибка? Если поможете, наведёте на мысль, буду очень признателен. Условие- На вход программе подается два натуральных числа a и b (a < b). Напишите программу, которая находит натуральное число из отрезка [a;b] с максимальной суммой делителей. Я написал такой вот код:
a = int(input())
b = int(input())
summer = 0
num = 0
max_sum = 0
max_num = 0
for i in range(a, b + 1):
for j in range(1, i):
if i % j == 0:
num = i
summer += j
if max_sum
А почему мы поменяли х на i? Почему нельзя было продолжить с иксом
Обычно, x - это значение элемента, а i - индекс.
если range() это не список, тогда что это? Почему этот range не относится к общеизвестным типам данных?
это функция, которая работает с разными типами данных через индексы.
Можно ли чтобы цикл наоборот сработал типо от 10 до 1 тоесть 10 9 8 7 6 5 4 3 2 1
Можно, если указать отрицательный шаг. range(10, 0, -1)
Что такое итерация?
один проход цикла