Вложенные циклы
Часть раздела Основы путешествия по GO на Coddy. Урок 49 из 109.
Вложенные циклы — это циклы, размещённые внутри другого цикла. Внутренний цикл полностью выполняется для каждой итерации внешнего цикла.
Давайте создадим таблицу умножения для чисел 1–3, используя вложенные циклы:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}После выполнения этого кода мы получаем таблицу умножения, где each row представляет одно значение переменной outer loop (i), умноженное на все значения переменной inner loop (j). На экране будет показан следующий вывод:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9 Давайте разберёмся, как это работает, шаг за шагом:
Сначала внешний цикл устанавливает i=1, а внутренний цикл выполняется полностью:
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"После завершения inner loop мы выводим новую строку с помощью fmt.Println().
Затем внешний цикл устанавливает i=2, и внутренний цикл запускается снова:
i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"Наконец, внешний цикл устанавливает i=3, и внутренний цикл выполняется в последний раз:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"Этот шаблон циклов внутри циклов очень полезен для работы с таблицами данных или создания структур, похожих на сетку.
Задание
НовичокВ этом задании ты потренируешься использовать nested loop, чтобы напечатать простой узор. Цикл outer будет iterate through rows, а цикл inner будет iterate through columns, чтобы создать небольшую grid из символов.
Заверши nested loop, чтобы напечатать grid 3x3 из asterisks (*). После каждого asterisk должен стоять пробел, поэтому каждая строка должна выглядеть как * * * (с пробелом в конце). Ожидаемый вывод:
* * * * * * * * *
Попробуйте сами
package main
import "fmt"
func main() {
// Количество строк и столбцов в нашей сетке
rows := 3
columns := 3
// TODO: Создайте вложенный цикл для печати сетки из звёздочек (*)
// Внешний цикл должен проходить по строкам
// Внутренний цикл должен проходить по столбцам
for i := 0; i < rows; i++ {
// Добавьте здесь внутренний цикл для печати звёздочек в каждом столбце
// Это печатает новую строку после каждой строки
fmt.Println()
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решенийПотренируйтесь самостоятельно: Онлайн-компилятор Go