Вопрос новичка - почему я должен использовать в этом примере вложенный l oop? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь изучить Swift. Сейчас я прохожу 5-й урок «Учебника Swift для начинающих» от Code с Крисом. Я завершаю все подготовленные им задания, но застрял на задании 5, которое заключается в том, чтобы напечатать такой шаблон:

*
**
***
****
*****

Я не понимаю, почему я должен использовать вложенный l oop.

Согласно завершенному файлу задачи, код должен выглядеть так:

var drawPixel:String = "*"
var height:Int = 5
var tempRow:String = ""

for columnPixel in 1...height {
    tempRow = ""
    for _ in 1...columnPixel{
        tempRow += drawPixel
    }
    print(tempRow)
}

но

var drawPixel:String = "*"
var height:Int = 5
var tempRow:String = ""

for _ in 1...height{
    tempRow += drawPixel
    print(tempRow)
}

также работает так, как должно и кажется проще. Я понимаю свой метод (второй код), но не тот, который должен использовать. Мои вопросы:

  1. Почему существует вложенный l oop?
  2. почему в первом примере вложенный l oop относится к columnPixel (для _ в 1 ... columnPixel), поскольку уже определено, что он должен повторять от l oop до 5?
  3. Наконец, почему print (tempRow) находится вне вложенного l oop?

Вот вызов: https://docs.google.com/document/d/1DI-4RkYkRl8EPY17TOwfK8gCl--KMdqLEPP-hz6QHI0/edit# (переходите к Испытанию 5)

Заранее спасибо!

1 Ответ

1 голос
/ 06 августа 2020

Почему существует вложенный l oop?

Внешний l oop и внутренний l oop служат разным целям. Каждая итерация внешнего l oop печатает одну строку. Каждая итерация внутреннего l oop «создает» печатаемую строку.

почему в первом примере вложенный l oop относится к columnPixel (для _ in 1 ... columnPixel), поскольку уже определено, что он должен повторять l oop до 5?

columnPixel упоминается во внутреннем l oop, потому что количество итераций внутреннего l oop изменяется в зависимости от того, какая итерация внешнего l oop:

  • В первой итерации внешнего l oop, внутренний l oop зацикливается только один раз. Построенная строка имеет вид *
  • . Во второй итерации внешнего l oop внутренний l oop повторяется дважды. Построенная строка имеет вид **
  • На третьей итерации внешнего l oop внутренний l oop повторяется три раза. Построенная строка имеет вид ***
  • и так далее ...

Обратите внимание, что columnPixel изменяется с каждой итерацией внешнего l oop. В первой итерации это 1, во второй итерации - 2, et c. Вот почему мы говорим «l oop columnPixel много раз» во внутреннем l oop.

Наконец, почему «print (tempRow)» находится за пределами вложенного l oop?

Нам нужно только напечатать построенную строку, а не во время ее построения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...