Привет, я пытаюсь понять порядок вложенных циклов. Первый цикл через внешний цикл возвращает 13 16 19 113 116 119 Похоже, что сначала он начинается с внешнего цикла, затем полностью проходит итерации внутреннего цикла и возвращается к внешнему циклу, пока не начнутся итерации, это правильно? Так ли это для большинства вложенных циклов? Заранее спасибо!
i1 = 1
while i1 < 19:
i2 = 3
while i2 <= 9:
print(f'{i1}{i2}', end=' ')
i2 = i2 + 3
i1 = i1 + 10
Когда я прошел вторую итерацию внешнего цикла, i2 перезаписывает обратно на 3 (вместо 6), что меня смущает и является неправильным.
Это хорошая возможность для вас начать знакомство с с помощью отладчика. Когда вы выполняете код в отладчике, какая операция первой приводит к неожиданному результату? Какие значения использовались в этой операции? Каков был результат? Какой результат ожидался? Почему?
Итак, вы ожидаете, что оператор i2 = 3
присвоит значение 6 (а не 3) на второй итерации внешнего цикла? ПОЧЕМУ???
Кажется, здесь есть некоторые проблемы с отступами. Пожалуйста, отредактируйте соответствующим образом.
Другой возможный источник недопонимания - вы описываете 13 16 19 113 116 119
как «первый цикл через внешний цикл», но на самом деле это две итерации внешнего цикла. Результат будет намного яснее, если вы поставите какой-нибудь разделитель между i1
и i2
, чтобы можно было определить, какие цифры из какой переменной.
Чтобы просто решить такие вопросы, просто добавьте операторы печати, такие как print('inner') во внутренний цикл и print('outer') или распечатайте текущие значения переменных, где это полезно.
Да, вы правы насчет порядка выполнения во вложенных циклах. Внешний цикл будет выполнять итерацию первым, и для каждой итерации внешнего цикла внутренний цикл завершит все свои итерации перед переходом к следующей итерации внешнего цикла.
Как это согласуется с удивлением, что i2
сбрасывается до 3?
Спасибо, это очень помогает. Еще в школе, должно быть, неправильно поняли, что внутренний цикл завершается первым. Для меня имело смысл только то, что одно или другое должно было полностью пройти свой путь раньше другого.
Это произойдет только в том случае, если один цикл будет ПОСЛЕ другого. Но в вашем коде один цикл находится ВНУТРИ другого
Посмотрите это шаг за шагом на pythontutor.com…