Добро пожаловать на мой письменный курс Введение в Python! В предыдущей статье были рассмотрены операторы сравнения, логические операторы и условные операторы для создания логики ветвления.



Циклы необходимы в программировании, поскольку они позволяют многократно повторять определенный блок кода. В Python у нас есть два типа циклов: циклы for и циклы while. В этой статье мы рассмотрим, как использовать оба этих цикла в Python.

Операторы присваивания

Операторы присваивания используются для присвоения значения переменной в Python. Самый простой оператор присваивания — это знак равенства (=), который используется для присвоения значения переменной. Например:

x = 10  # This will assign the value 10 to the variable x 

Составные операторы присваивания

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

Составные операторы присваивания позволяют нам выполнять операцию и присваивать результат переменной за один шаг. Например:

x = 10
x += 5  # This will add 5 to x and assign the result (15) to x

Без составных операторов присваивания нам может понадобиться использовать отдельный оператор присваивания, что может сделать код более подробным и менее читаемым. Например:

x = 10
x = x + 5  # The same resutl as the example above

В Python есть несколько составных операторов присваивания, включая +=, -=, *=, /= и %=. Вот несколько примеров их использования:

x = 10
y = 5
z = 2

x += y  # x is now 15
x -= z  # x is now 13
x *= y  # x is now 65
x /= z  # x is now 32.5
x %= y  # x is now 2.5

Есть много других составных операторов присваивания, но, поскольку они не используются для общих целей, я не буду рассматривать их в этой статье.

Циклы «пока»

Цикл while в Python позволяет нам повторять определенный блок кода до тех пор, пока выполняется определенное условие. Вот основной синтаксис цикла while в Python:

while condition:
    # code to be executed

Давайте посмотрим на пример цикла while в действии. Предположим, мы хотим вывести в консоль числа от 1 до 5:

i = 1
while i <= 5:
    print(i)
    i += 1

Это выведет на консоль следующее:

1
2
3
4
5

Важно отметить, что нам нужно указать способ обновления значения i, чтобы избежать бесконечного цикла.

Циклы «для»

Цикл for в Python позволяет нам перебирать последовательность элементов, например список или строку. Вот основной синтаксис цикла for в Python:

for element in sequence:
    # code to be executed

Давайте посмотрим на пример цикла for в действии. Предположим, у нас есть список целых чисел, и мы хотим вывести каждое из них в консоль:

numbers = [1, 2, 3, 4, 5]
for number in numbers:
    print(number)

Это выведет на консоль следующее:

1
2
3
4
5

Мы также можем использовать цикл for для перебора строки. Например:

name = "Phil"
for letter in name:
    print(letter)

Это выведет на консоль следующее:

P
h
i
l

Еще одна полезная функция циклов for — возможность использовать функцию range() для указания количества итераций. Функция range() возвращает последовательность чисел, начиная с 0 по умолчанию и увеличиваясь на 1 (также по умолчанию), и останавливается перед указанным числом. Например:

for i in range(5):
    print(i)

Это выведет на консоль следующее:

0
1
2
3
4

Мы также можем указать начальное и конечное значения для функции range(). Например:

for i in range(2, 5):
    print(i)

Это выведет на консоль следующее:

2
3
4

Наконец, мы также можем указать размер шага для функции range(). Например:

for i in range(1, 10, 2):
    print(i)

Это выведет на консоль следующее:

1
3
5
7
9

Когда использовать какой цикл?

В общем, циклы for лучше подходят для ситуаций, когда нам нужно перебрать известную последовательность элементов, например список или строку. Циклы While лучше подходят для ситуаций, когда нам нужно повторять определенную задачу до тех пор, пока не будет выполнено определенное условие, например, при чтении ввода от пользователя или ожидании установления сетевого подключения.

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

Рекурсия

Рекурсия — это метод программирования, при котором функция вызывает себя для повторения определенной задачи. Это может быть полезным способом решения конкретных проблем, поскольку позволяет разбить проблему на более мелкие, более управляемые части, которые можно решать независимо друг от друга.

Вот простой пример рекурсивной функции:

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

Эта функция вычисляет факториал числа, являющегося произведением всех натуральных чисел от 1 до n. Он использует базовый вариант (if n == 1), чтобы остановить рекурсию, когда мы достигнем конца последовательности.

Если значение n равно 1, функция возвращает 1. В противном случае функция вызывает себя со значением n - 1 и умножает результат на n. Это позволяет нам разбить вычисление факториала на более мелкие части, которые можно решать независимо друг от друга.

Мы можем вызвать эту функцию следующим образом:

print(factorial(5))  # Outputs 120

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

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

Вот пример решения с использованием цикла for:

def factorial(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

Рекурсивная версия разбивает вычисление на более мелкие части, которые решаются независимо друг от друга, а итеративная версия выполняет все вычисления сразу.

Есть различия в производительности и эффективности. Рекурсивная версия может быть медленнее и использовать больше памяти из-за накладных расходов на повторный вызов функции. Итеративная версия может быть быстрее и использовать меньше памяти, так как она выполняет все вычисления сразу и не требует накладных расходов на вызовы функций.

Как правило, важно учитывать компромиссы между рекурсией и итеративностью.

В заключение, циклы — это фундаментальная концепция программирования, которая позволяет нам многократно повторять блок кода. В Python у нас есть два типа циклов: циклы while и циклы for.

Кроме того, рекурсия — это метод программирования, при котором функция вызывает себя для повторения задачи. Это может быть ценным способом решения конкретных проблем. Важно включить базовый вариант, чтобы остановить рекурсию и рассмотреть производительность и эффективность решения.

Следующая статья углубляется в строки Python.

Оставайтесь с нами, и давайте код!



Если вам интересно прочитать другие статьи, написанные мной. Посмотрите мой репозиторий со всеми написанными мной статьями, разделенными по категориям.

Спасибо, что прочитали