Циклы
В описываемом языке присутствует еще один род конструкций, присущих подходам структурного программирования – это цикл. Реализация поддерживает два вида циклов: цикл с предусловием и цикл со счетчиком. В общем случае цикл содержит преамбулу, определяющую проверяемое выражение, и непосредственно тело цикла – код, который будет выполняться повторно до тех пор, пока вычисляемое перед каждым проходом цикла (итерации) выражение остается истинным. В том случае, если выражение окажется ложным, цикл остановится и начнет выполняться код после описываемой конструкции.
Цикл с предусловием
Конструкция цикла с предусловием начинается с преамбулы: ключевого слова while, далее указывается контролируемое арифметико-логическое выражение, после этого идет двоеточие и, с новой строки, непосредственно тело цикла в отдельном (вложенном блоке). Как и в случае с другими конструкциями, код в теле цикла может содержать в себе другие циклы, условия и прочие описанные ранее элементы языка.
В примерах, приведенных далее, для определенности будем считать, что все используемые переменные объявлены и инициализированы некоторым корректным образом ранее в коде.
while a != b or c < 17:
a = a - 1
c = c + d
Цикл со счетчиком
Цикл со счетчиком устроен более сложно. Преамбула начинается с ключевого
слова for, далее указывается одна или две цикловые переменные, затем
следуют: ключевое слово in, конструкция, регулирующая число итераций,
и двоеточие. С новой строки перечисляется тело цикла во вложенном блоке.
В описывемом языке поддерживаются три конфигурации цикла со счетчиком:
Явное указание числа итераций. Число итераций регулируется конструкцией вида
range(Start, Stop, Step), где все аргументы являются арифметико-логическими выражениями. Цикловой переменной является счетчик, изменяющийся в диапазоне отStart(включительно) доStop(не включительно) с шагомStep. ПараметрыStartи/илиStepмогут быть опущены, в этом случае они принимаются равными 0 и 1 соответственно.for i in range(0, 10, 2): print(i) for i in range(7): for j in range(1, a + b - 1): c = c + 1
Обход списка по значениям. Число итераций регулируется конструкцией, состоящей из имени переменной-списка. В этом случае цикловой переменной является значение элемента из указанного списка, номер которого соответствует номеру итерации цикла.
for value in my_list: x = value - x
Обход списка по номерам (индексам) и значениям. Число итераций регулируется конструкцией вида
enumerate(List), гдеListявляется именем переменной-списка. В этой конфигурации необходимо указывать две цикловые переменные, которым на каждой итерации будут присваиваться индекс и значение элемента списка соответственно.for i, value in enumerate(my_list): another_list[i] = value * 0.1