Вложенные циклы
Часть раздела Основы путешествия по 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()
}После выполнения этого кода мы получим таблицу умножения, в которой каждая строка представляет собой одно значение переменной внешнего цикла (i), умноженное на все значения переменной внутреннего цикла (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"После завершения внутреннего цикла мы выводим новую строку с помощью fmt.Println().
Затем внешний цикл устанавливает i=2, и внутренний цикл запускается снова:
i=2, j=1: выводит "2×1=2"
i=2, j=2: выводит "2×2=4"
i=2, j=3: выводит "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"Этот паттерн вложенных циклов очень полезен для работы с таблицами данных или создания сеточных структур.
Задание
НовичокВ этом испытании вы попрактикуетесь в использовании вложенных циклов для вывода простого паттерна. Внешний цикл будет итерироваться по строкам, а внутренний — по столбцам, чтобы создать небольшую сетку из символов.
Завершите вложенные циклы, чтобы вывести сетку 3x3 из звездочек (*). После каждой звездочки должен идти пробел, поэтому каждая строка должна выглядеть как * * * (с пробелом в конце). Ожидаемый результат:
* * * * * * * * *
Шпаргалка
Вложенные циклы — это циклы, помещенные внутрь другого цикла. Внутренний цикл полностью выполняется для каждой итерации внешнего цикла.
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}Внешний цикл управляет строками, а внутренний — столбцами. Для каждой итерации внешнего цикла внутренний цикл завершает все свои итерации, прежде чем перейти к следующей итерации внешнего цикла.
Попробуйте сами
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`Итоги — Принятие решений