Циклы в языке Python

Цикл for

Цикл for позволяет обходить элементы последовательности. Он имеет синтаксис

for переменная in последовательность:
    дальнейшие действия

То, что содержится внутри цикла (т.е. после двоеточия) называется телом цикла. При работе, переменной поочередно присваиваются значения последовательности. Например, мы можем перебрать строку, которая, как известно, является последовательностью.

string = "What?"

for i in string:
    print(i)

Запустив программу мы получаем вывод:

W
h
a
t
?

Что тут произошло? Запустив программу, интерпретатор python наткнулся на цикл. Запустилась первая итерация цикла. Был взят первый элемент строки - s - и присвоен переменной i. Затем было выполнено тело цикла - напечатано значение этой переменной - s. Тело закончилось, но наша строка - еще нет, поэтому цикл начинает новую итерацию. Следующий элемент в строке - h. Переменной i присваивается снова это значение. Затем снова тело цикла, значение переменной i было напечатано. И так до последнего элемента. В конечном счете, в строке элементов больше не осталось и цикл завершился. Кстати, переменная, которая в данном случае называется i, может называться как угодно.

Диапазоны с помощью функции range()

В python есть функция range(), которая может создать диапазон целых чисел. Она принимает три аргумента - начальное значение (необязательно), конечное значение (обязательно) и шаг (необязательно):

a = range(10) # указан только конец
b = range(5, 10) # указано начало и конец
c = range(5, 10, 2) # указано начало, конец и шаг

print(a)
print(b)
print(c)

Получаем вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9]
[5, 7, 9]

Получаемое значение является списком, т.е. имеет тип list. Обратите внимание, что само конечное значение не берется в диапазон (последним элементом является 9 а не 10) и в случае, если не указать начальное значение, отсчет будет вестись с нуля. Теперь давайте применим это в цикле for:

for i in range(10):
    print("Я итерация номер " + str(i))

И получаем вывод:

Я итерация номер 0
Я итерация номер 1
Я итерация номер 2
Я итерация номер 3
Я итерация номер 4
Я итерация номер 5
Я итерация номер 6
Я итерация номер 7
Я итерация номер 8
Я итерация номер 9

Цикл while

Цикл while выполняет тело ПОКА условие истинно. Что нам из этого понятно? Что, в первую очередь, условие должно быть логического типа - bool

a = 1

while a <= 10:
    print(a)
    a += 1

И получаем вывод:

1
2
3
4
5
6
7
8
9
10

В этом коде происходит следующее: проверяется условие, является ли значение a меньшим или равным 10. Если да, то выполняется тело цикла, в котором сначала печатается значение a а затем к a прибавляется 1. После первой итерации цикла a стало равным 2. И так далее, то тех пор, пока a не станет равным 11. Тогда условие не будет выполнено, ведь 11 больше чем 10, и цикл завершит свою работу. Если поставить в качестве условие просто True, у нас получиться бесконечный цикл:

while True:
    print('я бесконечный цикл 🤪')

Этот цикл будет бесконечно выводить сообщение до тех пор, пока вы не остановите программу принудительно, нажав клавиши Ctrl + C

Цикл с постусловием

В школе на уроках информатики проходят различные типы циклов. Один из них - цикл с постусловием. Это такой тип цикла, в котором сначала выполняется тело и только потом выполняется проверка условия. Реализовать такое в Python можно следующим способом:

a = 1

while True:
    print(a)
    a += 1
    if a > 10:
        break

Давайте разберем этот код по шагам:

  1. a = 1: Здесь мы инициализируем переменную a значением 1.

  2. while True:: Это начало цикла while, который будет выполняться бесконечно, так как условие True всегда истинно.

  3. print(a): Внутри цикла выводится значение переменной a.

  4. a += 1: После вывода значения переменной a, она увеличивается на 1.

  5. if a > 10:: Здесь проверяется условие: если значение переменной a больше 10, то выполнится следующий блок кода.

  6. break: Этот оператор прерывает выполнение цикла, если условие a <= 10 перестает быть истинным.

Таким образом, код выводит числа от 1 до 10 включительно, после чего цикл завершается из-за оператора break, который срабатывает, когда a становится больше 10.

Вложенные циклы

Мы можем делать циклы внутри циклов. В таких случаях внешний цикл ждет, когда закончится вложенный цикл. Например, мы можем вывести все возможные перестановки цифр 123

string = "123"

for i in string:
    for j in string:
        for k in string:
            print(f'{i}{j}{k}')

Давайте разберем код:

  1. string = "123": Здесь мы инициализируем строку string значением "123".

  2. for i in string:: Внешний цикл проходит по символам строки string и присваивает значение переменной i.

  3. for j in string:: Второй цикл, вложенный во внешний цикл, также проходит по символам строки string и присваивает значение переменной j.

  4. for k in string:: Третий цикл, вложенный во второй цикл, также проходит по символам строки string и присваивает значение переменной k.

  5. print(f'{i}{j}{k}'): Внутри вложенных циклов выводится комбинация символов ij и k.

Таким образом, этот код выводит все возможные комбинации символов из строки string в виде трехсимвольных чисел. Точно то же самое можно сделать с циклами while:

i = 1
j = 1
k = 1

while i <= 3:
    j = 1
    while j <= 3:
        k = 1
        while k <= 3:
            print(f'{i}{j}{k}')
            k += 1
        j += 1
    i += 1

Это тот же самый код, только с циклом while


ООП. Введение в объектно-ориентированное программирование в Python

Объектно-ориентированное программирование - одна из самых распространенных парадигм. Знание ООП позволит сделать код более гибким и масштабируемым

Модули в языке Python. Разбиение программ на модули. Установка сторонних библиотек

Для написания сложных программ необходимо использовать сторонние библиотеки. Они позволяют использовать готовый функционал. Также можно использовать модули для компоновки вашего приложения.

Pattern matching в Python - конструкция match case

В Python 3.10 был добавлен новый функционал - сопоставление с шаблонами с помощью ключевых слов match и case. В статье также рассматривается производительность match/case по сравнению с if/else.

Классы исключений. Создание собственных исключений

В этой статье описано, что означают различные классы исключений. Также рассмотрено создание собственных классов исключений.