В этой статье разбираем циклы и условия в Python 3. Именно эти вещи делают ваш код не линейным и более интересным.

Условия

Линейное выполнение кода — это когда интерпретатор выполняет код последовательно, строчка за строчкой. Но программируя, можно задавать некоторые условия, и в зависимости от этих условий интерпретатор начнёт выполнять одни или другие строчки кода.

Линейное и не линейное выполнение кода

В примере выше, при не линейном выполнении кода, если условие выполняется, то мы выполняем шаг 3, а если не выполняется, то шаг 2. А затем, в любом случае выполняем шаг 4.

Использование условного оператора if

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

Ниже показана схема использования условного оператора if (при этом блоки elif и else — не обязательны):

if <условие>:
    <блок кода 1>
elif <условие 2>:
    <блок кода 2>
elif <условие 3>:
    <блок кода 3>
elif <условие N>:
    <блок кода N>
else:
    <блок кода N+1>

Здесь выполнится только один блок кода, есил выполняется первое условие, то выполняется первый блок кода и остальные блоки не проверяются. Если не одно условие, написанные в if или elif не выполнились, тогда выполняется блок кода написанный в else.

Примеры условий

В качестве условия можно указать:

  • > — больше;
  • < — меньше;
  • >= — больше или равно;
  • <= — меньше или равно;
  • != — не равно;
  • == — равно;
  • in — входит;
  • not in — не входит;
  • is — тождественно (один и тот же объект);
  • is not — не тождественно (не один и тот же объект).

Кстати, элементы могут быть равными, но не тождественными (не являются одним и тем же объектом).

Примеры кода

Первый пример кода с условием, проверяющий какое из чисел больше:

a=input('Введите первое число... ')
b=input('Введите второе число... ')
if a > b:
    print(a, 'больше чем', b)
elif a < b:
    print(a, 'меньше чем', b)
else:
    print(a, 'и', b, 'равны')

### результат выполнения
Введите первое число... 1
Введите второе число... 5
1 меньше чем 5

Программа просит вас ввести первое число и присваивает это число переменной a. Просит вас ввести второе число и присваивает это число переменной b.

Затем начинается блок с условием. После if пишется первое условие, после elif — второе. При этом количество elif может быть любым. И в конце пишется else, без условия и что должно выполнится во всех остальных случаях.

Второй пример кода с условием, который проверяет на вхождение в список:

my_list = [2, 5, 9, 18, 20]
a = int(input("Введите число от 1 до 25..."))
if a in my_list:
    print('Введённое число входит в список')
else:
    print('Введённое число не входит в список')

### результат выполнения
Введите число от 1 до 25...18
Введённое число входит в список

Программа просит вас ввести число и присваивает это число переменной a. Затем проверяет, есть ли это число в списке и если есть пишет одно, а если нет, то пишет другое.

И ещё один пример. С помощью условия if not my_list, вы можете узнать пустой ли список (либо строка, словарь и другой подобный объект):

my_list1 = [1, 2, 3]
my_list2 = []
if not my_list1:
    print("Список my_list1 - пустой")
else:
    print("Список my_list1 не пустой")
if not my_list2:
    print("Список my_list2 - пустой")
else:
    print("Список my_list2 не пустой")

### результат выполнения
Список my_list1 не пустой
Список my_list2 - пустой

Цикл while

Использование цикла while

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

Схема работы цикла с условием

После выполнения первого шага, проверяется условие. Если условие выполняется, то выполняются шаги 2 и 3. Затем опять проверяется условие, если оно опять выполняется, то опять выполняются шаги 2 и 4. И так до тех пор, пока условие не выполнится, тогда выполнится шаг 4. Поэтому при использовании такого цикла важно сделать так, чтобы когда-нибудь условие не выполнилось, а то цикл будет бесконечным.

Схема использования цикла while — следующая:

while <условие>:
    <блок кода>
else:
    <блок кода>

В примере выше, блок кода в else выполнится 1 раз, когда условие не выполнится, этот блок не обязателен. Об этом подробнее будет написано ниже.

В качестве условий здесь можно использовать всё тоже самое что и в операторе if.

Примеры кода

Первый пример с циклом while:

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

### результат выполнения
1
2
3
4
5

Разберу работу цикла по итерациям (по шагам). На первой итерации i (которое равно 0) увеличивается на 1 (i += 1) и выводится в консоль. На второй итерации i уже равно 1, оно увеличивается на 1 и выводится в консоль. И так далее пока i станет равняться 6, при этом условие (i < 5) не выполнится и цикл завершится.

Break и continue

Цикл поддерживает две служебные команды, которые часто используются с условным оператором if:

  • break — завершить работу цикла и продолжить выполнять остальной код;
  • continue — прервать работу на этой итерации и перейти к началу цикла.

Вот пример с break:

i = 1
while i < 20:
    if i > 4 :
        break
    i += i
    print(i)

### результат выполнения
2
4
8

Здесь цикл работает пока i меньше 20. При этом i вначале равняется 1, а в цикле постоянно растёт. Но как только i станет больше 4, то сработает оператор break. И цикл прервёт свою работу.

А вот пример с continue:

i = 0
while i < 10:
    i += 1
    if i % 2 != 0:
        continue
    print(i)

### результат выполнения
2
4
6
8
10

Этот цикл выводит только четные числа от 1 до 10. Работает это таким образом. Вначале i = 0 и в цикле постоянно увеличивается на 1. Если i не делится на 2 без остатка (if i % 2 != 0), то есть остаток от деления на 2 не равен нулю, то пропускает действия снизу и возвращаемся к началу цикла. А если делится на 2 без остатка, то выполняем действия ниже, то есть выводим i в консоль.

Как видите, Python позволяет в циклы помещать условия. И это используется не только для continue и break, а в любых случаях, когда вам это нужно.

Блок else

В цикле while помимо основного блока, есть дополнительный — else. Он выполняется, только если цикл не был прерван оператором break.

В этом примере цикл не будет прерван оператором break и блок кода в else выполнится:

i = 0
while i < 5:
    i += 1
    if i == 10:
        break
    print(i)
else:
    print("Конец цикла!")

### результат выполнения
1
2
3
4
5
Конец цикла!

А в этом примере цикл прервется в тот момент, когда i станет равна 3 с помощью break. Поэтому блок else не выполнится:

i = 0
while i < 5:
    i += 1
    if i == 3:
        break
    print(i)
else:
    print("Конец цикла!")

### результат выполнения
1
2

Цикл for

Использование цикла for

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

Схема работы цикла for следующая:

Схема работы цикла for

Здесь мы пробегаемся по списку объектов и можем с ними что-нибудь делать.

Схема использования цикла for — следующая:

for i in <список / строка / кортеж / словарь / последовательность>:
    <блок кода>
else:
    <блок кода 2>

Также как и с циклом while, блок else считается не обязательным и выполняется, только если цикл не будет прерван с помощью break.

Примеры кода

В первом примере цикл будет по очереди выводить элементы списка my_list.

my_list = [1, 12, 18]
for i in my_list:
    print(i)

### результат выполнения
1
12
18

Во втором примере в цикле будем создавать новый список, в котором все элементы будут больше в два раза чем в исходном списке:

my_list = [2, 3, 4, 5]
my_list2 = []
for i in my_list:
    my_list2.append(i*2)
print(my_list2)

### результат выполнения
[4, 6, 8, 10]

Break и continue

Этот цикл, как и цикл while, поддерживает две служебные команды — break и continue.

Вот пример с break:

my_list = [1, 12, 45, 58, 96]
for i in my_list:
    i += i
    if i >= 100:
        break
    print(i)

### результат выполнения
2
24
90

Здесь я складываю числа из списка: вначале i = 1, получается 1 + 1 = 2, пишет 2. Затем i = 12, 12 + 12 = 24, пишет 24. И так далее. Затем i = 45, 45 + 45 = 90, пишем 90. Затем i = 58, 58 + 58 = 116, 116 это больше 100, выполняем break и больше ничего не пишем.

А вот пример с continue:

my_list = [1, 12, 45, 58, 96]
for i in my_list:
    if i % 2 != 0:
        continue
    print(i)

### результат выполнения
12
58
96

Здесь я вывожу только чётные числа. Если i не делится на 2 без остатка (i % 2 != 0), то возвращаемся к началу цикла и обрабатываем следующий элемент.

Команда pass

Кстати, есть ещё она команда, которую можно использовать в цикле и не только в нём, это команда — pass. Она ничего не делает, но если в этом месте кода нужно что-то написать, но вы пока не знаете что, то можете написать pass.

Этот кусок кода вызовет ошибку:

my_list = [1, 12, 18, 45, 58, 96]
for i in my_list:

А этот не вызовет:

my_list = [1, 12, 18, 45, 58, 96]
for i in my_list:
    pass

Блок else

Так же как и в цикле while, в цикле for есть дополнительный блок — else. Он выполняется, только если цикл не был прерван оператором break.

Например здесь цикл дойдёт до конца и не выполнит оператор break:

my_list = [1, 12, 18]
for i in my_list:
    if i  == 17:
        break
    print(i)
else:
    print("Конец цикла")

### результат выполнения
1
12
18
Конец цикла

А в этом примере оператор break выполнится:

my_list = [1, 12, 18, 45, 58, 96]
for i in my_list:
    if i  == 45:
        break
    print(i)
else:
    print("Конец цикла")

### результат выполнения
1
12
18

Пробегаемся по другим последовательностям (дополнительные примеры)

Список кортежей:

my_list = [(3, 6), (0, 1), (4, 5)]
for (a,b) in my_list:
    print(a, b)

### результат выполнения
3 6
0 1
4 5

Ключи словаря:

my_dict = {'а':1, 'Ь': 10, 'с': 38}
for i in my_dict:
    print(i)

### результат выполнения
а
Ь
с

Ключи и значения словаря:

my_dict = {'а':1, 'Ь': 10, 'с': 38}
for i, in my_dict:
    print(i, '=>', my_dict[i])

### результат выполнения
а => 1
Ь => 10
с => 38

И ещё 1 момент! С помощью функции range() можно сделать последовательность для цикла for, например:

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

### результат выполнения
0
1
2
3
4

Здесь мы создали последовательность от 0 до 5 (не включительно). И пробежались по этой последовательности.

Функция range() позволяет указать шаг итерации, например укажем шаг = 2:

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

### результат выполнения
0
2
4
6
8

Итог

Здесь мы рассмотрели циклы и условия работающие в Python, а именно условный оператор if и два цикла: while и for.

Узнали что конструкция if может дополнительно содержать несколько блоков с elif (с дополнительными условиями) и один блок else (который выполняется в случае если if и ни один elif не выполнился).

Цикл while — это цикл с условием, цикл for — это цикл пробегающий по последовательностям. Кстати последовательность можно сделать с помощью функции range, которую я тоже рассмотрел.

Узнали что циклы while и for также содержат дополнительный блок else, который выполнится при выходе из цикла. А также оба цикла управляются дополнительными инструментами continue и break. При этом, если цикл завершается с помощью break, то блок else не выполняется.

Каждый цикл может содержать в себе вложенный цикл, но не стоит допускать слишком большую вложенность. Также цикл может быть внутри блока if, или наоборот, блок if может быть внутри цикла. То-есть все эти элементы (if, while, for) допускают вложенность.

Другие статьи по Python доступны здесь.

Про if, for, range, break и continue на английском можно почитать в документации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *