Допустим, я написал кусок кода:
for i in range(10):
print(i)
i=11
Почему цикл не завершается сейчас?
Даже когда я делаю это:
n=10
for i in range(n):
print(i)
n=0
На петлю не влияет?
Мне просто интересно, как python управляет переменными цикла?
Возможный дубликат Как изменить индекс цикла for в Python?






Функция range() генерирует целые числа между заданным начальным целым числом и конечным целым числом, которое обычно используется для повторения цикла for.
i возвращается вывод, а не задание.
Документы: https://docs.python.org/3/library/functions.html#func-диапазон
Циклы Python for основаны на итерации, а не на условии. Они останавливаются, когда достигается StopIteration, а не когда определенное логическое условие оценивается как False.
range создает временный объект диапазона, который нельзя изменить во время итерации. После range(10) или range(n) или как там еще этот объект не зависит от того, что было использовано для его создания.
Вероятно, вы ожидали, что произойдет что-то подобное (код C):
for (int i = 0; i < 10; ++i) {
printf("%d ", i);
i = 11;
}
Это не то, как цикл for работает в Python. Это больше похоже на это:
int range[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for (int count = 0; count < 10; ++count) {
int i = range[count];
printf("%d ", i);
i = 11;
}
Это очень хороший способ объяснить, что отличается при использовании диапазона! +1
функция range() возвращает список, который вы повторяете
Пример for i in range(5) эквивалентен for i in [1,2,3,4,5]
Цикл for останавливается, когда он получает StopIteration
Теперь, в вашем первом блоке,
for i in range(10):
print(i)
i=11
i присваивается 11 после печати, но после присвоения итерация завершается, и i переназначается следующему элементу списка.
Перемещение задания раньше работает так, как вы ожидаете
for i in range(10):
i=11
print i
Вывод:
11
11
11
11
11
11
11
11
11
11
Во втором блоке:
n=10
for i in range(n):
print(i)
n=0
n обновляется после того, как range() уже сгенерировал свой список [1...10], поэтому обновление n не имеет никакого эффекта
Любой код, который мы задаем внутри цикла for, воспринимается как единый блок и будет выполняться 10 раз от i=0 до 9.
Даже если вы присвоите i=11 или любую другую переменную x=1 внутри цикла for, она напечатает значение, которое мы присвоили 10 раз.
Пожалуйста, найдите вложения.
Вы отвечаете, как это сделать for loop, ОП спрашивает о причине этого.
используйте цикл while в таком случае