Проблема здесь в том, что вы пытаетесь изменить переменную цикла цикла for
. Python не мешает вам делать i = i + 1
внутри цикла, но как только управление возвращается к началу цикла, i
сбрасывается на любое значение, следующее за последовательностью. Это просто способ, которым циклы for
работают в Python, это также происходит, если вы перебираете список или кортеж, а не range
. Например,
for i in (2, 3, 5, 7, 11):
print(i)
i = 10 * i
print(i)
выход
2
20
3
30
5
50
7
70
11
110
Однако получить желаемый результат просто. В следующем коде я заменил ваш бесконечный цикл while
на маленький цикл for
.
i = 0
for j in range(3):
print("\ni initialized as", i)
for i in range(i, i + 3):
print ("inside for", i)
i += 1
выход
i initialized as 0
inside for 0
inside for 1
inside for 2
i initialized as 3
inside for 3
inside for 4
inside for 5
i initialized as 6
inside for 6
inside for 7
inside for 8
Если внешний цикл не бесконечен, вы можете сделать это с помощью одного цикла и теста if
. Он более компактен, но немного медленнее, поскольку должен выполнять тест на каждой итерации цикла.
outer_loops = 4
inner_loops = 3
for i in range(outer_loops * inner_loops):
if i % inner_loops == 0:
print("\nIteration", i // inner_loops)
print ("inside for", i)
выход
Iteration 0
inside for 0
inside for 1
inside for 2
Iteration 1
inside for 3
inside for 4
inside for 5
Iteration 2
inside for 6
inside for 7
inside for 8
Iteration 3
inside for 9
inside for 10
inside for 11