[МУЗЫКА] Настало время обсудить вложенные циклы while. Что это такое? Мы разберем, как устроены вложенные циклы, посмотрим на пример и, как обычно, проведем реализацию в Python. Начнем с того, как устроены вложенные циклы. Вот наша стандартная блок-схема. Есть какое-то условие, мы говорим, что это условие внешнего цикла. Ну или пока просто представьте, что это условие цикла. Если условие выполняется, мы попадаем в инструкцию цикла, и пока условие продолжает выполняться, мы повторяем инструкции цикла. Как только условие перестало выполняться, мы выйдем из цикла. А теперь посмотрим, почему-то мы называли это условием внешнего цикла. А все потому, что внутри может быть еще один цикл, и тогда мы будем сначала проверять условие внешнего цикла. Если оно выполнится, мы будем проверять условие внутреннего цикла. Если выполняется условие внутреннего цикла, мы попадаем к инструкциям, и мы будем повторять инструкции до тех пор, пока условие внутреннего цикла выполняется. Как только условие внутреннего цикла выполняться перестанет, мы снова будем проверять условие внешнего цикла. Если оно выполняется, мы снова попадем в инструкции внешнего цикла, в которых спрятан внутренний цикл. И пока условие внутреннего цикла выполняется, инструкции будут повторяться. Когда оно перестанет выполняться, мы снова идем к внешнему циклу. А когда уже и внешний цикл перестанет выполняться, мы выйдем из цикла. Запутались? Сейчас будет легче. Почему? Мы разберем на примере. Пример такой. Вспомним школьные годы, таблица умножения была напечатана на обложке тетради, такой зеленой. Посмотрим, как она устроена. Здесь, начиная с двух, выписаны все результаты умножения: 2 × 1, 2 × 2 и так далее до 9 × 9. Мы будем с вами сейчас составлять свою такую таблицу, которая будет выглядеть почти точно так же, но только она будет вся записана в один столбец. А будем выводить результат умножения i × j, то есть i — это первая переменная, первый множитель, а j — это второй множитель. Вначале нам нужно задать начальное значение i, оно будет равно 2, потом что у нас в таблице умножение начиналось с 2. Сначала i будет равно 2, пока i меньше 10, потому что мы должны до 9 дойти, да? Помните, последнее это 9 × 9. То есть пока i < 10, нам нужно... Теперь мы вводим переменную j. j = 1, пока j < 10 мы будем выводить произведение, то есть результат умножения i × j. Почему мы в первый раз начали с 2, а во второй раз с 1? Ну вспомните, там 2 × 1 — это первая запись. 2 это i, 1 это j. 2 × 1, поэтому у нас первые начальные значения переменных: у i —2, а у j — 1. Выводим i на j, увеличиваем j на единицу, потому что у нас столбец: 2 × 1, 2 × 2, 2 × 3, 2 × 4 — вот оно увеличение будет значения переменной j. Увеличиваем j, а потом уже, когда все j прошли для первого значения i, увеличиваем и i. Составим блок-схему по этому алгоритму. Сначала i = 2, потом пока i < 10, выполняются какие-то инструкции, не забываем сразу прописать последнюю инструкцию увеличения i на единицу. А что там еще будет? Начальное значение j = 1, и пишем теперь внутренний цикл while. Пока j < 10, выводим произведение i × j и увеличиваем j на единицу. Вот и все. Надо понять только, как именно будут меняться переменные. Я это уже проговорила, давайте еще разок посмотрим. Сначала у нас i = 2, а j = 1. Это мы попали в первый раз из внешнего цикла во внутренний. Теперь мы будем повторять инструкции внутреннего цикла, там будет увеличиваться j, а i остается прежним, то есть i все время 2, 2, 2, а j увеличивается: 1, 2, 3 и так далее до 9. Как только j дойдет до 9, мы из внутреннего цикла выходим, попадаем снова к проверке условия внешнего цикла, предварительно увеличив i на 1. И теперь у нас i = 3, и дальше j снова увеличивается поэтапно. Теперь можем попробовать реализовать это в Python и заодно посмотреть не на кусочек вывода, а на весь наш вывод. Это мы сможем сделать, когда пропишем все руками. Как будет выглядеть наша реализация в Python? Задаем начальное значение i = 2, ну просто пишем i = 2, while i < 10, j = 1, while j < 10, выводим и на j print. Можем здесь сделать красивый print, чтобы он был похож на обложку тетради: значение переменной i, крестик, значение переменной j, равно и результат умножения. Потом мы увеличиваем j, j — это j + 1, или можем написать j + = 1, то же самое получится, и увеличиваем i, i = i + 1. Чтобы нам было удобней смотреть на результат, мы можем добавить пустую строку, отделяя блоки для разных значений переменной i. Вы это увидите очень явно, когда мы будем прописывать руками, а пока просто укажем здесь print пустой. Это будет дополнительная строка. Как это будет выглядеть в выводе, сейчас узнаем, когда пропишем весь код вручную. [МУЗЫКА]