Циклы

В описываемом языке присутствует еще один род конструкций, присущих подходам структурного программирования – это цикл. Реализация поддерживает два вида циклов: цикл с предусловием и цикл со счетчиком. В общем случае цикл содержит преамбулу, определяющую проверяемое выражение, и непосредственно тело цикла – код, который будет выполняться повторно до тех пор, пока вычисляемое перед каждым проходом цикла (итерации) выражение остается истинным. В том случае, если выражение окажется ложным, цикл остановится и начнет выполняться код после описываемой конструкции.

Цикл с предусловием

Конструкция цикла с предусловием начинается с преамбулы: ключевого слова 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
    

Назад