Python, почему поведение цикла не меняется, если я меняю значение внутри цикла

Допустим, я написал кусок кода:

for i in range(10):
    print(i)
    i=11

Почему цикл не завершается сейчас?

Даже когда я делаю это:

n=10
for i in range(n):
    print(i)
    n=0

На петлю не влияет?

Мне просто интересно, как python управляет переменными цикла?

используйте цикл while в таком случае

Vaibhav Vishal 21.02.2019 05:39

Возможный дубликат Как изменить индекс цикла for в Python?

Vaibhav Vishal 21.02.2019 05:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
720
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Функция 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

Akaisteph7 08.07.2019 21:17
Ответ принят как подходящий

функция 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, ОП спрашивает о причине этого.

Debendra 21.02.2019 11:44

Другие вопросы по теме